Files
2026-10-18 15:22:02 -05:00

42 lines
2.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Row 125 (#1619) gate on the candidate worktree. Slot work: run only on Sage's go.
# gate.sh <worktree> <outdir> <manifest>
# 1. each candidate test file alone; 2. every package's tests; 3. the script suites (test-task uses
# Docker, under project dewey-r125). Logs kept; summary.txt has one line per run, totals by awk.
set -uo pipefail
WT=$(realpath -e "${1:?worktree}") || exit 2
OUT=$(realpath -m "${2:?outdir}")
MANIFEST=$(realpath -e "${3:?manifest}") || exit 2
export TMPDIR=$HOME/dewey-scratch/tmp/lt COMPOSE_PROJECT_NAME=dewey-r125
mkdir -p "$TMPDIR" "$OUT" || { echo "abort: cannot create $TMPDIR or $OUT"; exit 2; }
cd "$WT" || exit 2
cleanup() {
if command -v docker >/dev/null 2>&1; then
n=$(docker ps -aq --filter label=com.docker.compose.project=dewey-r125 | wc -l)
echo "containers left under dewey-r125: $n" >> "$OUT/summary.txt"
if docker network inspect dewey-r125_default >/dev/null 2>&1; then
docker network rm dewey-r125_default >/dev/null 2>&1 || echo "could not remove network dewey-r125_default" >> "$OUT/summary.txt"
fi
fi
sha256sum --quiet -c "$MANIFEST" || echo "MANIFEST MISMATCH after gate" >> "$OUT/summary.txt"
}
trap cleanup EXIT
sha256sum --quiet -c "$MANIFEST" || { echo "abort: candidate differs from $MANIFEST"; exit 2; }
git -C "$WT" rev-parse HEAD > "$OUT/base.txt" || exit 2
: > "$OUT/summary.txt"
run() { # run <name> <command...>
local name=$1; shift
setsid -w timeout -k 10 1800 "$@" > "$OUT/$name.log" 2>&1 < /dev/null; local rc=$?
echo "$name rc=$rc :: $(awk '/^ℹ (tests|pass|fail|skipped) [0-9]+$/ {printf "%s %s ", $2, $3}' "$OUT/$name.log")" >> "$OUT/summary.txt"
}
for f in $(grep -E '\.test\.mjs$' <(awk '{print $2}' "$MANIFEST")); do run "single-$(echo "$f" | tr / _)" node --test --test-reporter=spec "$f"; done
for p in packages/*/; do p=${p%/}; [ -d "$p/tests" ] && run "pkg-${p#packages/}" node --test "$p/tests/"; done
for s in scripts/test-*.sh; do run "$(basename "$s" .sh)" bash "$s"; done
echo DONE >> "$OUT/summary.txt"
# Totals over the package runs only (the singles repeat them).
awk '/^pkg-/ { for (i = 1; i <= NF; i++) if ($i ~ /^(tests|pass|fail|skipped)$/) t[$i] += $(i+1) }
END { printf "package totals: tests %d pass %d fail %d skipped %d\n", t["tests"], t["pass"], t["fail"], t["skipped"] }' "$OUT/summary.txt" >> "$OUT/summary.txt"
grep -q ' rc=[1-9]' "$OUT/summary.txt" && exit 1 || exit 0