Skip to content

Commit

Permalink
spack ci rebuild: Don't install in a login shell (#31771)
Browse files Browse the repository at this point in the history
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 ...
  • Loading branch information
blue42u committed Aug 2, 2022
1 parent 6e0b795 commit 8c50ea9
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions lib/spack/spack/cmd/ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -521,10 +521,9 @@ def ci_rebuild(args):
install_copy_path = os.path.join(repro_dir, "install.sh")
shutil.copyfile("install.sh", install_copy_path)

# Run the generated install.sh shell script as if it were being run in
# a login shell.
# Run the generated install.sh shell script
try:
install_process = subprocess.Popen(["bash", "-l", "./install.sh"])
install_process = subprocess.Popen(["bash", "./install.sh"])
install_process.wait()
install_exit_code = install_process.returncode
except (ValueError, subprocess.CalledProcessError, OSError) as inst:
Expand Down

0 comments on commit 8c50ea9

Please sign in to comment.