From a93a2ba066f974e6afc1033939c7eabb9e3a01d0 Mon Sep 17 00:00:00 2001 From: yunielrc87 Date: Fri, 15 Sep 2023 19:11:48 -0400 Subject: [PATCH] feat(package): add an instruction to run docker-compose.yml --- Vedvfile | 25 ++++++++++++++++--- .../package/ydf-package-service.bash | 21 +++++++++++++--- .../packages/0freedom-fail/docker-compose.yml | 6 +++++ .../docker-compose.yml | 6 +++++ .../packages/9hello-world@dockercomp/install | 1 + .../9hello-world@dockercomp/postinstall | 1 + .../9hello-world@dockercomp/preinstall | 1 + .../package/ydf-package-command.f.bats | 15 +++++++++++ .../package/ydf-package-service.i.bats | 25 +++++++++++++++++-- tools/ct-clean-exec | 2 +- tools/install-run-manjaro | 6 +++++ 11 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 tests/fixtures/packages/0freedom-fail/docker-compose.yml create mode 100644 tests/fixtures/packages/9hello-world@dockercomp/docker-compose.yml create mode 100644 tests/fixtures/packages/9hello-world@dockercomp/install create mode 100644 tests/fixtures/packages/9hello-world@dockercomp/postinstall create mode 100644 tests/fixtures/packages/9hello-world@dockercomp/preinstall diff --git a/Vedvfile b/Vedvfile index b68374b..f26181b 100644 --- a/Vedvfile +++ b/Vedvfile @@ -2,14 +2,31 @@ FROM admin@manjaro/manjaro-gnome-22.1.3-x86_64 WORKDIR /home/vedv/ydf -RUN sudo pacman-mirrors --fasttrack +# update the system +RUN sudo pacman-mirrors --fasttrack && sudo pacman -Syu --noconfirm --needed # install gnome base system RUN sudo -H flatpak install --assumeyes --noninteractive io.github.andreibachim.shortcut +# install dev dependencies +COPY packages.env . + RUN mkdir tools -COPY tools/install-run-manjaro tools COPY tools/install-dev-manjaro.vedv tools -COPY packages.env . +RUN tools/install-dev-manjaro.vedv -RUN tools/install-run-manjaro && tools/install-dev-manjaro.vedv +# install runtime dependencies +## yay +RUN sudo pacman -S --noconfirm --needed yay && \ + source ./packages.env && \ + yay -S --noconfirm --needed "\${PKG_RUN_MANJARO_YAY[@]}" +## snapd +RUN sudo pacman -S --noconfirm --needed snapd && \ + sudo systemctl enable apparmor && \ + sudo systemctl enable snapd.apparmor && \ + sudo systemctl enable snapd && \ + sudo ln -vs /var/lib/snapd/snap /snap +## docker +RUN sudo pacman -S --noconfirm --needed docker docker-compose && \ + sudo systemctl enable docker && \ + sudo usermod -aG docker "\$USER" diff --git a/src/usr/lib/ydf/components/package/ydf-package-service.bash b/src/usr/lib/ydf/components/package/ydf-package-service.bash index e83800c..7d5f8f7 100644 --- a/src/usr/lib/ydf/components/package/ydf-package-service.bash +++ b/src/usr/lib/ydf/components/package/ydf-package-service.bash @@ -29,7 +29,7 @@ fi # readonly __YDF_PACKAGE_SERVICE_INSTRUCTIONS_UBUNTU="preinstall apt install postinstall ${__YDF_PACKAGE_SERVICE_INSTRUCTIONS_COMMON}" readonly __YDF_PACKAGE_SERVICE_INSTRUCTIONS_COMMON='' -readonly __YDF_PACKAGE_SERVICE_INSTRUCTIONS_MANJARO="preinstall install @pacman @yay @flatpak @snap postinstall ${__YDF_PACKAGE_SERVICE_INSTRUCTIONS_COMMON}" +readonly __YDF_PACKAGE_SERVICE_INSTRUCTIONS_MANJARO="preinstall install @pacman @yay @flatpak @snap docker_compose:docker-compose.yml postinstall ${__YDF_PACKAGE_SERVICE_INSTRUCTIONS_COMMON}" # readonly __YDF_PACKAGE_SERVICE_INSTRUCTIONS_UBUNTU="preinstall install postinstall ${__YDF_PACKAGE_SERVICE_INSTRUCTIONS_COMMON}" # @@ -175,6 +175,19 @@ ydf::package_service::__instruction_@snap() { eval sudo -H snap install "${snap_pkg_name:-"$pkg_name"}" } +# +# Execute docker-compose.yml instruction +# +# Arguments: +# pkg_name string package name +# +# Returns: +# 0 on success, non-zero on error. +# +ydf::package_service::__instruction_docker_compose() { + docker compose up -d +} + # # Install a ydotfile package from a directory # @@ -224,9 +237,11 @@ ydf::package_service::install_one_from_dir() { } for _instr in "${instr_arr[@]}"; do - local ifunction="ydf::package_service::__instruction_${_instr}" + local ifunc_partial_name="${_instr%%:*}" + local ifile_name="${_instr##*:}" + local ifunction="ydf::package_service::__instruction_${ifunc_partial_name}" - if [[ ! -f "./${_instr}" ]]; then + if [[ ! -f "./${ifile_name}" ]]; then continue fi diff --git a/tests/fixtures/packages/0freedom-fail/docker-compose.yml b/tests/fixtures/packages/0freedom-fail/docker-compose.yml new file mode 100644 index 0000000..e74a9c6 --- /dev/null +++ b/tests/fixtures/packages/0freedom-fail/docker-compose.yml @@ -0,0 +1,6 @@ + +services: + webapp: + image: hello-world + ports: + - "8000:8000" diff --git a/tests/fixtures/packages/9hello-world@dockercomp/docker-compose.yml b/tests/fixtures/packages/9hello-world@dockercomp/docker-compose.yml new file mode 100644 index 0000000..cd2cb74 --- /dev/null +++ b/tests/fixtures/packages/9hello-world@dockercomp/docker-compose.yml @@ -0,0 +1,6 @@ +services: + webapp: + container_name: hello_world + image: hello-world + ports: + - "8000:8000" diff --git a/tests/fixtures/packages/9hello-world@dockercomp/install b/tests/fixtures/packages/9hello-world@dockercomp/install new file mode 100644 index 0000000..5575498 --- /dev/null +++ b/tests/fixtures/packages/9hello-world@dockercomp/install @@ -0,0 +1 @@ +echo '8go@snap: install succeed' diff --git a/tests/fixtures/packages/9hello-world@dockercomp/postinstall b/tests/fixtures/packages/9hello-world@dockercomp/postinstall new file mode 100644 index 0000000..f3c00cd --- /dev/null +++ b/tests/fixtures/packages/9hello-world@dockercomp/postinstall @@ -0,0 +1 @@ +echo '8go@snap: postinstall succeed' diff --git a/tests/fixtures/packages/9hello-world@dockercomp/preinstall b/tests/fixtures/packages/9hello-world@dockercomp/preinstall new file mode 100644 index 0000000..a3cd3f8 --- /dev/null +++ b/tests/fixtures/packages/9hello-world@dockercomp/preinstall @@ -0,0 +1 @@ +echo '8go@snap: preinstall succeed' diff --git a/tests/usr/lib/ydf/components/package/ydf-package-command.f.bats b/tests/usr/lib/ydf/components/package/ydf-package-command.f.bats index 10c63ba..e7bf831 100644 --- a/tests/usr/lib/ydf/components/package/ydf-package-command.f.bats +++ b/tests/usr/lib/ydf/components/package/ydf-package-command.f.bats @@ -252,3 +252,18 @@ com.github.tchx84.Flatseal: postinstall succeed" assert_success assert_output --partial "/bin/multipass" } + +# Tests for ydf package install +@test "ydf package install ./9hello-world@dockercomp Should succeed" { + local -r _package_dir="${TEST_FIXTURES_DIR}/packages/9hello-world@dockercomp" + + run ydf package install "$_package_dir" + + assert_success + assert_output --partial "Container hello_world Started" + + run docker container ls -qaf "name=hello_world" + + assert_success + assert [ -n "$output" ] +} diff --git a/tests/usr/lib/ydf/components/package/ydf-package-service.i.bats b/tests/usr/lib/ydf/components/package/ydf-package-service.i.bats index e6cf894..9665b7b 100644 --- a/tests/usr/lib/ydf/components/package/ydf-package-service.i.bats +++ b/tests/usr/lib/ydf/components/package/ydf-package-service.i.bats @@ -166,7 +166,7 @@ setup() { ydf::package_service::get_instructions_names() { assert_equal "$*" '' - echo 'preinstall postinstall' + echo 'preinstall postinstall docker_compose:docker-compose.yml' } ydf::package_service::__instruction_instruction1() { assert_equal "$*" '0freedom-fail' @@ -177,12 +177,17 @@ setup() { assert_equal "$*" '0freedom-fail' echo preinstall } + ydf::package_service::__instruction_docker_compose() { + assert_equal "$*" '0freedom-fail' + echo docker_compose + } run ydf::package_service::install_one_from_dir "$_package_dir" assert_success assert_output "preinstall -postinstall" +postinstall +docker_compose" } # Tests for ydf::package_service::__instruction_install() @@ -263,3 +268,19 @@ postinstall" assert_output --partial 'bin/go' } + +# Tests for ydf::package_service::__instruction_docker_compose() +@test "ydf::package_service::__instruction_docker_compose() Should succeed" { + + cd "${TEST_FIXTURES_DIR}/packages/9hello-world@dockercomp" + + run ydf::package_service::__instruction_docker_compose '9hello-world@dockercomp' + + assert_success + assert_output --partial "Container hello_world Started" + + run docker container ls -qaf "name=hello_world" + + assert_success + assert [ -n "$output" ] +} diff --git a/tools/ct-clean-exec b/tools/ct-clean-exec index 0683d71..927eeeb 100755 --- a/tools/ct-clean-exec +++ b/tools/ct-clean-exec @@ -40,7 +40,7 @@ fi echo echo ">>Copying files to container" -echo "Attention: if the container is starting it can take up to 30 seconds before the files are copied" +echo ">>>Attention: if the container is starting it can take up to 30 seconds before the files are copied" vedv container copy --no-vedvfileignore "$VEDV_CONTAINER_NAME" . . echo ">>Files copied" diff --git a/tools/install-run-manjaro b/tools/install-run-manjaro index c89dde8..3a968d0 100755 --- a/tools/install-run-manjaro +++ b/tools/install-run-manjaro @@ -23,3 +23,9 @@ sudo ln -vs /var/lib/snapd/snap /snap echo ">>Attention: log out and back in again, or restart your system, to ensure snap’s paths are updated correctly" # sudo snap install core + +# Install docker +sudo pacman -S --noconfirm --needed docker docker-compose +sudo systemctl enable docker --now + +sudo usermod -aG docker "$USER"