From 4111f9090b52f50b81fb2e615471a695fd21dd0f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 4 Mar 2025 20:26:31 +0100 Subject: [PATCH 1/2] add custom GitHub Actions workflow to run tests with Python 3.6 in Ubuntu 20.04 container --- .github/workflows/unit_tests_python36.yml | 82 +++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 .github/workflows/unit_tests_python36.yml diff --git a/.github/workflows/unit_tests_python36.yml b/.github/workflows/unit_tests_python36.yml new file mode 100644 index 0000000000..0fc842c934 --- /dev/null +++ b/.github/workflows/unit_tests_python36.yml @@ -0,0 +1,82 @@ +# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions +name: EasyBuild framework unit tests (Python 3.6) +on: [push, pull_request] + +permissions: + contents: read # to fetch code (actions/checkout) + +concurrency: + group: ${{format('{0}:{1}:{2}', github.repository, github.ref, github.workflow)}} + cancel-in-progress: true + +jobs: + test_python36: + runs-on: ubuntu-22.04 + container: + # Ubuntu 20.04 container that already includes Python 3.6 + Lmod & co, + # see https://github.com/easybuilders/easybuild-containers + image: ghcr.io/easybuilders/ubuntu-20.04-python36-amd64 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + + - name: install Python packages + run: | + # Python packages + python3.6 -V + python3.6 -m pip --version + python3.6 -m pip install --upgrade pip + python3.6 -m pip --version + python3.6 -m pip install -r requirements.txt + # git config is required to make actual git commits (cfr. tests for GitRepository) + sudo -u easybuild git config --global user.name "GitHub Actions" + sudo -u easybuild git config --global user.email "actions@github.com" + sudo -u easybuild git config --get-regexp 'user.*' + + - name: install GitHub token (if available) + env: + # token (owned by @boegelbot) with gist permissions (required for some of the tests for GitHub integration); + # this token is not available in pull requests, so tests that require it are skipped in PRs, + # and are only run after the PR gets merged + GITHUB_TOKEN: ${{secrets.CI_UNIT_TESTS_GITHUB_TOKEN}} + run: | + # tests that require a GitHub token are skipped automatically when no GitHub token is available + if [ ! -z $GITHUB_TOKEN ]; then + sudo -u easybuild python3.6 -c "import keyring; import keyrings.alt.file; keyring.set_keyring(keyrings.alt.file.PlaintextKeyring()); keyring.set_password('github_token', 'easybuild_test', '$GITHUB_TOKEN')"; + echo "GitHub token installed!" + else + echo "Installation of GitHub token skipped!" + fi + + - name: install sources + run: | + # install from source distribution tarball, to test release as published on PyPI + python3.6 setup.py sdist + ls dist + export PREFIX=/tmp/$USER/$GITHUB_SHA + python3.6 -m pip install --prefix $PREFIX dist/easybuild-framework*tar.gz + + - name: run test suite + run: | + # run tests *outside* of checked out easybuild-framework directory, + # to ensure we're testing installed version (see previous step) + cd $HOME + # make sure 'eb' is available via $PATH, and that $PYTHONPATH is set (some tests expect that) + export PREFIX=/tmp/$USER/$GITHUB_SHA + ENV_CMDS="export PATH=$PREFIX/bin:$PATH; export PYTHONPATH=$PREFIX/lib/python3.6/site-packages:$PYTHONPATH" + ENV_CMDS="${ENV_CMDS}; export EB_VERBOSE=1; export EB_PYTHON=python3.6" + # run EasyBuild command via (non-root) easybuild user + login shell + sudo -u easybuild bash -l -c "${ENV_CMDS}; module --version; eb --version" + # show active EasyBuild configuration + sudo -u easybuild bash -l -c "${ENV_CMDS}; eb --show-config" + # gather some useful info on test system + sudo -u easybuild bash -l -c "${ENV_CMDS}; eb --show-system-info" + # check GitHub configuration + sudo -u easybuild bash -l -c "${ENV_CMDS}; eb --check-github --github-user=easybuild_test" + # create file owned by root but writable by anyone (used by test_copy_file) + sudo touch /tmp/file_to_overwrite_for_easybuild_test_copy_file.txt + sudo chmod o+w /tmp/file_to_overwrite_for_easybuild_test_copy_file.txt + # run test suite (via easybuild user + login shell) + sudo -u easybuild bash -l -c "${ENV_CMDS}; python3.6 -O -m test.framework.suite" + # There may be encoding errors in Python 3 which are hidden when an UTF-8 encoding is set + # Hence run the tests (again) with LC_ALL=C and Python 3.6 (or any < 3.7) + sudo -u easybuild bash -l -c "${ENV_CMDS}; export LC_ALL=C; python3.6 -O -m test.framework.suite" From 3c9a12d198c607f478d9a48e0e513a1f08643220 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 16 May 2025 11:59:18 +0200 Subject: [PATCH 2/2] use ubuntu-latest in CI workflow to run test suite with Python 3.6 via a container image Co-authored-by: Alexander Grund --- .github/workflows/unit_tests_python36.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit_tests_python36.yml b/.github/workflows/unit_tests_python36.yml index 0fc842c934..d2b339684e 100644 --- a/.github/workflows/unit_tests_python36.yml +++ b/.github/workflows/unit_tests_python36.yml @@ -11,7 +11,7 @@ concurrency: jobs: test_python36: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest container: # Ubuntu 20.04 container that already includes Python 3.6 + Lmod & co, # see https://github.com/easybuilders/easybuild-containers