From 143341c7fe0126a8100970e59e755bba8f7de771 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 28 Jan 2026 17:49:59 +0100 Subject: [PATCH 01/11] Make all shell initialisations more robust --- init/lmod/bash | 27 +++++++++++++++++---------- init/lmod/csh | 28 ++++++++++++++++++---------- init/lmod/fish | 26 +++++++++++++++++--------- init/lmod/ksh | 28 ++++++++++++++++++---------- init/lmod/zsh | 28 ++++++++++++++++++---------- 5 files changed, 88 insertions(+), 49 deletions(-) diff --git a/init/lmod/bash b/init/lmod/bash index daba8351..7ca71b4f 100644 --- a/init/lmod/bash +++ b/init/lmod/bash @@ -3,17 +3,24 @@ EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO:-/cvmfs/software.eessi.io}" # Choose an EESSI version EESSI_VERSION_DEFAULT="__EESSI_VERSION_DEFAULT__" EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" -# Path to top-level module tree -export MODULEPATH="${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/modules" -. "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/bash" +# Now that we know our EESSI version let's not forget it +export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -if [ -z "$__Init_Default_Modules" ]; then - export __Init_Default_Modules=1; +# ability to predefine elsewhere the default list +LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +export LMOD_SYSTEM_DEFAULT_MODULES - ## ability to predefine elsewhere the default list - LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} - export LMOD_SYSTEM_DEFAULT_MODULES - module --initial_load --no_redirect restore +if [ -z "$__Init_EESSI_Default_Modules" ]; then + export __Init_EESSI_Default_Modules=1; + + # If there is a local Lmod, make it forget about the system set MODULEPATH + unset __LMOD_REF_COUNT_MODULEPATH + # and clear out any memory Lmod might have + unset _ModuleTable001_ + # Path to top-level module tree + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" + . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/bash" + module --initial_load --no_redirect restore else - module refresh + module reset fi diff --git a/init/lmod/csh b/init/lmod/csh index 2adb314c..0122981b 100644 --- a/init/lmod/csh +++ b/init/lmod/csh @@ -7,18 +7,26 @@ setenv EESSI_VERSION_DEFAULT "__EESSI_VERSION_DEFAULT__" if (! $?EESSI_VERSION) then set EESSI_VERSION = "${EESSI_VERSION_DEFAULT}" endif -# Path to top-level module tree -setenv MODULEPATH "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/modules" -source "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" +# Now that we know our EESSI version let's not forget it +setenv EESSI_VERSION_DEFAULT="$EESSI_VERSION" -if (! $?__Init_Default_Modules ) then - setenv __Init_Default_Modules 1 +# ability to predefine elsewhere the default list +if (! $?LMOD_SYSTEM_DEFAULT_MODULES) then + setenv LMOD_SYSTEM_DEFAULT_MODULES "EESSI/${EESSI_VERSION}" +endif + +if (! $?__Init_EESSI_Default_Modules ) then + setenv __Init_EESSI_Default_Modules 1 + + # If there is a local Lmod, make it forget about the system set MODULEPATH + unsetenv __LMOD_REF_COUNT_MODULEPATH + # and clear out any memory Lmod might have + unsetenv _ModuleTable001_ + # Path to top-level module tree + setenv MODULEPATH "${EESSI_CVMFS_REPO}/init/modules" + source "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" - # ability to predefine elsewhere the default list - if (! $?LMOD_SYSTEM_DEFAULT_MODULES) then - setenv LMOD_SYSTEM_DEFAULT_MODULES "EESSI/${EESSI_VERSION}" - endif module --initial_load --no_redirect restore else - module refresh + module reset endif diff --git a/init/lmod/fish b/init/lmod/fish index 9e595441..2db34045 100644 --- a/init/lmod/fish +++ b/init/lmod/fish @@ -3,16 +3,24 @@ set EESSI_CVMFS_REPO (set -q EESSI_CVMFS_REPO; and echo "$EESSI_CVMFS_REPO"; or # Choose an EESSI version set EESSI_VERSION_DEFAULT "__EESSI_VERSION_DEFAULT__" set EESSI_VERSION (set -q EESSI_VERSION; and echo "$EESSI_VERSION"; or echo "$EESSI_VERSION_DEFAULT") -# Path to top-level module tree -set -x MODULEPATH "$EESSI_CVMFS_REPO"/versions/"$EESSI_VERSION"/init/modules -. "$EESSI_CVMFS_REPO"/versions/"$EESSI_VERSION"/compat/linux/(uname -m)/usr/share/Lmod/init/fish +# Now that we know our EESSI version let's not forget it +set -x EESSI_VERSION_DEFAULT "$EESSI_VERSION" -if test -z "$__Init_Default_Modules" - export __Init_Default_Modules=1; +# ability to predefine elsewhere the default list +set -x LMOD_SYSTEM_DEFAULT_MODULES (set -q LMOD_SYSTEM_DEFAULT_MODULE; and echo "$LMOD_SYSTEM_DEFAULT_MODULE"; or echo "EESSI/$EESSI_VERSION") - ## ability to predefine elsewhere the default list - set -x LMOD_SYSTEM_DEFAULT_MODULES (set -q LMOD_SYSTEM_DEFAULT_MODULE; and echo "$LMOD_SYSTEM_DEFAULT_MODULE"; or echo "EESSI/$EESSI_VERSION") - module --initial_load --no_redirect restore +if test -z "$__Init_EESSI_Default_Modules" + set -x __Init_EESSI_Default_Modules 1 + + # If there is a local Lmod, make it forget about the system set MODULEPATH + set -e __LMOD_REF_COUNT_MODULEPATH + # and clear out any memory Lmod might have + set -e _ModuleTable001_ + # Path to top-level module tree + set -x MODULEPATH "$EESSI_CVMFS_REPO"/init/modules + . "$EESSI_CVMFS_REPO"/versions/"$EESSI_VERSION"/compat/linux/(uname -m)/usr/share/Lmod/init/fish + + module --initial_load --no_redirect restore else - module refresh + module reset end diff --git a/init/lmod/ksh b/init/lmod/ksh index ebf4c0ca..5be0cacd 100644 --- a/init/lmod/ksh +++ b/init/lmod/ksh @@ -3,17 +3,25 @@ EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO:-/cvmfs/software.eessi.io}" # Choose an EESSI version EESSI_VERSION_DEFAULT="__EESSI_VERSION_DEFAULT__" EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" -# Path to top-level module tree -export MODULEPATH="${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/modules" -. "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/ksh" +# Now that we know our EESSI version let's not forget it +export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -if [ -z "$__Init_Default_Modules" ]; then - export __Init_Default_Modules=1; +## ability to predefine elsewhere the default list +LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +export LMOD_SYSTEM_DEFAULT_MODULES + +if [ -z "$__Init_EESSI_Default_Modules" ]; then + export __Init_EESSI_Default_Modules=1; - ## ability to predefine elsewhere the default list - LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} - export LMOD_SYSTEM_DEFAULT_MODULES - module --initial_load --no_redirect restore + # If there is a local Lmod, make it forget about the system set MODULEPATH + unset __LMOD_REF_COUNT_MODULEPATH + # and clear out any memory Lmod might have + unset _ModuleTable001_ + # Path to top-level module tree + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" + . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/ksh" + + module --initial_load --no_redirect restore else - module refresh + module reset fi diff --git a/init/lmod/zsh b/init/lmod/zsh index dfdff0c7..f8abfbd0 100644 --- a/init/lmod/zsh +++ b/init/lmod/zsh @@ -3,17 +3,25 @@ EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO:-/cvmfs/software.eessi.io}" # Choose an EESSI version EESSI_VERSION_DEFAULT="__EESSI_VERSION_DEFAULT__" EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" -# Path to top-level module tree -export MODULEPATH="${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/modules" -. "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/zsh" +# Now that we know our EESSI version let's not forget it +export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -if [ -z "$__Init_Default_Modules" ]; then - export __Init_Default_Modules=1; +# ability to predefine elsewhere the default list +LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +export LMOD_SYSTEM_DEFAULT_MODULES - ## ability to predefine elsewhere the default list - LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} - export LMOD_SYSTEM_DEFAULT_MODULES - module --initial_load --no_redirect restore +if [ -z "$__Init_EESSI_Default_Modules" ]; then + export __Init_EESSI_Default_Modules=1; + + # If there is a local Lmod, make it forget about the system set MODULEPATH + unset __LMOD_REF_COUNT_MODULEPATH + # and clear out any memory Lmod might have + unset _ModuleTable001_ + # Path to top-level module tree + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" + . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/zsh" + + module --initial_load --no_redirect restore else - module refresh + module reset fi From a428f6882558cf0596c77d8b314156d05f1168e4 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 28 Jan 2026 20:50:17 +0100 Subject: [PATCH 02/11] Fix typo and tests --- .github/workflows/scripts/test_init_scripts.sh | 2 +- init/lmod/csh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index f543835c..979067f5 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -49,7 +49,7 @@ for shell in ${SHELLS[@]}; do assert_raises 'echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"' # TEST 3: Check if module overviews second section is the EESSI init module - assert "echo ${MODULE_SECTIONS[4]}" "/cvmfs/software.eessi.io/versions/$EESSI_VERSION/init/modules" + assert "echo ${MODULE_SECTIONS[4]}" "/cvmfs/software.eessi.io/init/modules" # TEST 4: Load EasyBuild module and check version # eb --version outputs: "This is EasyBuild 5.1.1 (framework: 5.1.1, easyblocks: 5.1.1) on host ..." diff --git a/init/lmod/csh b/init/lmod/csh index 0122981b..88771ad3 100644 --- a/init/lmod/csh +++ b/init/lmod/csh @@ -8,7 +8,7 @@ if (! $?EESSI_VERSION) then set EESSI_VERSION = "${EESSI_VERSION_DEFAULT}" endif # Now that we know our EESSI version let's not forget it -setenv EESSI_VERSION_DEFAULT="$EESSI_VERSION" +setenv EESSI_VERSION_DEFAULT "$EESSI_VERSION" # ability to predefine elsewhere the default list if (! $?LMOD_SYSTEM_DEFAULT_MODULES) then From c3d3159bb66909131292649e9d216b01ecff0cca Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 28 Jan 2026 21:16:47 +0100 Subject: [PATCH 03/11] See where the error is --- .github/workflows/scripts/test_init_scripts.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index 979067f5..62d66959 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -47,6 +47,7 @@ for shell in ${SHELLS[@]}; do fi PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/modules/all" assert_raises 'echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"' + echo "${MODULE_SECTIONS[1]}" "$PATTERN" # TEST 3: Check if module overviews second section is the EESSI init module assert "echo ${MODULE_SECTIONS[4]}" "/cvmfs/software.eessi.io/init/modules" @@ -72,6 +73,7 @@ for shell in ${SHELLS[@]}; do PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/software/EasyBuild/${EXPECTED_EASYBUILD_VERSION//./\\.}/bin/eb" echo "$EASYBUILD_PATH" | grep -E "$PATTERN" assert_raises 'echo "$EASYBUILD_PATH" | grep -E "$PATTERN"' + echo "$EASYBUILD_PATH" "$PATTERN" # End Test Suite assert_end "source_eessi_$shell" From 3692346bd1634a80ee1e63374304c035e7277eaa Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Jan 2026 15:23:04 +0100 Subject: [PATCH 04/11] Add new capabilities and new tests --- .github/workflows/modules/append_module.lua | 3 +++ .github/workflows/modules/prepend_module.lua | 3 +++ .../workflows/scripts/test_init_scripts.sh | 27 +++++++++++++++++++ init/lmod/bash | 12 ++++++--- init/lmod/csh | 23 ++++++++++++---- init/lmod/fish | 23 +++++++++++++--- init/lmod/ksh | 12 ++++++--- init/lmod/zsh | 12 ++++++--- 8 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/modules/append_module.lua create mode 100644 .github/workflows/modules/prepend_module.lua diff --git a/.github/workflows/modules/append_module.lua b/.github/workflows/modules/append_module.lua new file mode 100644 index 00000000..e45cb640 --- /dev/null +++ b/.github/workflows/modules/append_module.lua @@ -0,0 +1,3 @@ +setenv("INSIDE_GITHUB_ACTIONS", "true") +-- Interfere with PATH so Lmod keeps a record +prepend_path("PATH", "/snap/bin") diff --git a/.github/workflows/modules/prepend_module.lua b/.github/workflows/modules/prepend_module.lua new file mode 100644 index 00000000..e45cb640 --- /dev/null +++ b/.github/workflows/modules/prepend_module.lua @@ -0,0 +1,3 @@ +setenv("INSIDE_GITHUB_ACTIONS", "true") +-- Interfere with PATH so Lmod keeps a record +prepend_path("PATH", "/snap/bin") diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index 62d66959..2e3a5a58 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -75,6 +75,33 @@ for shell in ${SHELLS[@]}; do assert_raises 'echo "$EASYBUILD_PATH" | grep -E "$PATTERN"' echo "$EASYBUILD_PATH" "$PATTERN" + # TEST 6 and 7: Check the various options (EESSI_SYSTEM_DEFAULT_MODULES_APPEND, EESSI_SYSTEM_DEFAULT_MODULES_APPEND, EESSI_EXTRA_MODULEPATH) all work + if [ "$shell" = "csh" ]; then + echo "setenv EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module" > ~/.cshrc + echo "setenv EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module" >> ~/.cshrc + echo "setenv EESSI_EXTRA_MODULEPATH .github/workflows/modules" >> ~/.cshrc + echo "source init/lmod/$shell" >> ~/.cshrc + TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'echo $LMOD_SYSTEM_DEFAULT_MODULES') + TEST_MODULEPATH=$($shell -c 'echo $MODULEPATH') + elif [ "$shell" = "fish" ]; then + TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'set -x EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $LMOD_SYSTEM_DEFAULT_MODULES') + TEST_MODULEPATH=$($shell -c 'set -x EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') + else + TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'export EESSI_SYSTEM_DEFAULT_MODULES_APPEND=append_module ; export EESSI_SYSTEM_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' ; echo $LMOD_SYSTEM_DEFAULT_MODULES') + TEST_MODULEPATH=$($shell -c 'export EESSI_SYSTEM_DEFAULT_MODULES_APPEND=append_module ; export EESSI_SYSTEM_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') + fi + # escape the dots in ${EASYBUILD_VERSION} + LMOD_SYSTEM_DEFAULT_MODULES_PATTERN='^prepend_module:.*:append_module$' + echo "$TEST_LMOD_SYSTEM_DEFAULT_MODULES" AND "$LMOD_SYSTEM_DEFAULT_MODULES_PATTERN" + assert_raises 'echo "$TEST_LMOD_SYSTEM_DEFAULT_MODULES" | grep -E "$LMOD_SYSTEM_DEFAULT_MODULES_PATTERN"' + if [ "$shell" = "fish" ]; then + MODULEPATH_PATTERN='\.github/workflows/modules$' + else + MODULEPATH_PATTERN=':\.github/workflows/modules$' + fi + echo "$TEST_MODULEPATH" AND "$MODULEPATH_PATTERN" + assert_raises 'echo "$TEST_MODULEPATH" | grep -E "$MODULEPATH_PATTERN"' + # End Test Suite assert_end "source_eessi_$shell" fi diff --git a/init/lmod/bash b/init/lmod/bash index 7ca71b4f..02e7d37a 100644 --- a/init/lmod/bash +++ b/init/lmod/bash @@ -6,20 +6,24 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" # Now that we know our EESSI version let's not forget it export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -# ability to predefine elsewhere the default list -LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +# ability to predefine elsewhere the default list (with options to append or prepend) +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then export __Init_EESSI_Default_Modules=1; + # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod + # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) + LMOD_EESSI_VERSION=${EESSI_VERSION/2023.06/2025.06} + # If there is a local Lmod, make it forget about the system set MODULEPATH unset __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unset _ModuleTable001_ # Path to top-level module tree - export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" - . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/bash" + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules${EESSI_EXTRA_MODULEPATH:+:$EESSI_EXTRA_MODULEPATH}" + . "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/bash" module --initial_load --no_redirect restore else module reset diff --git a/init/lmod/csh b/init/lmod/csh index 88771ad3..dddb1fbf 100644 --- a/init/lmod/csh +++ b/init/lmod/csh @@ -10,21 +10,34 @@ endif # Now that we know our EESSI version let's not forget it setenv EESSI_VERSION_DEFAULT "$EESSI_VERSION" -# ability to predefine elsewhere the default list -if (! $?LMOD_SYSTEM_DEFAULT_MODULES) then - setenv LMOD_SYSTEM_DEFAULT_MODULES "EESSI/${EESSI_VERSION}" +# ability to predefine elsewhere the default list (with options to append or prepend) +set LMOD_SYSTEM_DEFAULT_MODULES = "EESSI/$EESSI_VERSION" +if ( $?EESSI_SYSTEM_DEFAULT_MODULES_PREPEND ) then + set LMOD_SYSTEM_DEFAULT_MODULES = "$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" endif +if ( $?EESSI_SYSTEM_DEFAULT_MODULES_APPEND ) then + set LMOD_SYSTEM_DEFAULT_MODULES = "$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" +endif +setenv LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES" if (! $?__Init_EESSI_Default_Modules ) then setenv __Init_EESSI_Default_Modules 1 + # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod + # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) + set LMOD_EESSI_VERSION "$EESSI_VERSION:s/2023.06/2025.06/" + # If there is a local Lmod, make it forget about the system set MODULEPATH unsetenv __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unsetenv _ModuleTable001_ # Path to top-level module tree - setenv MODULEPATH "${EESSI_CVMFS_REPO}/init/modules" - source "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" + set modulepath = "$EESSI_CVMFS_REPO/init/modules" + if ( $?EESSI_EXTRA_MODULEPATH && "$EESSI_EXTRA_MODULEPATH" != "" ) then + set modulepath = "$modulepath:$EESSI_EXTRA_MODULEPATH" + endif + setenv MODULEPATH "$modulepath" + source "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" module --initial_load --no_redirect restore else diff --git a/init/lmod/fish b/init/lmod/fish index 2db34045..742511c8 100644 --- a/init/lmod/fish +++ b/init/lmod/fish @@ -6,19 +6,34 @@ set EESSI_VERSION (set -q EESSI_VERSION; and echo "$EESSI_VERSION"; or echo "$EE # Now that we know our EESSI version let's not forget it set -x EESSI_VERSION_DEFAULT "$EESSI_VERSION" -# ability to predefine elsewhere the default list -set -x LMOD_SYSTEM_DEFAULT_MODULES (set -q LMOD_SYSTEM_DEFAULT_MODULE; and echo "$LMOD_SYSTEM_DEFAULT_MODULE"; or echo "EESSI/$EESSI_VERSION") +# ability to predefine elsewhere the default list (with options to append or prepend) +set LMOD_SYSTEM_DEFAULT_MODULES "EESSI/$EESSI_VERSION" +if set -q EESSI_SYSTEM_DEFAULT_MODULES_PREPEND + set LMOD_SYSTEM_DEFAULT_MODULES "$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" +end +if set -q EESSI_SYSTEM_DEFAULT_MODULES_APPEND + set LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" +end +set -x LMOD_SYSTEM_DEFAULT_MODULES $LMOD_SYSTEM_DEFAULT_MODULES if test -z "$__Init_EESSI_Default_Modules" set -x __Init_EESSI_Default_Modules 1 + # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod + # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) + set LMOD_EESSI_VERSION (string replace 2023.06 2025.06 -- $EESSI_VERSION) + # If there is a local Lmod, make it forget about the system set MODULEPATH set -e __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have set -e _ModuleTable001_ # Path to top-level module tree - set -x MODULEPATH "$EESSI_CVMFS_REPO"/init/modules - . "$EESSI_CVMFS_REPO"/versions/"$EESSI_VERSION"/compat/linux/(uname -m)/usr/share/Lmod/init/fish + set modulepath "$EESSI_CVMFS_REPO/init/modules" + if set -q EESSI_EXTRA_MODULEPATH; and test -n "$EESSI_EXTRA_MODULEPATH" + set modulepath "$modulepath:$EESSI_EXTRA_MODULEPATH" + end + set -x MODULEPATH $modulepath + . "$EESSI_CVMFS_REPO"/versions/"$LMOD_EESSI_VERSION"/compat/linux/(uname -m)/usr/share/Lmod/init/fish module --initial_load --no_redirect restore else diff --git a/init/lmod/ksh b/init/lmod/ksh index 5be0cacd..e497a75a 100644 --- a/init/lmod/ksh +++ b/init/lmod/ksh @@ -6,20 +6,24 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" # Now that we know our EESSI version let's not forget it export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -## ability to predefine elsewhere the default list -LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +# ability to predefine elsewhere the default list (with options to append or prepend) +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then export __Init_EESSI_Default_Modules=1; + # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod + # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) + LMOD_EESSI_VERSION=${EESSI_VERSION/2023.06/2025.06} + # If there is a local Lmod, make it forget about the system set MODULEPATH unset __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unset _ModuleTable001_ # Path to top-level module tree - export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" - . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/ksh" + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules${EESSI_EXTRA_MODULEPATH:+:$EESSI_EXTRA_MODULEPATH}" + . "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/ksh" module --initial_load --no_redirect restore else diff --git a/init/lmod/zsh b/init/lmod/zsh index f8abfbd0..869417b4 100644 --- a/init/lmod/zsh +++ b/init/lmod/zsh @@ -6,20 +6,24 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" # Now that we know our EESSI version let's not forget it export EESSI_VERSION_DEFAULT="$EESSI_VERSION" -# ability to predefine elsewhere the default list -LMOD_SYSTEM_DEFAULT_MODULES=${LMOD_SYSTEM_DEFAULT_MODULES:-"EESSI/$EESSI_VERSION"} +# ability to predefine elsewhere the default list (with options to append or prepend) +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then export __Init_EESSI_Default_Modules=1; + # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod + # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) + LMOD_EESSI_VERSION=${EESSI_VERSION/2023.06/2025.06} + # If there is a local Lmod, make it forget about the system set MODULEPATH unset __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unset _ModuleTable001_ # Path to top-level module tree - export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules" - . "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/zsh" + export MODULEPATH="${EESSI_CVMFS_REPO}/init/modules${EESSI_EXTRA_MODULEPATH:+:$EESSI_EXTRA_MODULEPATH}" + . "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/$(uname -m)/usr/share/Lmod/init/zsh" module --initial_load --no_redirect restore else From 46c878f291d366636399eff68321f0db1ab4babd Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Jan 2026 15:34:59 +0100 Subject: [PATCH 05/11] Try to fix csg --- init/lmod/csh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/init/lmod/csh b/init/lmod/csh index dddb1fbf..3f911c73 100644 --- a/init/lmod/csh +++ b/init/lmod/csh @@ -11,12 +11,12 @@ endif setenv EESSI_VERSION_DEFAULT "$EESSI_VERSION" # ability to predefine elsewhere the default list (with options to append or prepend) -set LMOD_SYSTEM_DEFAULT_MODULES = "EESSI/$EESSI_VERSION" +set LMOD_SYSTEM_DEFAULT_MODULES="EESSI/$EESSI_VERSION" if ( $?EESSI_SYSTEM_DEFAULT_MODULES_PREPEND ) then - set LMOD_SYSTEM_DEFAULT_MODULES = "$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" + set LMOD_SYSTEM_DEFAULT_MODULES="$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" endif if ( $?EESSI_SYSTEM_DEFAULT_MODULES_APPEND ) then - set LMOD_SYSTEM_DEFAULT_MODULES = "$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" + set LMOD_SYSTEM_DEFAULT_MODULES="$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" endif setenv LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES" @@ -25,16 +25,16 @@ if (! $?__Init_EESSI_Default_Modules ) then # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) - set LMOD_EESSI_VERSION "$EESSI_VERSION:s/2023.06/2025.06/" + set LMOD_EESSI_VERSION="$EESSI_VERSION:s/2023.06/2025.06/" # If there is a local Lmod, make it forget about the system set MODULEPATH unsetenv __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unsetenv _ModuleTable001_ # Path to top-level module tree - set modulepath = "$EESSI_CVMFS_REPO/init/modules" + set modulepath="$EESSI_CVMFS_REPO/init/modules" if ( $?EESSI_EXTRA_MODULEPATH && "$EESSI_EXTRA_MODULEPATH" != "" ) then - set modulepath = "$modulepath:$EESSI_EXTRA_MODULEPATH" + set modulepath="$modulepath:$EESSI_EXTRA_MODULEPATH" endif setenv MODULEPATH "$modulepath" source "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" From 3a6c117924a71ac40721bded76eb5d6e4a42e51e Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Jan 2026 15:59:07 +0100 Subject: [PATCH 06/11] csh has very short maximum length for envvar names, stick to <32 chars --- .../workflows/scripts/test_init_scripts.sh | 14 ++++---- init/lmod/bash | 2 +- init/lmod/csh | 34 +++++++++++-------- init/lmod/fish | 8 ++--- init/lmod/ksh | 2 +- init/lmod/zsh | 2 +- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index 2e3a5a58..a8d8652d 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -75,20 +75,20 @@ for shell in ${SHELLS[@]}; do assert_raises 'echo "$EASYBUILD_PATH" | grep -E "$PATTERN"' echo "$EASYBUILD_PATH" "$PATTERN" - # TEST 6 and 7: Check the various options (EESSI_SYSTEM_DEFAULT_MODULES_APPEND, EESSI_SYSTEM_DEFAULT_MODULES_APPEND, EESSI_EXTRA_MODULEPATH) all work + # TEST 6 and 7: Check the various options (EESSI_DEFAULT_MODULES_APPEND, EESSI_DEFAULT_MODULES_APPEND, EESSI_EXTRA_MODULEPATH) all work if [ "$shell" = "csh" ]; then - echo "setenv EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module" > ~/.cshrc - echo "setenv EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module" >> ~/.cshrc + echo "setenv EESSI_DEFAULT_MODULES_APPEND append_module" > ~/.cshrc + echo "setenv EESSI_DEFAULT_MODULES_PREPEND prepend_module" >> ~/.cshrc echo "setenv EESSI_EXTRA_MODULEPATH .github/workflows/modules" >> ~/.cshrc echo "source init/lmod/$shell" >> ~/.cshrc TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'echo $LMOD_SYSTEM_DEFAULT_MODULES') TEST_MODULEPATH=$($shell -c 'echo $MODULEPATH') elif [ "$shell" = "fish" ]; then - TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'set -x EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $LMOD_SYSTEM_DEFAULT_MODULES') - TEST_MODULEPATH=$($shell -c 'set -x EESSI_SYSTEM_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_SYSTEM_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') + TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'set -x EESSI_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $LMOD_SYSTEM_DEFAULT_MODULES') + TEST_MODULEPATH=$($shell -c 'set -x EESSI_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') else - TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'export EESSI_SYSTEM_DEFAULT_MODULES_APPEND=append_module ; export EESSI_SYSTEM_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' ; echo $LMOD_SYSTEM_DEFAULT_MODULES') - TEST_MODULEPATH=$($shell -c 'export EESSI_SYSTEM_DEFAULT_MODULES_APPEND=append_module ; export EESSI_SYSTEM_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') + TEST_LMOD_SYSTEM_DEFAULT_MODULES=$($shell -c 'export EESSI_DEFAULT_MODULES_APPEND=append_module ; export EESSI_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' ; echo $LMOD_SYSTEM_DEFAULT_MODULES') + TEST_MODULEPATH=$($shell -c 'export EESSI_DEFAULT_MODULES_APPEND=append_module ; export EESSI_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH') fi # escape the dots in ${EASYBUILD_VERSION} LMOD_SYSTEM_DEFAULT_MODULES_PATTERN='^prepend_module:.*:append_module$' diff --git a/init/lmod/bash b/init/lmod/bash index 02e7d37a..9cbec4f7 100644 --- a/init/lmod/bash +++ b/init/lmod/bash @@ -7,7 +7,7 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" export EESSI_VERSION_DEFAULT="$EESSI_VERSION" # ability to predefine elsewhere the default list (with options to append or prepend) -LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_DEFAULT_MODULES_PREPEND:+$EESSI_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_DEFAULT_MODULES_APPEND:+:$EESSI_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then diff --git a/init/lmod/csh b/init/lmod/csh index 3f911c73..9c8f45d0 100644 --- a/init/lmod/csh +++ b/init/lmod/csh @@ -1,40 +1,46 @@ # Choose an EESSI CVMFS repository -if (! $?EESSI_CVMFS_REPO) then +if ( ! $?EESSI_CVMFS_REPO) then set EESSI_CVMFS_REPO = "/cvmfs/software.eessi.io" endif # Choose an EESSI version setenv EESSI_VERSION_DEFAULT "__EESSI_VERSION_DEFAULT__" -if (! $?EESSI_VERSION) then +if ( ! $?EESSI_VERSION) then set EESSI_VERSION = "${EESSI_VERSION_DEFAULT}" endif # Now that we know our EESSI version let's not forget it -setenv EESSI_VERSION_DEFAULT "$EESSI_VERSION" +setenv EESSI_VERSION_DEFAULT "${EESSI_VERSION}" # ability to predefine elsewhere the default list (with options to append or prepend) -set LMOD_SYSTEM_DEFAULT_MODULES="EESSI/$EESSI_VERSION" -if ( $?EESSI_SYSTEM_DEFAULT_MODULES_PREPEND ) then - set LMOD_SYSTEM_DEFAULT_MODULES="$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" +set LMOD_SYSTEM_DEFAULT_MODULES="EESSI/${EESSI_VERSION}" +if ( $?EESSI_DEFAULT_MODULES_PREPEND ) then + set LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_DEFAULT_MODULES_PREPEND}:${LMOD_SYSTEM_DEFAULT_MODULES}" endif -if ( $?EESSI_SYSTEM_DEFAULT_MODULES_APPEND ) then - set LMOD_SYSTEM_DEFAULT_MODULES="$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" +if ( $?EESSI_DEFAULT_MODULES_APPEND ) then + set LMOD_SYSTEM_DEFAULT_MODULES="${LMOD_SYSTEM_DEFAULT_MODULES}:${EESSI_DEFAULT_MODULES_APPEND}" endif -setenv LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES" +setenv LMOD_SYSTEM_DEFAULT_MODULES "${LMOD_SYSTEM_DEFAULT_MODULES}" -if (! $?__Init_EESSI_Default_Modules ) then +if ( ! $?__Init_EESSI_Default_Modules ) then setenv __Init_EESSI_Default_Modules 1 # Lmod version in 2023.06 has a problem with newer Lmod caches, so let's stick to more recent Lmod # (has no effect except on Lmod itself, and compatible caches are still created/supported by EESSI) - set LMOD_EESSI_VERSION="$EESSI_VERSION:s/2023.06/2025.06/" + set LMOD_EESSI_VERSION="${EESSI_VERSION}" + if ( "${LMOD_EESSI_VERSION}" == "2023.06" ) then + set LMOD_EESSI_VERSION="2025.06" + endif # If there is a local Lmod, make it forget about the system set MODULEPATH unsetenv __LMOD_REF_COUNT_MODULEPATH # and clear out any memory Lmod might have unsetenv _ModuleTable001_ # Path to top-level module tree - set modulepath="$EESSI_CVMFS_REPO/init/modules" - if ( $?EESSI_EXTRA_MODULEPATH && "$EESSI_EXTRA_MODULEPATH" != "" ) then - set modulepath="$modulepath:$EESSI_EXTRA_MODULEPATH" + set modulepath="${EESSI_CVMFS_REPO}/init/modules" + if ( $?EESSI_EXTRA_MODULEPATH ) then + # Now that we know it exists, check IF it is not empty + if ( "$EESSI_EXTRA_MODULEPATH" != "" ) then + set modulepath="${modulepath}:${EESSI_EXTRA_MODULEPATH}" + endif endif setenv MODULEPATH "$modulepath" source "${EESSI_CVMFS_REPO}/versions/${LMOD_EESSI_VERSION}/compat/linux/`uname -m`/usr/share/Lmod/init/csh" diff --git a/init/lmod/fish b/init/lmod/fish index 742511c8..1e0ed23d 100644 --- a/init/lmod/fish +++ b/init/lmod/fish @@ -8,11 +8,11 @@ set -x EESSI_VERSION_DEFAULT "$EESSI_VERSION" # ability to predefine elsewhere the default list (with options to append or prepend) set LMOD_SYSTEM_DEFAULT_MODULES "EESSI/$EESSI_VERSION" -if set -q EESSI_SYSTEM_DEFAULT_MODULES_PREPEND - set LMOD_SYSTEM_DEFAULT_MODULES "$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" +if set -q EESSI_DEFAULT_MODULES_PREPEND + set LMOD_SYSTEM_DEFAULT_MODULES "$EESSI_DEFAULT_MODULES_PREPEND:$LMOD_SYSTEM_DEFAULT_MODULES" end -if set -q EESSI_SYSTEM_DEFAULT_MODULES_APPEND - set LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND" +if set -q EESSI_DEFAULT_MODULES_APPEND + set LMOD_SYSTEM_DEFAULT_MODULES "$LMOD_SYSTEM_DEFAULT_MODULES:$EESSI_DEFAULT_MODULES_APPEND" end set -x LMOD_SYSTEM_DEFAULT_MODULES $LMOD_SYSTEM_DEFAULT_MODULES diff --git a/init/lmod/ksh b/init/lmod/ksh index e497a75a..d96285f6 100644 --- a/init/lmod/ksh +++ b/init/lmod/ksh @@ -7,7 +7,7 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" export EESSI_VERSION_DEFAULT="$EESSI_VERSION" # ability to predefine elsewhere the default list (with options to append or prepend) -LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_DEFAULT_MODULES_PREPEND:+$EESSI_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_DEFAULT_MODULES_APPEND:+:$EESSI_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then diff --git a/init/lmod/zsh b/init/lmod/zsh index 869417b4..7738e3a7 100644 --- a/init/lmod/zsh +++ b/init/lmod/zsh @@ -7,7 +7,7 @@ EESSI_VERSION="${EESSI_VERSION:-${EESSI_VERSION_DEFAULT}}" export EESSI_VERSION_DEFAULT="$EESSI_VERSION" # ability to predefine elsewhere the default list (with options to append or prepend) -LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:+$EESSI_SYSTEM_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_SYSTEM_DEFAULT_MODULES_APPEND:+:$EESSI_SYSTEM_DEFAULT_MODULES_APPEND}" +LMOD_SYSTEM_DEFAULT_MODULES="${EESSI_DEFAULT_MODULES_PREPEND:+$EESSI_DEFAULT_MODULES_PREPEND:}EESSI/$EESSI_VERSION${EESSI_DEFAULT_MODULES_APPEND:+:$EESSI_DEFAULT_MODULES_APPEND}" export LMOD_SYSTEM_DEFAULT_MODULES if [ -z "$__Init_EESSI_Default_Modules" ]; then From 785ae1386498229d4251588e51ea08b363484725 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Jan 2026 16:05:15 +0100 Subject: [PATCH 07/11] Some fancy new runners available! --- .github/workflows/scripts/test_init_scripts.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index a8d8652d..5769a64f 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -45,7 +45,7 @@ for shell in ${SHELLS[@]}; do else MODULE_SECTIONS=($($shell -c "source init/lmod/$shell 2>/dev/null; module ov 2>&1 | grep -e '---'")) fi - PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/modules/all" + PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3|intel/icelake)/modules/all" assert_raises 'echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"' echo "${MODULE_SECTIONS[1]}" "$PATTERN" @@ -70,7 +70,7 @@ for shell in ${SHELLS[@]}; do EASYBUILD_PATH=$($shell -c "source init/lmod/$shell 2>/dev/null; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; which eb") fi # escape the dots in ${EASYBUILD_VERSION} - PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/software/EasyBuild/${EXPECTED_EASYBUILD_VERSION//./\\.}/bin/eb" + PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3|intel/icelake)/software/EasyBuild/${EXPECTED_EASYBUILD_VERSION//./\\.}/bin/eb" echo "$EASYBUILD_PATH" | grep -E "$PATTERN" assert_raises 'echo "$EASYBUILD_PATH" | grep -E "$PATTERN"' echo "$EASYBUILD_PATH" "$PATTERN" From 61db94178daf3f3f0ebadf7eb3df425954441ae7 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Jan 2026 16:10:22 +0100 Subject: [PATCH 08/11] Actually use the CPU override --- .github/workflows/tests_init_module.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests_init_module.yml b/.github/workflows/tests_init_module.yml index b4d31435..1cf0ac62 100644 --- a/.github/workflows/tests_init_module.yml +++ b/.github/workflows/tests_init_module.yml @@ -57,6 +57,7 @@ jobs: - name: Run tests for available shells run: | + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} export EESSI_VERSION=${{matrix.EESSI_VERSION}} export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}} .github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh" From dcce3405b818b9e41a28d8a0ee11eb281b7240d4 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 30 Jan 2026 10:13:21 +0100 Subject: [PATCH 09/11] Use specific commit for assert.sh, also run tests on system with Lmod available --- .../workflows/scripts/test_init_scripts.sh | 1 + .github/workflows/tests_init_module.yml | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index 5769a64f..21b94ea7 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -16,6 +16,7 @@ if [ ! -d assert.sh ]; then echo "assert.sh not cloned." echo "" echo "run \`git clone https://github.com/lehmannro/assert.sh.git\`" + echo "(see workflow file that calls this script for how to only clone specific commit if you are worried about security)" exit 1 fi . assert.sh/assert.sh diff --git a/.github/workflows/tests_init_module.yml b/.github/workflows/tests_init_module.yml index 1cf0ac62..21747562 100644 --- a/.github/workflows/tests_init_module.yml +++ b/.github/workflows/tests_init_module.yml @@ -46,8 +46,13 @@ jobs: sed -i "s/__EESSI_VERSION_DEFAULT__/${{matrix.EESSI_VERSION}}/g" init/lmod/${shell} done - - name: Clone assert.sh script - run: git clone https://github.com/lehmannro/assert.sh.git + - name: Clone assert.sh at pinned commit + run: | + ASSERT_COMMIT_SHA=fe359e341670f1e8e86a3804ca00e5a3ebc30fa4 + git clone --no-checkout https://github.com/lehmannro/assert.sh.git + cd assert.sh + git fetch --depth 1 origin $ASSERT_COMMIT_SHA + git checkout $ASSERT_COMMIT_SHA - name: Install missing shells run: | @@ -55,10 +60,18 @@ jobs: sudo apt install zsh ksh fish tcsh echo "# INIT ZSH" > ~/.zshrc - - name: Run tests for available shells + - name: Run tests for available shells without system Lmod run: | export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} export EESSI_VERSION=${{matrix.EESSI_VERSION}} export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}} .github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh" - + - name: Run tests for available shells with system Lmod + run: | + # We also want to perform the same test when there is an Lmod version available on the system + sudo apt install lmod + source /usr/share/lmod/lmod/init/bash + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} + export EESSI_VERSION=${{matrix.EESSI_VERSION}} + export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}} + .github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh" From a97140abe64dda99e4dbebc67a4d611872922473 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 30 Jan 2026 10:42:06 +0100 Subject: [PATCH 10/11] Don't clobber an existing .cshrc --- .github/workflows/scripts/test_init_scripts.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index 21b94ea7..7d850904 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -29,9 +29,13 @@ for shell in ${SHELLS[@]}; do echo RUNNING TESTS FOR SHELL: $shell echo = | awk 'NF += (OFS = $_) + 100' if [[ ! " ${TEST_SHELLS[*]} " =~ [[:space:]]${shell}[[:space:]] ]]; then - ### EXCEPTION FOR CSH ### echo -e "\033[33mWe don't now how to test the shell '$shell', PRs are Welcome.\033[0m" else + if [ "$shell" = "csh" ]; then + # make sure our .cshrc is empty before we begin as we will clobber it + [ -f "~/.cshrc" ] && mv "~/.cshrc" "~/.cshrc_orig" + fi + # TEST 1: Source Script and check Module Output expected="Module for EESSI/$EESSI_VERSION loaded successfully" assert "$shell -c 'source init/lmod/$shell' 2>&1 " "${expected}" @@ -105,6 +109,12 @@ for shell in ${SHELLS[@]}; do # End Test Suite assert_end "source_eessi_$shell" + + if [ "$shell" = "csh" ]; then + # Restore our .cshrc + [ -f "~/.cshrc_orig" ] && mv "~/.cshrc_orig" "~/.cshrc" + fi + fi done From d779b54aa42de413145eebcca452f324419dacd5 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 30 Jan 2026 10:43:35 +0100 Subject: [PATCH 11/11] Add a sanity check to make sure module command works --- .github/workflows/tests_init_module.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests_init_module.yml b/.github/workflows/tests_init_module.yml index 21747562..d4d1f3b4 100644 --- a/.github/workflows/tests_init_module.yml +++ b/.github/workflows/tests_init_module.yml @@ -71,6 +71,7 @@ jobs: # We also want to perform the same test when there is an Lmod version available on the system sudo apt install lmod source /usr/share/lmod/lmod/init/bash + module avail export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} export EESSI_VERSION=${{matrix.EESSI_VERSION}} export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}}