#!/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