![Tom Alexander](/assets/img/avatar_default.png)
Since we're using docker volumes to cache the build, the extra build cost will only be paid once but the extra speed will be nice while investigating.
112 lines
3.5 KiB
Bash
Executable File
112 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
: ${SHELL:="NO"} # or YES to launch a shell instead of running the test
|
|
: ${TRACE:="NO"} # or YES to send traces to jaeger
|
|
: ${BACKTRACE:="NO"} # or YES to print a rust backtrace when panicking
|
|
: ${NO_COLOR:=""} # Set to anything to disable color output
|
|
: ${PROFILE:="release-lto"}
|
|
|
|
REALPATH=$(command -v uu-realpath || command -v realpath)
|
|
MAKE=$(command -v gmake || command -v make)
|
|
|
|
############## Setup #########################
|
|
|
|
function die {
|
|
local status_code="$1"
|
|
shift
|
|
(>&2 echo "${@}")
|
|
exit "$status_code"
|
|
}
|
|
|
|
function log {
|
|
(>&2 echo "${@}")
|
|
}
|
|
|
|
############## Program #########################
|
|
|
|
function main {
|
|
build_container
|
|
launch_container "${@}"
|
|
}
|
|
|
|
function build_container {
|
|
$MAKE -C "$DIR/../docker/organic_test"
|
|
}
|
|
|
|
function launch_container {
|
|
local additional_flags=()
|
|
local features=(compare)
|
|
|
|
if [ "$NO_COLOR" != "" ]; then
|
|
additional_flags+=(--env "NO_COLOR=$NO_COLOR")
|
|
fi
|
|
|
|
if [ "$TRACE" = "YES" ]; then
|
|
# We use the host network so it can talk to jaeger hosted at 127.0.0.1
|
|
additional_flags+=(--network=host --env RUST_LOG=debug)
|
|
features+=(tracing)
|
|
fi
|
|
|
|
if [ "$SHELL" != "YES" ]; then
|
|
additional_flags+=(--read-only)
|
|
else
|
|
additional_flags+=(-t)
|
|
fi
|
|
|
|
if [ "$BACKTRACE" = "YES" ]; then
|
|
additional_flags+=(--env RUST_BACKTRACE=full)
|
|
fi
|
|
|
|
if [ "$SHELL" = "YES" ]; then
|
|
exec docker run "${additional_flags[@]}" --init --rm -i --mount type=tmpfs,destination=/tmp -v "/:/input:ro" -v "$($REALPATH "$DIR/../"):/source:ro" --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source --entrypoint "" organic-test /bin/sh
|
|
fi
|
|
|
|
local features_joined
|
|
features_joined=$(IFS=","; echo "${features[*]}")
|
|
|
|
local build_flags=()
|
|
if [ "$PROFILE" = "dev" ] || [ "$PROFILE" = "debug" ]; then
|
|
PROFILE="debug"
|
|
else
|
|
build_flags+=(--profile "$PROFILE")
|
|
fi
|
|
|
|
|
|
if [ $# -gt 0 ]; then
|
|
# If we passed in args, we need to forward them along
|
|
for path in "${@}"; do
|
|
local full_path
|
|
full_path=$($REALPATH "$path")
|
|
init_script=$(cat <<EOF
|
|
set -euo pipefail
|
|
IFS=\$'\n\t'
|
|
|
|
cargo build --bin compare --no-default-features --features "$features_joined" ${build_flags[@]}
|
|
exec /target/${PROFILE}/compare "/input${full_path}"
|
|
EOF
|
|
)
|
|
docker run "${additional_flags[@]}" --init --rm -i --mount type=tmpfs,destination=/tmp -v "/:/input:ro" -v "$($REALPATH "$DIR/../"):/source:ro" --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source --entrypoint "" organic-test sh -c "$init_script"
|
|
done
|
|
else
|
|
local current_directory init_script
|
|
current_directory=$(pwd)
|
|
init_script=$(cat <<EOF
|
|
set -euo pipefail
|
|
IFS=\$'\n\t'
|
|
|
|
cargo build --bin compare --no-default-features --features "$features_joined" ${build_flags[@]}
|
|
cd /input${current_directory}
|
|
exec /target/${PROFILE}/compare
|
|
EOF
|
|
)
|
|
|
|
docker run "${additional_flags[@]}" --init --rm -i --mount type=tmpfs,destination=/tmp -v "/:/input:ro" -v "$($REALPATH "$DIR/../"):/source:ro" --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source --entrypoint "" organic-test sh -c "$init_script"
|
|
fi
|
|
}
|
|
|
|
main "${@}"
|