a87a59a86b
Don't auto-switch to root when executing make-container.sh, because auto root switching is also implemented in extra-container. Besides simplifying the code, this is useful for a later commit that introduces flakes-based container building. With this change, the container is built under the regular user instead of root, thereby utilizing the user's regular fetcher and evaluation caches.
90 lines
3.0 KiB
Bash
Executable File
90 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Usage:
|
|
#
|
|
# run-tests.sh [--scenario|-s <scenario>] container
|
|
#
|
|
# Start container and start a shell session with helper commands
|
|
# for accessing the container.
|
|
# A short command documentation is printed at the start of the session.
|
|
# The container is destroyed after exiting the shell.
|
|
# An existing container is destroyed before starting.
|
|
#
|
|
# Supported arguments:
|
|
#
|
|
# --destroy|-d to destroy
|
|
#
|
|
# When `run-tests.sh container` from inside an existing shell session,
|
|
# the current container is updated without restarting by switching
|
|
# its NixOS configuration.
|
|
# Use this arg to destroy and restart the container instead.
|
|
#
|
|
# --no-destroy|-n
|
|
#
|
|
# By default, all commands destroy an existing container before starting and,
|
|
# when appropriate, before exiting.
|
|
# This ensures that containers start with no leftover filesystem state from
|
|
# previous runs and that containers don't consume system resources after use.
|
|
# This args disables auto-destructing containers.
|
|
#
|
|
#
|
|
# run-tests.sh container --run c systemctl status bitcoind
|
|
#
|
|
# Run a command in the shell session environmentand exit.
|
|
# Destroy the container afterwards.
|
|
# All arguments following `--run` are used as a command.
|
|
# Supports argument '--no-destroy|-n' (see above for an explanation).
|
|
#
|
|
# Example: Start shell inside container
|
|
# run-tests.sh container --run c
|
|
#
|
|
#
|
|
# run-tests.sh [--scenario|-s <scenario>] container --command|-c
|
|
#
|
|
# Provide a custom extra-container command.
|
|
#
|
|
# Example:
|
|
# run-tests.sh container --command create -s
|
|
# Create and start a container without a shell.
|
|
#
|
|
#
|
|
# All extra args are passed to extra-container (unless --command is used):
|
|
# run-tests.sh container --build-args --builders 'ssh://worker - - 8'
|
|
|
|
set -euo pipefail
|
|
|
|
export containerName=nb-test
|
|
containerCommand=shell
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--command|-c)
|
|
shift
|
|
containerCommand=$1
|
|
shift
|
|
;;
|
|
*)
|
|
break
|
|
esac
|
|
done
|
|
|
|
containerBin=$(type -P extra-container) || true
|
|
if [[ ! ($containerBin && $(realpath "$containerBin") == *extra-container-0.10*) ]]; then
|
|
echo
|
|
echo "Building extra-container. Skip this step by adding extra-container 0.10 to PATH."
|
|
nix-build --out-link /tmp/extra-container "$scriptDir"/../pkgs \
|
|
-A pinned.extra-container >/dev/null
|
|
# When this script is run as root, e.g. when run in an extra-container shell,
|
|
# chown the gcroot symlink to the regular (login) user so that the symlink can be
|
|
# overwritten when this script is run without root.
|
|
if [[ $EUID == 0 ]]; then
|
|
chown "$(logname):" --no-dereference /tmp/extra-container
|
|
fi
|
|
export PATH="/tmp/extra-container/bin${PATH:+:}$PATH"
|
|
fi
|
|
|
|
read -rd '' src <<EOF || true
|
|
((import "$scriptDir/tests.nix" {}).getTest "$scenario").container
|
|
EOF
|
|
exec extra-container "$containerCommand" -E "$src" "$@"
|