Menu
Public repository / 1812db66bd54bca3e7125b216a5a8a07efcd53c9
AkurAI-EC2 / tests/test_release_gates.sh
Latest change 1812db66bd54bca3e7125b216a5a8a07efcd53c9 - OLI-13: gate every release mode; clippy/test cover the workspace with --locked; Node projects use their own gates by Ólafur Búi Ólafsson
#!/usr/bin/env bash
# Release gates must cover every mode and every workspace member. Gate failures die before any
# network call, so no ssh stub is needed.
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
export CARGO_TARGET_DIR="$TMP/target"
mk_ws() { # dir: workspace whose ROOT package is clean and whose MEMBER has a clippy warning
mkdir -p "$1/member/src" "$1/src"
printf '[workspace]\nmembers=[".","member"]\n[package]\nname="root"\nversion="0.1.0"\nedition="2021"\n' > "$1/Cargo.toml"
printf 'fn main() {}\n' > "$1/src/main.rs"
printf '[package]\nname="member"\nversion="0.1.0"\nedition="2021"\n' > "$1/member/Cargo.toml"
printf 'pub fn f() { let _v = vec![1]; let x = 1; let _ = x == x; }\n' > "$1/member/src/lib.rs"
printf '1.0.0\n' > "$1/VERSION"
printf 'name = "gate-app"\ndomain = "-"\nport = 8199\nbuild = "true"\nartifact = "target/x"\ngate_fmt = false\ngate_test = false\n' > "$1/akurai-deploy.toml"
( cd "$1" && cargo generate-lockfile --offline >/dev/null 2>&1 )
}
mk_ws "$TMP/ws"
for m in publish update release; do
if out="$("$ROOT/bin/akurai-ec2" release --mode "$m" --yes -C "$TMP/ws" 2>&1)"; then
echo "FAIL: $m passed a workspace-member clippy warning"; echo "$out"; exit 1
fi
grep -q "clippy failed" <<<"$out" || { echo "FAIL: $m did not fail on clippy"; echo "$out"; exit 1; }
done
out="$("$ROOT/bin/akurai-ec2" release --mode publish --dry-run --skip-gates -C "$TMP/ws" 2>&1)"
grep -q "WARNING: --skip-gates" <<<"$out" || { echo "FAIL: --skip-gates gave no warning"; exit 1; }
mkdir -p "$TMP/node"
printf '{"scripts":{}}\n' > "$TMP/node/package.json"; printf '1.0.0\n' > "$TMP/node/VERSION"
printf 'name = "node-app"\ndomain = "-"\nport = 8198\nbuild = "true"\nartifact = "x"\ngate_test = true\n' > "$TMP/node/akurai-deploy.toml"
if out="$("$ROOT/bin/akurai-ec2" release --mode publish --yes -C "$TMP/node" 2>&1)"; then echo "FAIL: node app with gate_test and no test script passed"; exit 1; fi
grep -q 'no "test" script' <<<"$out" || { echo "FAIL: wrong node gate error"; echo "$out"; exit 1; }
echo "release gates test: PASS"