Skip to content

Commit 1e810da

Browse files
authored
Merge pull request #182 from ocaisa/lmod_init_tweaks
Support dash init shell with Lmod approach, make sure second initialsation gives expected EESSI version
2 parents 693e5ac + 8a833de commit 1e810da

9 files changed

Lines changed: 178 additions & 282 deletions

File tree

.github/workflows/scripts/test_init_scripts.sh

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ if [ ! -d assert.sh ]; then
2626
fi
2727
. assert.sh/assert.sh
2828

29-
TEST_SHELLS=("bash" "zsh" "fish" "ksh" "csh")
29+
TEST_SHELLS=("bash" "zsh" "fish" "ksh" "csh" "sh")
3030
SHELLS=$@
3131

3232
for shell in ${SHELLS[@]}; do
@@ -43,7 +43,11 @@ for shell in ${SHELLS[@]}; do
4343

4444
# TEST 1: Source Script and check Module Output
4545
expected_pattern=".*EESSI has selected $EESSI_SOFTWARE_SUBDIR_OVERRIDE as the compatible CPU target for EESSI/$EESSI_VERSION.*"
46-
assert_raises "$shell -c 'source init/lmod/$shell' 2>&1 | grep -E \"${expected_pattern}\""
46+
if [ "$shell" = "csh" ]; then
47+
assert_raises "$shell -c 'source init/lmod/$shell' 2>&1 | grep -E \"${expected_pattern}\""
48+
else
49+
assert_raises "$shell -c '. init/lmod/$shell' 2>&1 | grep -E \"${expected_pattern}\""
50+
fi
4751

4852
# TEST 2: Check if module overviews first section is the loaded EESSI module
4953
if [ "$shell" = "csh" ]; then
@@ -53,7 +57,7 @@ for shell in ${SHELLS[@]}; do
5357
echo "source init/lmod/$shell" > ~/.cshrc
5458
MODULE_SECTIONS=($($shell -c "module ov" 2>&1 | grep -e '---'))
5559
else
56-
MODULE_SECTIONS=($($shell -c "source init/lmod/$shell >/dev/null 2>&1; module ov 2>&1 | grep -e '---'"))
60+
MODULE_SECTIONS=($($shell -c ". init/lmod/$shell >/dev/null 2>&1; module ov 2>&1 | grep -e '---'"))
5761
fi
5862
PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR_OVERRIDE/modules/all"
5963
assert_raises 'echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"'
@@ -68,7 +72,7 @@ for shell in ${SHELLS[@]}; do
6872
echo "source init/lmod/$shell" > ~/.cshrc
6973
command="$shell -c 'module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; eb --version' | tail -n 1 | awk '{print \$4}'"
7074
else
71-
command="$shell -c 'source init/lmod/$shell >/dev/null 2>&1; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; eb --version' | tail -n 1 | awk '{print \$4}'"
75+
command="$shell -c '. init/lmod/$shell >/dev/null 2>&1; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; eb --version' | tail -n 1 | awk '{print \$4}'"
7276
fi
7377
assert "$command" "$EXPECTED_EASYBUILD_VERSION"
7478

@@ -77,7 +81,7 @@ for shell in ${SHELLS[@]}; do
7781
echo "source init/lmod/$shell" > ~/.cshrc
7882
EASYBUILD_PATH=$($shell -c "module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; which eb")
7983
else
80-
EASYBUILD_PATH=$($shell -c "source init/lmod/$shell 2>/dev/null; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; which eb")
84+
EASYBUILD_PATH=$($shell -c ". init/lmod/$shell 2>/dev/null; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION}; which eb")
8185
fi
8286
# escape the dots in ${EASYBUILD_VERSION}
8387
PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR_OVERRIDE/software/EasyBuild/${EXPECTED_EASYBUILD_VERSION//./\\.}/bin/eb"
@@ -97,8 +101,8 @@ for shell in ${SHELLS[@]}; do
97101
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')
98102
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')
99103
else
100-
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')
101-
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')
104+
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 ; . init/lmod/'"$shell"' ; echo $LMOD_SYSTEM_DEFAULT_MODULES')
105+
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 ; . init/lmod/'"$shell"' 2>/dev/null; echo $MODULEPATH')
102106
fi
103107
LMOD_SYSTEM_DEFAULT_MODULES_PATTERN='^prepend_module:.*:append_module$'
104108
# echo "$TEST_LMOD_SYSTEM_DEFAULT_MODULES" AND "$LMOD_SYSTEM_DEFAULT_MODULES_PATTERN"
@@ -126,8 +130,8 @@ for shell in ${SHELLS[@]}; do
126130
TEST_EESSI_WITH_PURGE=$($shell -c "source $LMOD_PKG/init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null")
127131
TEST_EESSI_WITHOUT_PURGE=$($shell -c "set -x EESSI_NO_MODULE_PURGE_ON_INIT 1 ; source $LMOD_PKG/init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null")
128132
else
129-
TEST_EESSI_WITH_PURGE=$($shell -c "source $LMOD_PKG/init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null")
130-
TEST_EESSI_WITHOUT_PURGE=$($shell -c "export EESSI_NO_MODULE_PURGE_ON_INIT=1 ; source $LMOD_PKG/init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null")
133+
TEST_EESSI_WITH_PURGE=$($shell -c ". $LMOD_PKG/init/$shell 2>/dev/null ; . init/lmod/$shell 2>/dev/null")
134+
TEST_EESSI_WITHOUT_PURGE=$($shell -c "export EESSI_NO_MODULE_PURGE_ON_INIT=1 ; . $LMOD_PKG/init/$shell 2>/dev/null ; . init/lmod/$shell 2>/dev/null")
131135
fi
132136
# In the first case we should have the test and in the second case we shouldn't
133137
pattern="Modules purged before initialising EESSI"
@@ -139,10 +143,10 @@ for shell in ${SHELLS[@]}; do
139143
fi
140144

141145
# Optional test 10, check if the prompt has been updated
142-
if [ "$shell" = "bash" ] || [ "$shell" = "ksh" ] || [ "$shell" = "zsh" ]; then
146+
if [ "$shell" = "bash" ] || [ "$shell" = "ksh" ] || [ "$shell" = "zsh" ] || [ "$shell" = "sh" ]; then
143147
# Typically this is a non-interactive shell, so manually unset PS1 and reset to a non-exported variable when testing
144-
TEST_EESSI_PS1_UPDATE=$($shell -c "unset PS1 ; PS1='$ ' ; source init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"")
145-
TEST_EESSI_NO_PS1_UPDATE=$($shell -c "unset PS1 ; source init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"")
148+
TEST_EESSI_PS1_UPDATE=$($shell -c "unset PS1 ; PS1='$ ' ; . init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"")
149+
TEST_EESSI_NO_PS1_UPDATE=$($shell -c "unset PS1 ; . init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"")
146150
pattern="{EESSI/${EESSI_VERSION}} "
147151
assert_raises 'echo "$TEST_EESSI_PS1_UPDATE" | grep "$pattern"'
148152
assert_raises 'echo "$TEST_EESSI_NO_PS1_UPDATE" | grep "$pattern"' 1

.github/workflows/tests_init_module.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ jobs:
5757
- name: Install missing shells
5858
run: |
5959
sudo apt update
60+
# We're in Ubuntu so dash is already installed (and is symlinked to sh)
6061
sudo apt install zsh ksh fish tcsh
6162
echo "# INIT ZSH" > ~/.zshrc
6263
@@ -65,7 +66,7 @@ jobs:
6566
export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}}
6667
export EESSI_VERSION=${{matrix.EESSI_VERSION}}
6768
export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}}
68-
.github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh"
69+
.github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh" "sh"
6970
- name: Run tests for available shells with system Lmod
7071
run: |
7172
# We also want to perform the same test when there is an Lmod version available on the system
@@ -76,4 +77,4 @@ jobs:
7677
export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}}
7778
export EESSI_VERSION=${{matrix.EESSI_VERSION}}
7879
export EXPECTED_EASYBUILD_VERSION=${{matrix.EXPECTED_EASYBUILD_VERSION}}
79-
.github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh"
80+
.github/workflows/scripts/test_init_scripts.sh "bash" "zsh" "ksh" "fish" "csh" "sh"

init/lmod/bash

Lines changed: 0 additions & 117 deletions
This file was deleted.

init/lmod/bash

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sh

init/lmod/csh

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,16 @@ if ( ! $?__EESSI_VERSION_USED_FOR_INIT ) then
2020
else
2121
set EESSI_VERSION_DEFAULT = "$__EESSI_VERSION_USED_FOR_INIT"
2222
endif
23-
if ( ! $?EESSI_VERSION ) then
24-
set EESSI_VERSION = "$EESSI_VERSION_DEFAULT"
23+
if ( ! $?__Init_EESSI_Default_Modules ) then
24+
if ( $?EESSI_VERSION ) then
25+
# keep existing value
26+
else
27+
set EESSI_VERSION "$EESSI_VERSION_DEFAULT"
28+
endif
29+
else
30+
# If we have already initialised and this is being called again,
31+
# then we must want the specific version
32+
set EESSI_VERSION "__EESSI_VERSION_DEFAULT__"
2533
endif
2634
# On first run, record the EESSI version used for init as an environment variable.
2735
# We use setenv to ensure it is available to child processes (equivalent to export).

init/lmod/fish

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,16 @@ if not set -q __EESSI_VERSION_USED_FOR_INIT
1818
else
1919
set EESSI_VERSION_DEFAULT "$__EESSI_VERSION_USED_FOR_INIT"
2020
end
21-
if not set -q EESSI_VERSION
22-
set EESSI_VERSION "$EESSI_VERSION_DEFAULT"
21+
if not set -q __Init_EESSI_Default_Modules
22+
if set -q EESSI_VERSION
23+
# keep existing value
24+
else
25+
set EESSI_VERSION $EESSI_VERSION_DEFAULT
26+
end
27+
else
28+
# If we have already initialised and this is being called again,
29+
# then we must want the specific version
30+
set EESSI_VERSION "__EESSI_VERSION_DEFAULT__"
2331
end
2432

2533
# Record version used for init; -x exports it to the environment

0 commit comments

Comments
 (0)