Files
Jacky 719ce60b51
CI / test (pull_request) Successful in 5m53s
PR合并自动部署 / release-check (pull_request) Failing after 7s
PR合并自动部署 / deploy (pull_request) Skipped
style: align context check with Ruff
2026-09-28 23:20:42 +08:00

48 lines
1.5 KiB
Python

#!/usr/bin/env python3
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
CAPSULE_FILE = ROOT / "context" / "capsule.json"
MANIFEST_FILE = ROOT / "context" / "manifest.json"
def fail(message):
raise SystemExit(f"context_check_error={message}")
try:
capsule = json.loads(CAPSULE_FILE.read_text(encoding="utf-8"))
manifest = json.loads(MANIFEST_FILE.read_text(encoding="utf-8"))
except (OSError, json.JSONDecodeError) as error:
fail(f"invalid_capsule:{error}")
if (
capsule.get("schema") != 1
or capsule.get("kind") != "jcm.repository-capsule"
or capsule.get("repository", {}).get("id") != "hulumath"
or capsule.get("repository", {}).get("remote") != "Jacky/Hulumath-Web"
):
fail("invalid_identity")
if (
manifest.get("schema_version") != "2.0.0"
or manifest.get("repository", {}).get("name") != "Hulumath-Web"
or "context/capsule.json" not in manifest.get("read_order", [])
):
fail("invalid_manifest")
paths = [
capsule.get("context", {}).get("entrypoint"),
*capsule.get("context", {}).get("read_order", []),
*capsule.get("current_state", {}).get("evidence", []),
*[fact.get("evidence") for fact in capsule.get("facts", [])],
]
for relative in paths:
if not relative or Path(relative).is_absolute() or ".." in Path(relative).parts:
fail(f"unsafe_path:{relative}")
if not (ROOT / relative).is_file():
fail(f"missing_path:{relative}")
print("context_check=ok")