diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 6e17b046..8d66bcb4 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -7,61 +7,77 @@ name: E2E paths: - perlbrew - .github/workflows/e2e.yml + - test-e2e/*.zsh jobs: debian: runs-on: ubuntu-latest container: image: debian:latest + env: + PERLBREW_E2E: 1 steps: - run: | apt-get update -y - apt-get install -y zsh perl curl + apt-get install -y zsh perl curl build-essential - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh ubuntu: runs-on: ubuntu-latest container: image: ubuntu:latest + env: + PERLBREW_E2E: 1 steps: - run: | + yes | unminimize apt-get update -y - apt-get install -y zsh perl curl + apt-get install -y zsh perl curl build-essential man-db - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh fedora: runs-on: ubuntu-latest container: image: fedora:latest + env: + PERLBREW_E2E: 1 steps: - run: | - dnf install -y zsh perl + dnf install -y zsh perl make automake gcc gcc-c++ kernel-devel - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh almalinux: runs-on: ubuntu-latest container: image: almalinux:latest + env: + PERLBREW_E2E: 1 steps: - run: | - dnf install -y zsh perl + dnf install -y zsh perl make automake gcc gcc-c++ kernel-devel - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh rockylinux: runs-on: ubuntu-latest container: image: docker.io/rockylinux/rockylinux:latest + env: + PERLBREW_E2E: 1 + PERLBREW_E2E_INSTALL_NOTEST: 1 steps: - run: | - dnf install -y zsh perl + dnf install -y zsh perl make automake gcc gcc-c++ kernel-devel - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh opensuse: runs-on: ubuntu-latest container: image: opensuse/tumbleweed:latest + env: + PERLBREW_E2E: 1 steps: - run: | - zypper install -y zsh perl + zypper install -y -t pattern devel_basis + zypper install -y zsh perl awk - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh macos-latest: @@ -80,3 +96,18 @@ jobs: perl-version: '5.40' - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh + cygwin: + runs-on: windows-latest + env: + PERLBREW_E2E_INSTALL_NOTEST: 1 + steps: + - uses: cygwin/cygwin-install-action@master + with: + packages: zsh bash curl make perl gcc-g++ libcrypt-devel perl-Module-Build perl-Module-Pluggable + add-to-path: true + - uses: actions/checkout@v4 + - name: run e2e + run: | + cd "$GITHUB_WORKSPACE" + zsh ./test-e2e/run.zsh + shell: C:\cygwin\bin\bash.exe --login -o igncr -eo pipefail '{0}' diff --git a/.github/workflows/e2e.ys b/.github/workflows/e2e.ys index ba390856..ff279784 100644 --- a/.github/workflows/e2e.ys +++ b/.github/workflows/e2e.ys @@ -1,15 +1,53 @@ --- !yamlscript/v0 +job-config =:: + with-dnf =:: &with-dnf | + dnf install -y zsh perl make automake gcc gcc-c++ kernel-devel + + fedora: + init: *with-dnf + + almalinux: + init: *with-dnf + + rockylinux: + env: + PERLBREW_E2E_INSTALL_NOTEST: 1 + init: *with-dnf + + debian: + init: | + apt-get update -y + apt-get install -y zsh perl curl build-essential + + ubuntu: + init: | + yes | unminimize + apt-get update -y + apt-get install -y zsh perl curl build-essential man-db + + opensuse: + init: | + zypper install -y -t pattern devel_basis + zypper install -y zsh perl awk + + alpine: + init: | + apk add zsh perl + e2e-steps =:: - uses: actions/checkout@v4 - run: zsh ./test-e2e/run.zsh -defn gen-container-job(init image=nil):: +defn gen-container-job(config image=nil):: runs-on: ubuntu-latest container: image:: image + env: + PERLBREW_E2E: 1 + :: config.env steps: - - run:: init + - run:: config.init - :: e2e-steps defn gen-macos-job(os):: @@ -20,6 +58,22 @@ defn gen-macos-job(os):: perl-version: "5.40" - :: e2e-steps +defn gen-cygwin-job():: + runs-on: windows-latest + env: + PERLBREW_E2E_INSTALL_NOTEST: 1 + steps: + - uses: cygwin/cygwin-install-action@master + with: + packages: zsh bash curl make perl gcc-g++ libcrypt-devel perl-Module-Build perl-Module-Pluggable + add-to-path: true + - uses: actions/checkout@v4 + - name: run e2e + run: | + cd "$GITHUB_WORKSPACE" + zsh ./test-e2e/run.zsh + shell: C:\cygwin\bin\bash.exe --login -o igncr -eo pipefail '{0}' + --- !yamlscript/v0: name: E2E @@ -29,14 +83,15 @@ on: paths: - perlbrew - .github/workflows/e2e.yml + - test-e2e/*.zsh jobs: - init =: load("src/init.yaml") - debian:: gen-container-job(init.ubuntu, 'debian:latest') - ubuntu:: gen-container-job(init.ubuntu, 'ubuntu:latest') - fedora:: gen-container-job(init.fedora 'fedora:latest') - almalinux:: gen-container-job(init.almalinux 'almalinux:latest') - rockylinux:: gen-container-job(init.rockylinux 'docker.io/rockylinux/rockylinux:latest') - opensuse:: gen-container-job(init.opensuse 'opensuse/tumbleweed:latest') + debian:: gen-container-job(job-config.debian, 'debian:latest') + ubuntu:: gen-container-job(job-config.ubuntu, 'ubuntu:latest') + fedora:: gen-container-job(job-config.fedora 'fedora:latest') + almalinux:: gen-container-job(job-config.almalinux 'almalinux:latest') + rockylinux:: gen-container-job(job-config.rockylinux 'docker.io/rockylinux/rockylinux:latest') + opensuse:: gen-container-job(job-config.opensuse 'opensuse/tumbleweed:latest') macos-latest:: gen-macos-job("macos-latest") macos-13:: gen-macos-job("macos-13") + cygwin:: gen-cygwin-job() diff --git a/.github/workflows/src/init.yaml b/.github/workflows/src/init.yaml deleted file mode 100644 index b71b36a6..00000000 --- a/.github/workflows/src/init.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -with-dnf: &with-dnf | - dnf install -y zsh perl - -with-apt: &with-apt | - apt-get update -y - apt-get install -y zsh perl curl - -fedora: *with-dnf -almalinux: *with-dnf -rockylinux: *with-dnf - -debian: *with-apt -ubuntu: *with-apt - -opensuse: | - zypper install -y zsh perl - -alpine: | - apk add zsh perl diff --git a/test-e2e/lib-tests.zsh b/test-e2e/lib-tests.zsh index 18598f97..e7318d53 100644 --- a/test-e2e/lib-tests.zsh +++ b/test-e2e/lib-tests.zsh @@ -1,29 +1,73 @@ +PERLBREW_E2E=/tmp/e2e +export PERLBREW_ROOT=$PERLBREW_E2E/root +export PERLBREW_HOME=$PERLBREW_E2E/home + +PERLBREW=$PERLBREW_ROOT/bin/perlbrew + +e2e-begin() { + mkdir $PERLBREW_E2E + mkdir $PERLBREW_ROOT + mkdir $PERLBREW_HOME + echo 'E2E BEGIN -- preapre $PERLBREW_E2E' +} + +e2e-end() { + rm -rf $PERLBREW_E2E + echo 'E2E END -- cleanup $PERLBREW_E2E' +} test-perlbrew-self-install() { echo 'TEST - perlbrew self-install' - assert-file-missing ~/perl5/perlbrew/bin/perlbrew + assert-file-missing $PERLBREW_ROOT/bin/perlbrew assert-ok ./perlbrew self-install - assert-file-exists ~/perl5/perlbrew/bin/perlbrew + assert-file-exists $PERLBREW_ROOT/bin/perlbrew + + $PERLBREW_ROOT/bin/perlbrew install-patchperl + assert-file-exists $PERLBREW_ROOT/bin/patchperl + + eval "$($PERLBREW init-in-bash)" } -test-perlbrew-install-skaji-relocatable-perl() { - echo 'TEST - perlbrew install skaji-relocatable-perl' +test-perlbrew-install() { + local installation=$1 + shift - local PERLBREW=~/perl5/perlbrew/bin/perlbrew + echo "TEST - perlbrew install $installation" assert-file-exists $PERLBREW - assert-dir-missing ~/perl5/perlbrew/perls/skaji-relocatable-perl-5.40.0.1 + assert-dir-missing $PERLBREW_ROOT/perls/$installation + + if [[ -n "$PERLBREW_E2E_INSTALL_NOTEST" ]] + then + $PERLBREW install --verbose --notest $installation + else + $PERLBREW install --verbose $installation + fi + + assert-dir-exists $PERLBREW_ROOT/perls/$installation + assert-file-exists $PERLBREW_ROOT/perls/$installation/bin/perl + + assert-ok $PERLBREW_ROOT/perls/$installation/bin/perl -v + + echo "OK - perlbrew install $installation" +} + +test-perlbrew-uninstall() { + local installation=$1 + shift + + echo "TEST - perlbrew uninstall $installation" - $PERLBREW install skaji-relocatable-perl-5.40.0.1 + assert-dir-exists $PERLBREW_ROOT/perls/$installation + assert-file-exists $PERLBREW_ROOT/perls/$installation/bin/perl - assert-dir-exists ~/perl5/perlbrew/perls/skaji-relocatable-perl-5.40.0.1 - assert-file-exists ~/perl5/perlbrew/perls/skaji-relocatable-perl-5.40.0.1/bin/perl + $PERLBREW uninstall --verbose --yes $installation - assert-ok ~/perl5/perlbrew/perls/skaji-relocatable-perl-5.40.0.1/bin/perl -v + assert-dir-missing $PERLBREW_ROOT/perls/$installation - echo 'OK - perlbrew install skaji-relocatable-perl-5.40.0.1' + echo "OK - perlbrew uninstall $installation" } diff --git a/test-e2e/run.zsh b/test-e2e/run.zsh index 6c16304e..c9fcfee2 100755 --- a/test-e2e/run.zsh +++ b/test-e2e/run.zsh @@ -6,13 +6,24 @@ source $e2eDir/lib-tests.zsh echo "# uname -a" uname -a - local testName=$1 +e2e-begin + +TRAPEXIT() { + e2e-end +} + if [[ ! -z $testName ]]; then $testName - exit 0 -fi +else + test-perlbrew-self-install + + if [[ ! ( "$OSTYPE" =~ ^cygwin ) ]]; then + test-perlbrew-install skaji-relocatable-perl-5.40.1.0 + test-perlbrew-uninstall skaji-relocatable-perl-5.40.1.0 + fi -test-perlbrew-self-install -test-perlbrew-install-skaji-relocatable-perl + test-perlbrew-install perl-5.40.1 + test-perlbrew-uninstall perl-5.40.1 +fi