92 lines
3.8 KiB
Bash
Executable File
92 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
RELEASE_ROOT="${DOMAINCHECK_RELEASE_ROOT:-${ROOT_DIR}/release}"
|
|
LATEST_JSON_PATH="${RELEASE_ROOT}/latest_release.json"
|
|
FINAL_REPORT_PATH="${RELEASE_ROOT}/final_release_report.json"
|
|
|
|
if [[ ! -f "${LATEST_JSON_PATH}" ]]; then
|
|
echo "latest_release.json not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
python3 - "${LATEST_JSON_PATH}" "${FINAL_REPORT_PATH}" <<'PY'
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
latest_json_path = Path(sys.argv[1])
|
|
final_report_path = Path(sys.argv[2])
|
|
|
|
latest_payload = json.loads(latest_json_path.read_text(encoding="utf-8"))
|
|
final_payload = None
|
|
if final_report_path.exists():
|
|
final_payload = json.loads(final_report_path.read_text(encoding="utf-8"))
|
|
|
|
report_ok = None
|
|
report_matches_latest = None
|
|
report_package_name = ""
|
|
report_stale_reason = ""
|
|
final_release_ok = None
|
|
release_gate_decision = ""
|
|
release_gate_blocked_reasons = []
|
|
release_gate_verify_ok = None
|
|
release_gate_smoke_test_ok = None
|
|
|
|
if final_payload is not None:
|
|
report_ok = bool(final_payload.get("ok", False))
|
|
report_latest = final_payload.get("latest_release") if isinstance(final_payload, dict) else None
|
|
report_release_gate = final_payload.get("release_gate") if isinstance(final_payload, dict) else None
|
|
if isinstance(report_release_gate, dict):
|
|
release_gate_decision = str(report_release_gate.get("decision") or "").strip()
|
|
release_gate_blocked_reasons = [
|
|
str(item).strip()
|
|
for item in list(report_release_gate.get("blocked_reasons") or [])
|
|
if str(item).strip()
|
|
]
|
|
if "verify_ok" in report_release_gate:
|
|
release_gate_verify_ok = bool(report_release_gate.get("verify_ok"))
|
|
if "smoke_test_ok" in report_release_gate:
|
|
release_gate_smoke_test_ok = bool(report_release_gate.get("smoke_test_ok"))
|
|
if isinstance(report_latest, dict):
|
|
report_package_name = str(report_latest.get("package_name") or "").strip()
|
|
latest_package_name = str(latest_payload.get("package_name") or "").strip()
|
|
report_archive_path = str(report_latest.get("archive_path") or report_latest.get("zip_path") or "").strip()
|
|
latest_archive_path = str(latest_payload.get("archive_path") or latest_payload.get("zip_path") or "").strip()
|
|
report_sha256 = str(report_latest.get("sha256") or "").strip().lower()
|
|
latest_sha256 = str(latest_payload.get("sha256") or "").strip().lower()
|
|
|
|
mismatches = []
|
|
if report_package_name != latest_package_name:
|
|
mismatches.append("package_name")
|
|
if report_archive_path != latest_archive_path:
|
|
mismatches.append("archive_path")
|
|
if report_sha256 != latest_sha256:
|
|
mismatches.append("sha256")
|
|
|
|
report_matches_latest = not mismatches
|
|
if mismatches:
|
|
report_stale_reason = "final_release_report does not match latest_release: " + ", ".join(mismatches)
|
|
else:
|
|
report_matches_latest = False
|
|
report_stale_reason = "final_release_report.latest_release missing"
|
|
|
|
final_release_ok = report_ok and report_matches_latest
|
|
|
|
summary = {
|
|
"latest_release": latest_payload,
|
|
"final_release_ok": final_release_ok,
|
|
"final_release_report": "" if final_payload is None else str(final_report_path),
|
|
"final_release_report_ok": report_ok,
|
|
"final_release_report_matches_latest": report_matches_latest,
|
|
"final_release_report_package_name": report_package_name,
|
|
"final_release_report_stale_reason": report_stale_reason,
|
|
"final_release_gate_decision": release_gate_decision,
|
|
"final_release_gate_blocked_reasons": release_gate_blocked_reasons,
|
|
"final_release_gate_verify_ok": release_gate_verify_ok,
|
|
"final_release_gate_smoke_test_ok": release_gate_smoke_test_ok,
|
|
}
|
|
print(json.dumps(summary, ensure_ascii=False, indent=2))
|
|
PY
|