feat: sync lijiaoqiao implementation and staging validation artifacts
This commit is contained in:
59
scripts/ci/stage-gate-drill.sh
Executable file
59
scripts/ci/stage-gate-drill.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
FAIL_STAGE="${1:-G3}"
|
||||
DATE_TAG="${2:-$(date +%F)}"
|
||||
PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
OUT_DIR="$PROJECT_ROOT/reports/gates"
|
||||
mkdir -p "$OUT_DIR"
|
||||
LOG_FILE="$OUT_DIR/stage_gate_drill_${DATE_TAG}.log"
|
||||
|
||||
stages=(G0 G1 G2 G3 G4 G5)
|
||||
|
||||
: > "$LOG_FILE"
|
||||
|
||||
log() {
|
||||
echo "$1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "[INFO] stage gate drill start, fail_stage=$FAIL_STAGE, date=$DATE_TAG"
|
||||
pass_count=0
|
||||
failed=0
|
||||
failed_stage=""
|
||||
rollback_to=""
|
||||
|
||||
for s in "${stages[@]}"; do
|
||||
if [[ "$s" == "$FAIL_STAGE" ]]; then
|
||||
log "[FAIL] $s quality gate check failed: simulated contract drift"
|
||||
failed=1
|
||||
failed_stage="$s"
|
||||
break
|
||||
fi
|
||||
log "[PASS] $s quality gate check passed"
|
||||
pass_count=$((pass_count+1))
|
||||
done
|
||||
|
||||
if [[ $failed -eq 0 ]]; then
|
||||
log "[INFO] no failure injected; drill considered invalid"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
case "$failed_stage" in
|
||||
G0) rollback_to="G0" ;;
|
||||
G1) rollback_to="G0" ;;
|
||||
G2) rollback_to="G1" ;;
|
||||
G3) rollback_to="G2" ;;
|
||||
G4) rollback_to="G3" ;;
|
||||
G5) rollback_to="G4" ;;
|
||||
*) rollback_to="G0" ;;
|
||||
esac
|
||||
|
||||
log "[ACTION] rollback triggered: from $failed_stage to $rollback_to"
|
||||
log "[ACTION] freeze subsequent promotion stages"
|
||||
log "[ACTION] open corrective task with 24h SLA"
|
||||
log "[PASS] rollback drill complete"
|
||||
|
||||
echo "LOG_FILE=$LOG_FILE"
|
||||
echo "PASS_COUNT=$pass_count"
|
||||
echo "FAILED_STAGE=$failed_stage"
|
||||
echo "ROLLBACK_TO=$rollback_to"
|
||||
Reference in New Issue
Block a user