2020-09-27 10:43:28 +00:00
|
|
|
#!/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.
|
|
|
|
#
|
|
|
|
#
|
2020-12-19 12:08:37 +00:00
|
|
|
# run-tests.sh container --run c systemctl status bitcoind
|
2020-09-27 10:43:28 +00:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
#
|
|
|
|
#
|
2020-12-19 12:08:37 +00:00
|
|
|
# run-tests.sh [--scenario|-s <scenario>] container --command|-c
|
2020-09-27 10:43:28 +00:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
|
2022-10-22 17:37:58 +00:00
|
|
|
# These vars are set by ../run-tests.sh
|
|
|
|
: "${container:=}"
|
|
|
|
: "${scriptDir:=}"
|
|
|
|
|
2020-09-27 10:43:28 +00:00
|
|
|
containerCommand=shell
|
|
|
|
|
2022-08-16 19:00:00 +00:00
|
|
|
while [[ $# -gt 0 ]]; do
|
2020-09-27 10:43:28 +00:00
|
|
|
case $1 in
|
|
|
|
--command|-c)
|
|
|
|
shift
|
|
|
|
containerCommand=$1
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
break
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
containerBin=$(type -P extra-container) || true
|
2022-10-22 17:37:58 +00:00
|
|
|
if [[ ! ($containerBin && $(realpath "$containerBin") == *extra-container-0.11*) ]]; then
|
2022-10-22 17:37:49 +00:00
|
|
|
echo
|
2022-10-22 17:37:58 +00:00
|
|
|
echo "Building extra-container. Skip this step by adding extra-container 0.11 to PATH."
|
|
|
|
nix build --out-link /tmp/extra-container "$scriptDir"/..#extra-container
|
2022-10-22 17:37:49 +00:00
|
|
|
# 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
|
2020-09-27 10:43:28 +00:00
|
|
|
export PATH="/tmp/extra-container/bin${PATH:+:}$PATH"
|
|
|
|
fi
|
|
|
|
|
2022-10-22 17:37:58 +00:00
|
|
|
exec "$container"/bin/container "$containerCommand" "$@"
|