762ba27036
* 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
95 lines
2.5 KiB
Bash
Executable file
95 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[@]}"
|