96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/bin/bash | ||
|  | set -euo pipefail | ||
|  | [[ -n "${TMPCONFIG_DEBUG:=}" ]] && set -x | ||
|  | DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
|  | mkdir -p "${XDG_RUNTIME_DIR:=/tmp}/spack-tests" | ||
|  | export TMPDIR="${XDG_RUNTIME_DIR}" | ||
|  | export TMP_DIR="$(mktemp -d -t spack-test-XXXXX)" | ||
|  | clean_up() { | ||
|  |     [[ -n "$TMPCONFIG_DEBUG" ]] && printf "cleaning up: $TMP_DIR\n" | ||
|  |     rm -rf "$TMP_DIR" | ||
|  | } | ||
|  | trap clean_up EXIT | ||
|  | trap clean_up ERR | ||
|  | 
 | ||
|  | [[ -n "$TMPCONFIG_DEBUG" ]] && printf "Redirecting TMP_DIR and spack directories to $TMP_DIR\n" | ||
|  | 
 | ||
|  | export BOOTSTRAP="${SPACK_USER_CACHE_PATH:=$HOME/.spack}/bootstrap" | ||
|  | export SPACK_USER_CACHE_PATH="$TMP_DIR/user_cache" | ||
|  | mkdir -p "$SPACK_USER_CACHE_PATH" | ||
|  | 
 | ||
|  | private_bootstrap="$SPACK_USER_CACHE_PATH/bootstrap" | ||
|  | use_spack='' | ||
|  | use_bwrap='' | ||
|  | # argument handling | ||
|  | while (($# >= 1)) ; do | ||
|  |     case "$1" in | ||
|  |         -b) # privatize bootstrap too, useful for CI but not always cheap | ||
|  |             shift | ||
|  |             export BOOTSTRAP="$private_bootstrap" | ||
|  |             ;; | ||
|  |         -B) # use specified bootstrap dir | ||
|  |             export BOOTSTRAP="$2" | ||
|  |             shift 2 | ||
|  |             ;; | ||
|  |         -s) # run spack directly with remaining args | ||
|  |             shift | ||
|  |             use_spack=1 | ||
|  |             ;; | ||
|  |         --contain=bwrap) | ||
|  |             if bwrap --help 2>&1 > /dev/null ; then | ||
|  |                 use_bwrap=1 | ||
|  |             else | ||
|  |                 echo Bubblewrap containment requested, but no bwrap command found | ||
|  |                 exit 1 | ||
|  |             fi | ||
|  |             shift | ||
|  |             ;; | ||
|  |         --) | ||
|  |             shift | ||
|  |             break | ||
|  |             ;; | ||
|  |         *) | ||
|  |             break | ||
|  |             ;; | ||
|  |     esac | ||
|  | done | ||
|  | typeset -a CMD | ||
|  | if [[ -n "$use_spack" ]] ; then | ||
|  |     CMD=("$DIR/spack" "$@") | ||
|  | else | ||
|  |     CMD=("$@") | ||
|  | fi | ||
|  | 
 | ||
|  | mkdir -p "$BOOTSTRAP" | ||
|  | 
 | ||
|  | export SPACK_SYSTEM_CONFIG_PATH="$TMP_DIR/sys_conf" | ||
|  | export SPACK_USER_CONFIG_PATH="$TMP_DIR/user_conf" | ||
|  | mkdir -p "$SPACK_USER_CONFIG_PATH" | ||
|  | cat >"$SPACK_USER_CONFIG_PATH/config.yaml" <<EOF | ||
|  | config: | ||
|  |   install_tree: | ||
|  |     root: $TMP_DIR/install | ||
|  |   misc_cache: $$user_cache_path/cache | ||
|  |   source_cache: $$user_cache_path/source | ||
|  | EOF | ||
|  | cat >"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" <<EOF | ||
|  | bootstrap: | ||
|  |   root: $BOOTSTRAP | ||
|  | EOF | ||
|  | 
 | ||
|  | if [[ -n "$use_bwrap" ]] ; then | ||
|  |     CMD=( | ||
|  |         bwrap | ||
|  |         --dev-bind / / | ||
|  |         --ro-bind "$DIR/.." "$DIR/.." # do not touch spack root | ||
|  |         --ro-bind $HOME/.spack $HOME/.spack # do not touch user config/cache dir | ||
|  |         --bind "$TMP_DIR" "$TMP_DIR" | ||
|  |         --bind "$BOOTSTRAP" "$BOOTSTRAP" | ||
|  |         --die-with-parent | ||
|  |         "${CMD[@]}" | ||
|  |     ) | ||
|  | fi | ||
|  | 
 | ||
|  | (( ${TMPCONFIG_DEBUG:=0} > 1)) && echo "Running: ${CMD[@]}" | ||
|  | "${CMD[@]}" |