spack ci rebuild: Don't install in a login shell (#31771)
On some systems the shell in login mode wipes important parts of the environment, such as PATH. This causes the build to fail since it can't find `spack`. For better robustness, don't use a login shell. In a full CI job the final spack install is run in an environment formed by scripts running in this order: export AWS_SECRET=... # 1. Load environment from GitLab project variables source spack/share/spack/setup-env.sh # 2. Load Spack into the environment (PATH) spack env activate -V concrete_env # 3. Activate the concrete environment source /etc/profile # 4. Bash login shell (from -l) spack install ... Whereas when a user launches their own container with (docker|podman) run -it, they end up running spack install in an environment formed in this order: source /etc/bash.bashrc # (not 4). Bash interactive shell (default with TTY) export AWS_SECRET=... #~1. Manually load environment from GitLab project variables source spack/share/spack/setup-env.sh # 2. Load Spack into the environment (PATH) spack env activate -V concrete_env # 3. Activate the concrete environment spack install ... The big problem being that (4) has a completely different position and content (on Leap 15 and possibly other containers). So in context, this PR removes (4) from the CI job case, leaving us with the simpler: export AWS_SECRET=... # 1. Load environment from GitLab project variables source spack/share/spack/setup-env.sh # 2. Load Spack into the environment (PATH) spack env activate -V concrete_env # 3. Activate the concrete environment spack install ...
This commit is contained in:
parent
6e0b7959a4
commit
8c50ea9dc0
1 changed files with 2 additions and 3 deletions
|
@ -521,10 +521,9 @@ def ci_rebuild(args):
|
||||||
install_copy_path = os.path.join(repro_dir, "install.sh")
|
install_copy_path = os.path.join(repro_dir, "install.sh")
|
||||||
shutil.copyfile("install.sh", install_copy_path)
|
shutil.copyfile("install.sh", install_copy_path)
|
||||||
|
|
||||||
# Run the generated install.sh shell script as if it were being run in
|
# Run the generated install.sh shell script
|
||||||
# a login shell.
|
|
||||||
try:
|
try:
|
||||||
install_process = subprocess.Popen(["bash", "-l", "./install.sh"])
|
install_process = subprocess.Popen(["bash", "./install.sh"])
|
||||||
install_process.wait()
|
install_process.wait()
|
||||||
install_exit_code = install_process.returncode
|
install_exit_code = install_process.returncode
|
||||||
except (ValueError, subprocess.CalledProcessError, OSError) as inst:
|
except (ValueError, subprocess.CalledProcessError, OSError) as inst:
|
||||||
|
|
Loading…
Reference in a new issue