Skip to content

Commit 1fcb8f3

Browse files
authored
Merge pull request #15 from ocaisa/eessi_extend_extensions
Add CI for `EESSI-extend`
2 parents 10ed730 + b7dc8df commit 1fcb8f3

File tree

2 files changed

+174
-0
lines changed

2 files changed

+174
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/bash
2+
check_env_var() {
3+
# Expected usage: check_env_var "MY_ENV_VAR" "foo"
4+
var_name="$1"
5+
expected="$2"
6+
actual="${!var_name}"
7+
if [ "$actual" != "$expected" ]; then
8+
echo "ERROR: $var_name is '$actual', expected '$expected'" >&2
9+
exit 1
10+
else
11+
echo "$var_name is correctly set to '$expected'"
12+
fi
13+
}
14+
15+
check_disallowed_env_prefix() {
16+
prefix="$1"
17+
shift
18+
whitelist=("$@")
19+
20+
disallowed=()
21+
22+
while IFS='=' read -r var _; do
23+
if [[ "$var" == "$prefix"* ]]; then
24+
allowed=false
25+
for allowed_var in "${whitelist[@]}"; do
26+
if [[ "$var" == "$allowed_var" ]]; then
27+
allowed=true
28+
break
29+
fi
30+
done
31+
32+
if ! $allowed; then
33+
disallowed+=("$var")
34+
fi
35+
fi
36+
done < <(env)
37+
38+
if [ "${#disallowed[@]}" -ne 0 ]; then
39+
echo "ERROR: Found disallowed environment variables with prefix '$prefix':" >&2
40+
for var in "${disallowed[@]}"; do
41+
echo " - $var" >&2
42+
done
43+
exit 1
44+
else
45+
echo "✅ No disallowed environment variables with prefix '$prefix' found."
46+
fi
47+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions
2+
name: Tests for EESSI-extend module functionality in software.eessi.io
3+
on:
4+
push:
5+
branches: [ "*-software.eessi.io" ]
6+
pull_request:
7+
permissions:
8+
contents: read # to fetch code (actions/checkout)
9+
jobs:
10+
basic_checks:
11+
runs-on: ubuntu-22.04
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
EESSI_VERSION:
16+
- '2023.06'
17+
steps:
18+
- name: Check out software-layer repository
19+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
20+
21+
- name: Mount EESSI CernVM-FS repository
22+
uses: eessi/github-action-eessi@v3
23+
with:
24+
eessi_stack_version: ${{matrix.EESSI_VERSION}}
25+
use_eessi_module: true
26+
27+
- name: Install the EESSI-extend shipped with the repository
28+
run: |
29+
# Define a function to check the values of environment variables
30+
# and another that checks an environment does not contain environment
31+
# variables matching a certain pattern
32+
source .github/workflows/scripts/test_utils.sh
33+
34+
# Let's start from a clean slate (unload the EESSI module)
35+
module purge
36+
check_disallowed_env_prefix EESSI_
37+
check_disallowed_env_prefix EASYBUILD_
38+
39+
# Load the EESSI module
40+
module load EESSI/${{matrix.EESSI_VERSION}}
41+
check_disallowed_env_prefix EASYBUILD_
42+
43+
# Load EasyBuild to install EESSI-extend
44+
module load EasyBuild
45+
# Set an installation path
46+
export MY_INSTALLATION_PATH=/tmp/easybuild
47+
export EASYBUILD_PREFIX=$MY_INSTALLATION_PATH
48+
eb EESSI-extend-easybuild.eb --rebuild
49+
50+
# Verify that we can pick the installed version up
51+
module use $MY_INSTALLATION_PATH/modules/all
52+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
53+
echo $EBROOTEESSIMINEXTEND | grep $MY_INSTALLATION_PATH || { echo "ERROR: Installed version of EESSI-extend not picked up (loaded $EBROOTEESSIMINEXTEND)" >&2; exit 1; }
54+
module unload EESSI-extend
55+
# That should have unset all EasyBuild envvars (including EASYBUILD_PREFIX)
56+
check_disallowed_env_prefix EASYBUILD_
57+
module unuse $MY_INSTALLATION_PATH/modules/all
58+
59+
- name: Run tests for EESSI-extend in the various CPU-only scenarios
60+
run: |
61+
export MY_INSTALLATION_PATH=/tmp/easybuild
62+
63+
# Define a function to check the values of environment variables
64+
# and another that checks an environment does not contain environment
65+
# variables matching a certain pattern
66+
source .github/workflows/scripts/test_utils.sh
67+
68+
# Let's start from a clean slate
69+
module purge
70+
module load EESSI/${{matrix.EESSI_VERSION}}
71+
# Access the installed EESSI-extend
72+
module use "$MY_INSTALLATION_PATH"/modules/all
73+
check_disallowed_env_prefix EASYBUILD_
74+
75+
# Configure for CVMFS install
76+
export EESSI_CVMFS_INSTALL=1
77+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
78+
# check some common EasyBuild settings
79+
check_env_var "EASYBUILD_READ_ONLY_INSTALLDIR" "1"
80+
check_env_var "EASYBUILD_ALLOW_LOADED_MODULES" "EasyBuild,EESSI-extend"
81+
check_env_var "EASYBUILD_SYSROOT" "$EESSI_EPREFIX"
82+
check_env_var "EASYBUILD_HOOKS" "/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/easybuild/eb_hooks.py"
83+
check_env_var "EASYBUILD_RPATH" "1"
84+
check_env_var "EASYBUILD_FILTER_ENV_VARS" "LD_LIBRARY_PATH"
85+
# check some specific ones
86+
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH"
87+
check_env_var "EASYBUILD_UMASK" "022"
88+
# unload and check the environment is clean again
89+
module unload EESSI-extend
90+
check_disallowed_env_prefix EASYBUILD_
91+
unset EESSI_CVMFS_INSTALL
92+
93+
# Now configure for a site
94+
export EESSI_SITE_INSTALL=1
95+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
96+
# check some specific envvars
97+
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH"
98+
check_env_var "EASYBUILD_UMASK" "022"
99+
# unload and check the environment is clean again
100+
module unload EESSI-extend
101+
check_disallowed_env_prefix EASYBUILD_
102+
unset EESSI_SITE_INSTALL
103+
104+
# Now for a project
105+
export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH"
106+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
107+
# check some specific envvars
108+
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
109+
check_env_var "EASYBUILD_UMASK" "002"
110+
check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1"
111+
# unload and check the environment is clean again
112+
module unload EESSI-extend
113+
check_disallowed_env_prefix EASYBUILD_
114+
unset EESSI_PROJECT_INSTALL
115+
116+
# Now for a user
117+
export EESSI_USER_INSTALL="$MY_INSTALLATION_PATH/$USER"
118+
mkdir -p $EESSI_USER_INSTALL # must exist
119+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
120+
# check some specific envvars
121+
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
122+
check_env_var "EASYBUILD_UMASK" "077"
123+
# unload and check the environment is clean again
124+
module unload EESSI-extend
125+
check_disallowed_env_prefix EASYBUILD_
126+
unset EESSI_USER_INSTALL
127+

0 commit comments

Comments
 (0)