blob: 69b0d4e9e810a7d42817d41aa721e3fc994c22b4 [file] [edit]
#!/usr/bin/env bash
# This script runs the provided command in the Docker container corresponding to the currently
# checked-in image id.
readonly SCRIPTS_DIR="$(dirname "$0")"
# shellcheck source=scripts/common
source "$SCRIPTS_DIR/common"
mkdir -p './bazel-cache'
mkdir -p './cargo-cache'
docker_run_flags=(
'--rm'
'--tty'
'--env=TERM=xterm-256color'
'--env=BAZEL_REMOTE_CACHE_ENABLED'
'--env=BAZEL_GOOGLE_CREDENTIALS'
'--env=OAK_KVM_TESTS'
'--env=RUST_BACKTRACE'
'--env=RUST_LOGS'
"--volume=$PWD/bazel-cache:/home/docker/.cache/bazel"
"--volume=$PWD/cargo-cache:/home/docker/.cargo"
"--volume=$PWD:/workspace"
# Enable Docker-in-Docker by giving the container access to the host docker
# daemon.
"--volume=$XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock"
# The container uses the host docker daemon, so docker commands running in
# the container actually access the host filesystem. Thus mount the /tmp
# directory as a volume in the container so that it can access the outputs of
# docker commands that write to /tmp.
'--volume=/tmp:/tmp'
'--volume=/dev/log:/dev/log'
# Provide readonly access to the kernel image and kernel volumes of the host
# to enable virt-make-fs which requires access to a kernel.
'--volume=/boot:/boot:ro'
'--volume=/lib/modules:/lib/modules:ro'
'--workdir=/workspace'
'--network=host'
'--security-opt=seccomp=unconfined'
)
# If the host supports KVM, allow the docker image to use it.
if [[ -e "/dev/kvm" ]]; then
readonly HOST_KVM_GID="$(getent group kvm | cut -d: -f3)"
docker_run_flags+=(
"--device=/dev/kvm"
"--env=HOST_KVM_GID=${HOST_KVM_GID}"
)
fi
# If the host supports virtio vhost vsock, allow the docker image to use it.
if [[ -e "/dev/vhost-vsock" ]]; then
docker_run_flags+=(
"--device=/dev/vhost-vsock"
)
fi
# If the host supports the vsock device, allow the docker image to use it.
if [[ -e "/dev/vsock" ]]; then
docker_run_flags+=(
"--device=/dev/vsock"
)
fi
# Some CI systems (GitHub actions) do not run with an interactive TTY attached.
if [[ -z "${CI:-}" ]]; then
docker_run_flags+=('--interactive')
fi
# Run the provided command.
docker run "${docker_run_flags[@]}" "$DOCKER_IMAGE_ID" "$@"