This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions | |
name: Tests for the 'eb' command | |
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-eb: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
python: [3.6, 3.7, 3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v3 | |
- name: set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{matrix.python}} | |
architecture: x64 | |
- name: install OS & Python packages | |
run: | | |
# check Python version | |
python -V | |
# update to latest pip, check version | |
pip install --upgrade pip | |
pip --version | |
if ! python -c "import distutils" 2> /dev/null; then | |
# we need setuptools for distutils in Python 3.12+, needed for python setup.py sdist | |
pip install --upgrade setuptools | |
fi | |
# for modules tool | |
APT_PKGS="lua5.2 liblua5.2-dev lua-filesystem lua-posix tcl tcl-dev" | |
# Avoid apt-get update, as we don't really need it, | |
# and it does more harm than good (it's fairly expensive, and it results in flaky test runs) | |
if ! sudo apt-get install $APT_PKGS; then | |
# Try to update cache, then try again to resolve 404s of old packages | |
sudo apt-get update -yqq || true | |
sudo apt-get install $APT_PKGS | |
fi | |
# fix for lua-posix packaging issue, see https://bugs.launchpad.net/ubuntu/+source/lua-posix/+bug/1752082 | |
# needed for Ubuntu 18.04, but not for Ubuntu 20.04, so skipping symlinking if posix.so already exists | |
if [ ! -e /usr/lib/x86_64-linux-gnu/lua/5.2/posix.so ] ; then | |
sudo ln -s /usr/lib/x86_64-linux-gnu/lua/5.2/posix_c.so /usr/lib/x86_64-linux-gnu/lua/5.2/posix.so | |
fi | |
- name: install modules tool | |
run: | | |
# avoid downloading modules tool sources into easybuild-framework dir | |
cd $HOME | |
export INSTALL_DEP=$GITHUB_WORKSPACE/easybuild/scripts/install_eb_dep.sh | |
# install Lmod | |
source $INSTALL_DEP Lmod-8.7.6 $HOME | |
# changes in environment are not passed to other steps, so need to create files... | |
echo $MOD_INIT > mod_init | |
echo $PATH > path | |
if [ ! -z $MODULESHOME ]; then echo $MODULESHOME > moduleshome; fi | |
- name: install EasyBuild framework | |
run: | | |
# install from source distribution tarball, to test release as published on PyPI | |
python setup.py sdist | |
ls dist | |
export PREFIX=/tmp/$USER/$GITHUB_SHA | |
pip install --prefix $PREFIX dist/easybuild[-_]framework*tar.gz | |
- name: run tests for 'eb' command | |
env: | |
EB_VERBOSE: 1 | |
run: | | |
# run tests *outside* of checked out easybuild-framework directory, | |
# to ensure we're testing installed version (see previous step) | |
cd $HOME | |
# initialize environment for modules tool | |
if [ -f $HOME/moduleshome ]; then export MODULESHOME=$(cat $HOME/moduleshome); fi | |
source $(cat $HOME/mod_init); type module | |
# make sure 'eb' is available via $PATH, and that $PYTHONPATH is set (some tests expect that); | |
# also pick up changes to $PATH set by sourcing $MOD_INIT | |
export PREFIX=/tmp/$USER/$GITHUB_SHA | |
export PATH=$PREFIX/bin:$(cat $HOME/path) | |
export PYTHONPATH=$PREFIX/lib/python${{matrix.python}}/site-packages:$PYTHONPATH | |
# run --version, capture (verbose) output | |
eb --version | tee eb_version.out 2>&1 | |
# determine active Python version | |
pymajver=$(python -c 'import sys; print(sys.version_info[0])') | |
pymajminver=$(python -c 'import sys; print(".".join(str(x) for x in sys.version_info[:2]))') | |
# check patterns in verbose output | |
for pattern in "^>> Considering .python3.\.\.\." "^>> .python3. version: ${pymajminver}\.[0-9]\+, which matches Python ${pymajver} version requirement" "^>> 'python3' is able to import 'easybuild.framework', so retaining it" "^>> Selected Python command: python3 \(.*/bin/python3\)" "^This is EasyBuild 5\.[0-9.]\+"; do | |
echo "Looking for pattern \"${pattern}\" in eb_version.out..." | |
grep "$pattern" eb_version.out | |
done | |
if grep -q "Considering ''" eb_version.out; then | |
echo '`eb` did wrongly consider an empty command' | |
false | |
fi | |
# also check when specifying Python command via $EB_PYTHON | |
for eb_python in "python${pymajver}" "python${pymajminver}"; do | |
export EB_PYTHON="${eb_python}" | |
eb --version | tee eb_version.out 2>&1 | |
for pattern in "^>> Considering .${eb_python}.\.\.\." "^>> .${eb_python}. version: ${pymajminver}\.[0-9]\+, which matches Python ${pymajver} version requirement" "^>> '${eb_python}' is able to import 'easybuild.framework', so retaining it" "^>> Selected Python command: ${eb_python} \(.*/bin/${eb_python}\)" "^This is EasyBuild 5\.[0-9.]\+"; do | |
echo "Looking for pattern \"${pattern}\" in eb_version.out..." | |
grep "$pattern" eb_version.out | |
done | |
done |