Files
getDomain/show_latest_release.sh
2026-04-18 23:52:51 +08:00

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