Merge pull request #806 from TopRichard/eessi-2023.06-Cassiopeia/2.0.… #1792
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: Check for missing software installations in software.eessi.io | |
on: | |
push: | |
branches: [ "*-software.eessi.io" ] | |
pull_request: | |
workflow_dispatch: | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
env: | |
EESSI_ACCELERATOR_TARGETS: | | |
x86_64/amd/zen2: | |
- nvidia/cc80 | |
x86_64/amd/zen3: | |
- nvidia/cc80 | |
jobs: | |
check_missing: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
EESSI_VERSION: | |
- 2023.06 | |
EESSI_SOFTWARE_SUBDIR_OVERRIDE: | |
- aarch64/generic | |
- aarch64/neoverse_n1 | |
- aarch64/neoverse_v1 | |
- x86_64/amd/zen2 | |
- x86_64/amd/zen3 | |
- x86_64/amd/zen4 | |
- x86_64/intel/haswell | |
- x86_64/intel/skylake_avx512 | |
- x86_64/generic | |
steps: | |
- name: Check out software-layer repository | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Mount EESSI CernVM-FS pilot repository | |
uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 | |
with: | |
cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb | |
cvmfs_http_proxy: DIRECT | |
cvmfs_repositories: software.eessi.io | |
- name: Test check_missing_installations.sh script | |
run: | | |
export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} | |
source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash | |
# set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), | |
# to prevent issues with checks in the Easybuild configuration that use this variable | |
export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} | |
module load EasyBuild | |
which eb | |
eb --version | |
export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} | |
export EESSI_OS_TYPE=linux | |
env | grep ^EESSI | sort | |
# first check the CPU-only builds for this CPU target | |
echo "just run check_missing_installations.sh (should use easystacks/software.eessi.io/${{matrix.EESSI_VERSION}}/eessi-${{matrix.EESSI_VERSION}}-*.yml with latest EasyBuild release)" | |
for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do | |
if [ ${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} = "x86_64/amd/zen4" ]; then | |
if grep -q 2022b <<<"${easystack_file}"; then | |
# skip the check of installed software on zen4 for foss/2022b builds | |
continue | |
fi | |
if [[ $easystack_file == *"rebuilds"* ]]; then | |
# Also handle rebuilds, make a temporary EasyStack file where we clean out all 2022b stuff and use that | |
new_easystack=$(mktemp pruned_easystackXXX --suffix=.yml) | |
# first clean out the options then clean out the .eb name | |
sed '/2022b\|12\.2\.0/,/\.eb/{/\.eb/!d}' "${easystack_file}" | sed '/2022b\|12\.2\.0/d' > $new_easystack | |
diff --unified=0 "$easystack_file" "$new_easystack" || : | |
easystack_file="$new_easystack" | |
fi | |
fi | |
echo "check missing installations for ${easystack_file}..." | |
./check_missing_installations.sh ${easystack_file} | |
ec=$? | |
if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi | |
done | |
# now check the accelerator builds for this CPU target | |
accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".${EESSI_SOFTWARE_SUBDIR_OVERRIDE}[]") | |
if [ -z ${accelerators} ]; then | |
echo "no accelerator targets defined for ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" | |
else | |
for accel in ${accelerators}; do | |
module use ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all | |
echo "checking missing installations for accelerator ${accel} using modulepath: ${MODULEPATH}" | |
for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} ACCEL_EASYSTACKS=1 .github/workflows/scripts/only_latest_easystacks.sh); do | |
echo "check missing installations for ${easystack_file}..." | |
./check_missing_installations.sh ${easystack_file} | |
ec=$? | |
if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi | |
done | |
module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all | |
done | |
fi | |
- name: Test check_missing_installations.sh with missing package (GCC/8.3.0) | |
run: | | |
export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} | |
source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash | |
# set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), | |
# to prevent issues with checks in the Easybuild configuration that use this variable | |
export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} | |
module load EasyBuild | |
which eb | |
eb --version | |
export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} | |
export EESSI_OS_TYPE=linux | |
env | grep ^EESSI | sort | |
# create dummy easystack file with a single entry (something that is not installed in EESSI) | |
easystack_file="test.yml" | |
echo "easyconfigs:" > ${easystack_file} | |
echo " - GCC-8.3.0:" >> ${easystack_file} | |
echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" | |
cat ${easystack_file} | |
# note, check_missing_installations.sh exits 1 if a package was | |
# missing, which is intepreted as false (exit code based, not | |
# boolean logic), hence when the script exits 0 if no package was | |
# missing it is interpreted as true, thus the test did not capture | |
# the missing package | |
if ./check_missing_installations.sh ${easystack_file}; then | |
echo "did NOT capture missing package; test FAILED" | |
exit 1 | |
else | |
echo "captured missing package; test PASSED" | |
exit 0 | |
fi |