ci: Update ci/run-docker.sh to match libm

Prepare for having the repositories combined by ensuring EMULATED,
RUST_BACKTRACE, and CI are set or forwarded as applicable. Also
re-indent the file to four spaces and do some reorganization.
This commit is contained in:
Trevor Gross 2025-04-19 04:55:59 +00:00 committed by Trevor Gross
parent 01c5888246
commit b0d6024f20

View file

@ -5,88 +5,102 @@
set -euxo pipefail
host_arch="$(uname -m | sed 's/arm64/aarch64/')"
run() {
local target="$1"
echo "TESTING TARGET: $target"
echo "testing target: $target"
emulated=""
target_arch="$(echo "$target" | cut -d'-' -f1)"
if [ "$target_arch" != "$host_arch" ]; then
emulated=1
echo "target is emulated"
fi
# This directory needs to exist before calling docker, otherwise docker will create it but it
# will be owned by root
mkdir -p target
run_cmd="HOME=/tmp"
if [ "${GITHUB_ACTIONS:-}" = "true" ]; then
# Enable Docker image caching on GHA
build_cmd=("buildx" "build")
build_args=(
"--cache-from" "type=local,src=/tmp/.buildx-cache"
"--cache-to" "type=local,dest=/tmp/.buildx-cache-new"
# This is the beautiful bash syntax for expanding an array but neither
# raising an error nor returning an empty string if the array is empty.
"${build_args[@]:+"${build_args[@]}"}"
"--load"
)
fi
if [ "$(uname -s)" = "Linux" ] && [ -z "${DOCKER_BASE_IMAGE:-}" ]; then
# Share the host rustc and target. Do this only on Linux and if the image
# isn't overridden
run_args=(
--user "$(id -u):$(id -g)"
-e "CARGO_HOME=/cargo"
-v "${HOME}/.cargo:/cargo"
-v "$(pwd)/target:/builtins-target"
-v "$(rustc --print sysroot):/rust:ro"
)
run_cmd="HOME=/tmp PATH=\$PATH:/rust/bin ci/run.sh $target"
# Share the host rustc and target. Do this only on Linux and if the image
# isn't overridden
run_args=(
--user "$(id -u):$(id -g)"
-e "CARGO_HOME=/cargo"
-v "${HOME}/.cargo:/cargo"
-v "$(pwd)/target:/builtins-target"
-v "$(rustc --print sysroot):/rust:ro"
)
run_cmd="$run_cmd PATH=\$PATH:/rust/bin"
else
# Use rustc provided by a docker image
docker volume create compiler-builtins-cache
build_args=(
"--build-arg" "IMAGE=${DOCKER_BASE_IMAGE:-rustlang/rust:nightly}"
)
run_args=(
-v "compiler-builtins-cache:/builtins-target"
)
run_cmd="HOME=/tmp USING_CONTAINER_RUSTC=1 ci/run.sh $target"
# Use rustc provided by a docker image
docker volume create compiler-builtins-cache
build_args=(
"--build-arg" "IMAGE=${DOCKER_BASE_IMAGE:-rustlang/rust:nightly}"
)
run_args=(-v "compiler-builtins-cache:/builtins-target")
run_cmd="$run_cmd HOME=/tmp" "USING_CONTAINER_RUSTC=1"
fi
if [ -d compiler-rt ]; then
export RUST_COMPILER_RT_ROOT="/checkout/compiler-rt"
export RUST_COMPILER_RT_ROOT="/checkout/compiler-rt"
fi
if [ "${GITHUB_ACTIONS:-}" = "true" ]; then
# Enable Docker image caching on GHA
build_cmd=("buildx" "build")
build_args=(
"--cache-from" "type=local,src=/tmp/.buildx-cache"
"--cache-to" "type=local,dest=/tmp/.buildx-cache-new"
# This is the beautiful bash syntax for expanding an array but neither
# raising an error nor returning an empty string if the array is empty.
"${build_args[@]:+"${build_args[@]}"}"
"--load"
)
fi
run_cmd="$run_cmd ci/run.sh $target"
docker "${build_cmd[@]:-build}" \
-t "builtins-$target" \
"${build_args[@]:-}" \
"ci/docker/$target"
-t "builtins-$target" \
"${build_args[@]:-}" \
"ci/docker/$target"
docker run \
--rm \
-e RUST_COMPILER_RT_ROOT \
-e RUSTFLAGS \
-e "CARGO_TARGET_DIR=/builtins-target" \
-v "$(pwd):/checkout:ro" \
-w /checkout \
"${run_args[@]:-}" \
--init \
"builtins-$target" \
sh -c "$run_cmd"
--rm \
-e CI \
-e CARGO_TARGET_DIR=/builtins-target \
-e CARGO_TERM_COLOR \
-e RUSTFLAGS \
-e RUST_BACKTRACE \
-e RUST_COMPILER_RT_ROOT \
-e "EMULATED=$emulated" \
-v "$(pwd):/checkout:ro" \
-w /checkout \
"${run_args[@]:-}" \
--init \
"builtins-$target" \
sh -c "$run_cmd"
}
if [ "${1:-}" = "--help" ] || [ "$#" -gt 1 ]; then
set +x
echo "\
set +x
echo "\
usage: ./ci/run-docker.sh [target]
you can also set DOCKER_BASE_IMAGE to use something other than the default
ubuntu:24.04 (or rustlang/rust:nightly).
"
exit
"
exit
fi
if [ -z "${1:-}" ]; then
for d in ci/docker/*; do
run $(basename "$d")
done
for d in ci/docker/*; do
run $(basename "$d")
done
else
run "$1"
run "$1"
fi