-
Notifications
You must be signed in to change notification settings - Fork 19
260 lines (239 loc) · 13.7 KB
/
tests_eessi_extend_module.yml
File metadata and controls
260 lines (239 loc) · 13.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
# 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: [ "main" ]
pull_request:
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
basic_checks:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- eessi_version: '2023.06'
rebuild_software: "BCFtools-1.18-GCC-12.3.0.eb"
# - eessi_version: '2025.06'
# rebuild_software: "make-4.4.1-GCCcore-13.3.0.eb"
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; }
# Do a test rebuild (with default and local hooks)
eb --rebuild ${{matrix.rebuild_software}}
eb --rebuild --hooks=./eb_hooks.py ${{matrix.rebuild_software}}
# Proceed with unload and checking that
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
echo "Checking EESSI-extend 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"
# Check some things that are EasyBuild 5+ (available in all EESSI versions so should exist)
check_env_var "EASYBUILD_STRICT_RPATH_SANITY_CHECK" "1"
check_env_var "EASYBUILD_CUDA_SANITY_CHECK_ERROR_ON_FAILED_CHECKS" "1"
check_env_var "EASYBUILD_FAIL_ON_MOD_FILES_GCCCORE" "1"
check_env_var "EASYBUILD_LOCAL_VAR_NAMING_CHECK" "error"
# Check some EESSI version specific settings
if [[ "${{ matrix.eessi_version }}" != "2023.06" ]]; then
check_env_var "EASYBUILD_PREFER_PYTHON_SEARCH_PATH" "EBPYTHONPREFIXES"
check_env_var "EASYBUILD_MODULE_SEARCH_PATH_HEADERS" "include_paths"
check_env_var "EASYBUILD_SEARCH_PATH_CPP_HEADERS" "include_paths"
fi
# verify the configuration is actually valid
eb --show-config
# 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
echo "Checking EESSI-extend site install"
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"
# verify the configuration is actually valid
eb --show-config
# 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
echo "Checking EESSI-extend project install"
export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH"
module load EESSI-extend/${{matrix.eessi_version}}-easybuild
# check some specific envvars
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH"
check_env_var "EASYBUILD_UMASK" "002"
check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1"
# verify the configuration is actually valid
eb --show-config
# 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
echo "Checking EESSI-extend user install"
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
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH"
check_env_var "EASYBUILD_UMASK" "077"
# verify the configuration is actually valid
eb --show-config
# unload and check the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_USER_INSTALL
- name: Run tests for EESSI-extend in the various GPU 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
# Set an environment variable to use when we want to target accelerators
export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80"
export STORED_CUDA_CC="8.0"
# Let's start from a clean slate
module purge
export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE
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
echo "Checking EESSI-extend CVMFS install"
export EESSI_CVMFS_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
module unload EESSI-extend
export EESSI_ACCELERATOR_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild # reload for an actual GPU installation
check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/${EESSI_ACCELERATOR_TARGET_OVERRIDE}"
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
# unload and make sure the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_ACCELERATOR_INSTALL
unset EESSI_CVMFS_INSTALL
# Now configure for a site
echo "Checking EESSI-extend site install"
export EESSI_SITE_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
module unload EESSI-extend
export EESSI_ACCELERATOR_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild # reload for an actual GPU installation
check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/${EESSI_ACCELERATOR_TARGET_OVERRIDE}"
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
# unload and make sure the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_ACCELERATOR_INSTALL
unset EESSI_SITE_INSTALL
# Now for a project
echo "Checking EESSI-extend project install"
export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH"
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
module load EESSI-extend/${{matrix.eessi_version}}-easybuild
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
module unload EESSI-extend
export EESSI_ACCELERATOR_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild # reload for an GPU actual installation
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for project case
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
# unload and make sure the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_ACCELERATOR_INSTALL
unset EESSI_PROJECT_INSTALL
# Now for a user
echo "Checking EESSI-extend user install"
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
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
module load EESSI-extend/${{matrix.eessi_version}}-easybuild
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
module unload EESSI-extend
export EESSI_ACCELERATOR_INSTALL=1
module load EESSI-extend/${{matrix.eessi_version}}-easybuild # reload for an actual GPU installation
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for user case
check_env_var "EESSI_ACCELERATOR_TARGET" "$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE"
check_env_var "EASYBUILD_CUDA_COMPUTE_CAPABILITIES" "$STORED_CUDA_CC"
# unload and make sure the environment is clean again
module unload EESSI-extend
check_disallowed_env_prefix EASYBUILD_
unset EESSI_ACCELERATOR_INSTALL
unset EESSI_USER_INSTALL