70 lines
2.4 KiB
Bash
Executable File
70 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
RUN_ID=AIOS-V2R1C2-PRODUCTION-20260722T011836Z
|
|
CONTROL=/data/aios-gitops/worktrees/controller/ops/aios-v2/v2r1c2-production-control.sh
|
|
REPO=/data/aios-gitops/repo.git
|
|
EVIDENCE_DIR=/var/lib/aios-gitops/acceptance/$RUN_ID
|
|
DRIVER=/data/aios-gitops/worktrees/controller/tools/run_online_smoke_18920.py
|
|
TEMP_SOURCE=
|
|
|
|
cleanup_temp() {
|
|
case "$TEMP_SOURCE" in
|
|
/tmp/aios-v2r1c2-production-acceptance.*)
|
|
test -d "$TEMP_SOURCE" && rm -rf -- "$TEMP_SOURCE"
|
|
;;
|
|
'') ;;
|
|
*) echo "refusing to remove unexpected temporary path: $TEMP_SOURCE" >&2; return 1 ;;
|
|
esac
|
|
}
|
|
|
|
rollback_on_error() {
|
|
code=$?
|
|
trap - ERR
|
|
AIOS_RELEASE_RUN_ID="$RUN_ID" "$CONTROL" rollback || true
|
|
cleanup_temp || true
|
|
exit "$code"
|
|
}
|
|
trap rollback_on_error ERR
|
|
|
|
AIOS_RELEASE_RUN_ID="$RUN_ID" "$CONTROL" promote
|
|
systemctl is-active --quiet aios-v2r1c2-production.service
|
|
! systemctl is-active --quiet aios-orchestrator-gateway.service
|
|
curl -fsS --max-time 10 http://127.0.0.1:18920/api/v2/health >"$EVIDENCE_DIR/health-after-promote.json"
|
|
curl -fsS --max-time 10 http://127.0.0.1:18921/api/v2/health >"$EVIDENCE_DIR/candidate-health-during-production.json"
|
|
|
|
TEMP_SOURCE=$(mktemp -d /tmp/aios-v2r1c2-production-acceptance.XXXXXX)
|
|
git --git-dir="$REPO" archive 8cdca463aff9707edee00e20a3b56884130f6978 | tar -x -C "$TEMP_SOURCE"
|
|
(
|
|
cd "$TEMP_SOURCE"
|
|
python3 tools/aios_v2r1c2_acceptance.py \
|
|
--source-oid 3dd622b5a515f1fa4ef72b9f8ae9ce48ac703f24 \
|
|
--online \
|
|
--base-url http://127.0.0.1:18920 \
|
|
--evidence-output "$EVIDENCE_DIR/production-acceptance.json"
|
|
)
|
|
python3 "$DRIVER" "$TEMP_SOURCE" "$EVIDENCE_DIR/production-online-smoke.json"
|
|
|
|
python3 - "$EVIDENCE_DIR/production-acceptance.json" "$EVIDENCE_DIR/production-online-smoke.json" <<'PY'
|
|
import json
|
|
import sys
|
|
for path in sys.argv[1:]:
|
|
with open(path, encoding='utf-8') as handle:
|
|
data = json.load(handle)
|
|
if data.get('passed') is not True:
|
|
raise SystemExit(f'acceptance failed: {path}')
|
|
PY
|
|
|
|
systemctl show aios-v2r1c2-production.service \
|
|
-p ActiveState -p SubState -p MainPID -p NRestarts \
|
|
>"$EVIDENCE_DIR/production-service-status.txt"
|
|
sha256sum "$EVIDENCE_DIR"/production-acceptance.json \
|
|
"$EVIDENCE_DIR"/production-online-smoke.json \
|
|
"$EVIDENCE_DIR"/health-after-promote.json \
|
|
>"$EVIDENCE_DIR/production-evidence.sha256"
|
|
|
|
cleanup_temp
|
|
TEMP_SOURCE=
|
|
trap - ERR
|
|
echo SWITCH_VALIDATED=PASS
|