568e613141
Local runs left most of the machine idle: the serial tail ran sixteen suites one at a time on otherwise-idle cores, the three platform legs were launched by hand (usually sequentially), and every container-leg object write crossed the virtiofs bind mount. - run-tests-parallel.sh tail scheduling in two phases: the FLEX suites (timing-shaped but free of the shared per-account daemon runtime namespace) run CBM_TAIL_JOBS-wide (default 2), then the EXCL group — daemon-family plus the suites that drive daemon one-shots or supervisor rendezvous — runs strictly sequentially on a machine exactly as quiet as the old fully-serial tail gave it. The wave was already fed longest-first by the shard dealing order, so the drain-out no longer ends on a heavy straggler. - ladder.sh: one maintained entry point for the full local push gate with the legs overlapped — lint, the Linux container suite, and the Windows VM suite in the background, the macOS suite in the foreground, one verdict per leg, logs kept per leg. A missing prerequisite fails its leg loudly instead of silently skipping. - win.sh test-par now runs through vm-run-tests.sh (--par mode): the full parallel harness under the CI-shaped protected temp root with complete output. It previously ran under the MSYS-shared /tmp and piped through `tail -25` — the same truncated-blindness class that hid 40 Windows failures from the `test` command. - docker-compose: build artifacts and the incremental fixture cache move to named volumes on the container VM's native filesystem. Object writes over the virtiofs bind mount are the container legs' largest avoidable I/O cost, and the fixture cache now survives across container runs. - test_mem(win): the first valid full-parallel VM run proved working-set trimming beats the re-touch mitigation (19 MB resident of a 256 MB double-touch at 18 parallel suites). The RSS probe now VirtualLocks a 64 MB span — locked pages are exempt from trimming, making the measurement pressure-immune — with bounded touch-and-sample retries when the lock is unavailable. Red-to-green under the same 18-job load. - cli: the portable install's staging error now appends the activation refusal note (predicate, SID, object) like the managed path already does — a bare "activation transaction I/O failed" on a CI-only failure is undiagnosable without it. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
63 lines
1.9 KiB
Bash
63 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# ladder.sh — the full local push gate, with all platform legs OVERLAPPED.
|
|
#
|
|
# The three platforms are separate scheduling domains (macOS native, the
|
|
# Colima container VM, the Windows UTM VM), so running their legs
|
|
# sequentially leaves most of the machine idle most of the time. This
|
|
# launches lint + the Linux container suite + the Windows VM suite in the
|
|
# background, runs the macOS full suite in the foreground, then joins and
|
|
# prints one verdict per leg. Each leg streams to its own log so a red leg
|
|
# can be inspected without rerunning anything.
|
|
#
|
|
# test-infrastructure/ladder.sh
|
|
#
|
|
# Prerequisites: Colima running (Linux/lint legs), the Windows VM
|
|
# provisioned and reachable (vm/provision-windows.sh). A missing
|
|
# prerequisite fails that leg loudly — never silently skips it.
|
|
set -uo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
LOGS="${CBM_LADDER_LOGS:-${TMPDIR:-/tmp}/cbm-ladder-$$}"
|
|
mkdir -p "$LOGS"
|
|
|
|
echo "=== local ladder: lint + linux + windows in background, mac in foreground ==="
|
|
echo "=== logs: $LOGS ==="
|
|
|
|
./test-infrastructure/run.sh lint > "$LOGS/lint.log" 2>&1 &
|
|
LINT_PID=$!
|
|
./test-infrastructure/run.sh test > "$LOGS/linux.log" 2>&1 &
|
|
LINUX_PID=$!
|
|
(./test-infrastructure/vm/win.sh sync &&
|
|
./test-infrastructure/vm/win.sh test-par) > "$LOGS/windows.log" 2>&1 &
|
|
WIN_PID=$!
|
|
|
|
scripts/test.sh 2>&1 | tee "$LOGS/mac.log"
|
|
MAC_RC=${PIPESTATUS[0]}
|
|
|
|
wait "$LINT_PID"
|
|
LINT_RC=$?
|
|
wait "$LINUX_PID"
|
|
LINUX_RC=$?
|
|
wait "$WIN_PID"
|
|
WIN_RC=$?
|
|
|
|
echo ""
|
|
echo "=== ladder verdicts ==="
|
|
overall=0
|
|
report() {
|
|
local leg="$1" rc="$2" log="$3"
|
|
if [ "$rc" -eq 0 ]; then
|
|
echo " PASS $leg"
|
|
else
|
|
echo " FAIL $leg (rc=$rc) — $log"
|
|
echo " ── last 15 lines ──"
|
|
tail -15 "$log" | sed 's/^/ /'
|
|
overall=1
|
|
fi
|
|
}
|
|
report "macOS " "$MAC_RC" "$LOGS/mac.log"
|
|
report "lint " "$LINT_RC" "$LOGS/lint.log"
|
|
report "linux " "$LINUX_RC" "$LOGS/linux.log"
|
|
report "windows " "$WIN_RC" "$LOGS/windows.log"
|
|
exit "$overall"
|