Skip to content

Add CI for EESSI-extend #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/scripts/test_utils.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash
check_env_var() {
# Expected usage: check_env_var "MY_ENV_VAR" "foo"
var_name="$1"
expected="$2"
actual="${!var_name}"
if [ "$actual" != "$expected" ]; then
echo "ERROR: $var_name is '$actual', expected '$expected'" >&2
exit 1
else
echo "$var_name is correctly set to '$expected'"
fi
}

check_disallowed_env_prefix() {
prefix="$1"
shift
whitelist=("$@")

disallowed=()

while IFS='=' read -r var _; do
if [[ "$var" == "$prefix"* ]]; then
allowed=false
for allowed_var in "${whitelist[@]}"; do
if [[ "$var" == "$allowed_var" ]]; then
allowed=true
break
fi
done

if ! $allowed; then
disallowed+=("$var")
fi
fi
done < <(env)

if [ "${#disallowed[@]}" -ne 0 ]; then
echo "ERROR: Found disallowed environment variables with prefix '$prefix':" >&2
for var in "${disallowed[@]}"; do
echo " - $var" >&2
done
exit 1
else
echo "✅ No disallowed environment variables with prefix '$prefix' found."
fi
}
127 changes: 127 additions & 0 deletions .github/workflows/tests_eessi_extend_module.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions
name: Tests for EESSI-extend module functionality in software.eessi.io
on:
push:
branches: [ "*-software.eessi.io" ]
pull_request:
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
basic_checks:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
EESSI_VERSION:
- '2023.06'
steps:
- name: Check out software-layer repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Mount EESSI CernVM-FS repository
uses: eessi/github-action-eessi@v3
with:
eessi_stack_version: ${{matrix.EESSI_VERSION}}
use_eessi_module: true

- name: Install the EESSI-extend shipped with the repository
run: |
# Define a function to check the values of environment variables
# and another that checks an environment does not contain environment
# variables matching a certain pattern
source .github/workflows/scripts/test_utils.sh

# Let's start from a clean slate (unload the EESSI module)
module purge
check_disallowed_env_prefix EESSI_
check_disallowed_env_prefix EASYBUILD_

# Load the EESSI module
module load EESSI/${{matrix.EESSI_VERSION}}
check_disallowed_env_prefix EASYBUILD_

# Load EasyBuild to install EESSI-extend
module load EasyBuild
# Set an installation path
export MY_INSTALLATION_PATH=/tmp/easybuild
export EASYBUILD_PREFIX=$MY_INSTALLATION_PATH
eb EESSI-extend-easybuild.eb --rebuild

# Verify that we can pick the installed version up
module use $MY_INSTALLATION_PATH/modules/all
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
echo $EBROOTEESSIMINEXTEND | grep $MY_INSTALLATION_PATH || { echo "ERROR: Installed version of EESSI-extend not picked up (loaded $EBROOTEESSIMINEXTEND)" >&2; exit 1; }
module unload EESSI-extend
# That should have unset all EasyBuild envvars (including EASYBUILD_PREFIX)
check_disallowed_env_prefix EASYBUILD_
module unuse $MY_INSTALLATION_PATH/modules/all

- name: Run tests for EESSI-extend in the various CPU-only scenarios
run: |
export MY_INSTALLATION_PATH=/tmp/easybuild

# Define a function to check the values of environment variables
# and another that checks an environment does not contain environment
# variables matching a certain pattern
source .github/workflows/scripts/test_utils.sh

# Let's start from a clean slate
module purge
module load EESSI/${{matrix.EESSI_VERSION}}
# Access the installed EESSI-extend
module use "$MY_INSTALLATION_PATH"/modules/all
check_disallowed_env_prefix EASYBUILD_

# Configure for CVMFS install
export EESSI_CVMFS_INSTALL=1
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
# check some common EasyBuild settings
check_env_var "EASYBUILD_READ_ONLY_INSTALLDIR" "1"
check_env_var "EASYBUILD_ALLOW_LOADED_MODULES" "EasyBuild,EESSI-extend"
check_env_var "EASYBUILD_SYSROOT" "$EESSI_EPREFIX"
check_env_var "EASYBUILD_HOOKS" "/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/easybuild/eb_hooks.py"
check_env_var "EASYBUILD_RPATH" "1"
check_env_var "EASYBUILD_FILTER_ENV_VARS" "LD_LIBRARY_PATH"
# check some specific ones
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH"
check_env_var "EASYBUILD_UMASK" "022"
# unload and check the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_CVMFS_INSTALL

# Now configure for a site
export EESSI_SITE_INSTALL=1
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
# check some specific envvars
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH"
check_env_var "EASYBUILD_UMASK" "022"
# unload and check the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_SITE_INSTALL

# Now for a project
export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH"
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
# check some specific envvars
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
check_env_var "EASYBUILD_UMASK" "002"
check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1"
# unload and check the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_PROJECT_INSTALL

# Now for a user
export EESSI_USER_INSTALL="$MY_INSTALLATION_PATH/$USER"
mkdir -p $EESSI_USER_INSTALL # must exist
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
# check some specific envvars
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
check_env_var "EASYBUILD_UMASK" "077"
# unload and check the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_USER_INSTALL