* Add two no-op jobs named "all-prechecks" and "all" These are a suggestion from @tgamblin, they are stable named markers we can use from gitlab and possibly for required checks to make CI more resilient to refactors changing the names of specific checks. * Enable parallel testing using xdist for unit testing in CI * Normalize tmp paths to deal with macos * add -u flag compatibility to spack python As of now, it is accepted and ignored. The usage with xdist, where it is invoked specifically by `python -u spack python` which is then passed `-u` by xdist is the entire reason for doing this. It should never be used without explicitly passing -u to the executing python interpreter. * use spack python in xdist to support python 2 When running on python2, spack has many import cycles unless started through main. To allow that, this uses `spack python` as the interpreter, leveraging the `-u` support so xdist doesn't error out when it unconditionally requests unbuffered binary IO. * Use shutil.move to account for tmpdir being in a separate filesystem sometimes
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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[@]}"
 |