diff --git a/tests/lifecycle/run-gate.sh b/tests/lifecycle/run-gate.sh index fe1fad7f..4310e9b4 100755 --- a/tests/lifecycle/run-gate.sh +++ b/tests/lifecycle/run-gate.sh @@ -8,6 +8,9 @@ # Env: # ARCHY_ITERATIONS (default: 5) # ARCHY_FAIL_FAST=1 stop on first failed iteration +# ARCHY_GATE_CASCADE=1 after the 5× loop, run ONE cascade pass +# (uninstall→no-ghost→reinstall a throwaway +# app); requires ARCHY_ALLOW_DESTRUCTIVE=1 # plus everything run.sh / lib/rpc.bash respects # (ARCHY_PASSWORD, ARCHY_HOST, ARCHY_SCHEME, ARCHY_ALLOW_DESTRUCTIVE, # ARCHY_ALLOW_CASCADE_DESTRUCTIVE, ARCHY_ALLOW_NOAUTH) @@ -20,6 +23,10 @@ # Suggested release-gate invocation: # ARCHY_PASSWORD=password123 ARCHY_ALLOW_DESTRUCTIVE=1 \ # tests/lifecycle/run-gate.sh +# +# Release-gate WITH the cascade tier (uninstall/reinstall regression guard): +# ARCHY_PASSWORD=password123 ARCHY_ALLOW_DESTRUCTIVE=1 ARCHY_GATE_CASCADE=1 \ +# tests/lifecycle/run-gate.sh set -euo pipefail @@ -100,6 +107,27 @@ for i in $(seq 1 "$ITER"); do ./setup-teardown.sh done +# Optional CASCADE pass — uninstall → no-ghost → reinstall of a throwaway app +# (default grafana, via cascade-uninstall.bats). Run ONCE, not folded into the +# 5× loop on purpose: uninstall/reinstall every iteration would balloon runtime +# and re-pull images. One pass gates the #13 ghost / #14 reinstall-stop / +# uninstall-hang class (the bug fixed in 71cc9ac4). Opt-in so default gate +# behavior is unchanged; counts into the pass/fail tally. +if [[ "${ARCHY_GATE_CASCADE:-0}" == "1" && "${ARCHY_ALLOW_DESTRUCTIVE:-0}" == "1" ]]; then + echo + echo "═══ CASCADE pass (1×) ═══" + settle_stack + if ARCHY_ALLOW_CASCADE_DESTRUCTIVE=1 ./run.sh cascade-uninstall; then + passed=$((passed + 1)) + echo "── CASCADE: PASS ──" + else + failed=$((failed + 1)) + failures+=("cascade") + echo "── CASCADE: FAIL ──" + fi + ./setup-teardown.sh +fi + end=$(date +%s) echo