Files
xjx c895301268 Implement engineering speedup architecture (#16)
Land the B0/M0-M5/E0-E4/P0-P3 engineering-speedup control plane, including exact Swift caching, measured engineering metrics, canonical Rust identity validation, deterministic test isolation, proof fallback/promotion, and supporting architecture splits.\n\nRelease validation and dispatch are intentionally deferred to the next release.
2026-08-12 21:25:00 +08:00

409 lines
16 KiB
Python
Executable File

#!/usr/bin/env python3
"""Create and validate source proof reused by the GitHub Release workflow."""
from __future__ import annotations
import argparse
import hashlib
import json
import os
import pathlib
import re
import stat
import subprocess
import sys
import tempfile
from typing import Any
SCHEMA_VERSION = "apc.release-source-proof.v3"
WORKFLOW_PATH = ".github/workflows/ci.yml"
MAIN_WORKFLOW_EVENTS = {"push", "workflow_dispatch"}
EXPECTED_GATES = [
"bundle",
"macos-contracts",
"macos-platform",
"overlay",
"portable-contracts",
"rust-lint",
"rust-test-build",
"rust-test-proof",
"rust-tests",
"static",
"stress",
"swift-interaction",
]
TOOLCHAIN_CONTRACT_FILES = [
"Cargo.lock",
"apps/macos/Package.resolved",
"apps/macos/Package.swift",
"rust-toolchain.toml",
"script/validate_macos_build_contract.py",
]
COMMIT_PATTERN = re.compile(r"[0-9a-f]{40}")
DIGEST_PATTERN = re.compile(r"[0-9a-f]{64}")
REPOSITORY_PATTERN = re.compile(r"[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+")
TAG_PATTERN = re.compile(r"v[0-9]+[.][0-9]+[.][0-9]+")
PULL_REQUEST_REF_PATTERN = re.compile(r"refs/pull/[1-9][0-9]*/merge")
def run(root: pathlib.Path, *command: str) -> str:
return subprocess.check_output(command, cwd=root, text=True).strip()
def sha256(path: pathlib.Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for block in iter(lambda: handle.read(1024 * 1024), b""):
digest.update(block)
return digest.hexdigest()
def contract_digest(root: pathlib.Path) -> str:
digest = hashlib.sha256()
for relative in TOOLCHAIN_CONTRACT_FILES:
path = root / relative
metadata = path.lstat()
if not stat.S_ISREG(metadata.st_mode) or path.is_symlink():
raise ValueError(f"toolchain contract entry is not a regular file: {relative}")
digest.update(relative.encode("utf-8"))
digest.update(b"\0")
digest.update(path.read_bytes())
digest.update(b"\0")
return digest.hexdigest()
def read_json_regular(path: pathlib.Path) -> dict[str, Any]:
try:
descriptor = os.open(path, os.O_RDONLY | os.O_CLOEXEC | os.O_NOFOLLOW)
except OSError as error:
raise ValueError(f"proof input must be a regular, non-symlink file: {path.name}") from error
try:
metadata = os.fstat(descriptor)
if not stat.S_ISREG(metadata.st_mode) or metadata.st_size > 1024 * 1024:
raise ValueError(f"proof input is not a bounded regular file: {path.name}")
with os.fdopen(descriptor, encoding="utf-8") as handle:
descriptor = -1
payload = json.load(handle)
finally:
if descriptor >= 0:
os.close(descriptor)
if not isinstance(payload, dict):
raise ValueError(f"proof input must contain one JSON object: {path.name}")
return payload
def require_identity(repository: str, commit: str, previous_release_tag: str) -> None:
if REPOSITORY_PATTERN.fullmatch(repository) is None:
raise ValueError("repository must be owner/name")
if COMMIT_PATTERN.fullmatch(commit) is None:
raise ValueError("commit must be a full lowercase Git commit")
if TAG_PATTERN.fullmatch(previous_release_tag) is None:
raise ValueError("previous release tag must be vX.Y.Z")
def validate_attestation(
root: pathlib.Path, attestation: pathlib.Path, commit: str
) -> dict[str, Any]:
subprocess.run(
[
str(root / "script/validate_interaction_attestation.py"),
str(attestation),
"--root",
str(root),
"--expected-build-id",
f"source.{commit}",
],
cwd=root,
check=True,
)
return read_json_regular(attestation)
def observed_toolchains(root: pathlib.Path) -> dict[str, str]:
commands = {
"rustc": ("rustc", "-Vv"),
"swift": ("swift", "--version"),
"python": ("python3", "--version"),
"sdk": ("xcrun", "--show-sdk-version"),
}
values: dict[str, str] = {}
for name, command in commands.items():
value = subprocess.check_output(
command, cwd=root, text=True, stderr=subprocess.STDOUT
).strip()
if not value or len(value) > 4096:
raise ValueError(f"observed {name} toolchain identity is invalid")
values[name] = value
return values
def atomic_write_json(path: pathlib.Path, payload: dict[str, Any]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
descriptor, temporary_name = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent)
try:
os.fchmod(descriptor, 0o644)
with os.fdopen(descriptor, "w", encoding="utf-8") as handle:
json.dump(payload, handle, sort_keys=True, separators=(",", ":"))
handle.write("\n")
handle.flush()
os.fsync(handle.fileno())
os.replace(temporary_name, path)
finally:
try:
os.unlink(temporary_name)
except FileNotFoundError:
pass
def create(args: argparse.Namespace) -> None:
root = args.root.resolve()
require_identity(args.repository, args.commit, args.previous_release_tag)
if args.run_id <= 0 or args.run_attempt <= 0:
raise ValueError("run id and run attempt must be positive")
if args.workflow_event not in MAIN_WORKFLOW_EVENTS:
raise ValueError("workflow event must be push or workflow_dispatch")
if run(root, "git", "rev-parse", "HEAD") != args.commit:
raise ValueError("proof checkout does not match the requested commit")
if run(root, "git", "status", "--porcelain", "--untracked-files=no"):
raise ValueError("proof checkout contains tracked modifications")
attestation = args.attestation.resolve()
attestation_payload = validate_attestation(root, attestation, args.commit)
validation_mode = getattr(args, "validation_mode", "full")
validation_commit = getattr(args, "validation_commit", None) or args.commit
validation_run_id = getattr(args, "validation_run_id", None) or args.run_id
validation_run_attempt = (
getattr(args, "validation_run_attempt", None) or args.run_attempt
)
validation_ref = getattr(args, "validation_ref", None) or "refs/heads/main"
validation_proof_sha256 = getattr(args, "validation_proof_sha256", None) or None
if validation_mode not in {"full", "promoted"}:
raise ValueError("validation mode must be full or promoted")
if COMMIT_PATTERN.fullmatch(validation_commit) is None:
raise ValueError("validation commit must be a full lowercase Git commit")
if validation_run_id <= 0 or validation_run_attempt <= 0:
raise ValueError("validation run id and attempt must be positive")
if validation_mode == "full":
if (
validation_commit != args.commit
or validation_run_id != args.run_id
or validation_run_attempt != args.run_attempt
or validation_ref != "refs/heads/main"
or validation_proof_sha256 is not None
):
raise ValueError("full validation must be the current main validation run")
validation_event = args.workflow_event
else:
if (
validation_commit == args.commit
or PULL_REQUEST_REF_PATTERN.fullmatch(validation_ref) is None
or not isinstance(validation_proof_sha256, str)
or DIGEST_PATTERN.fullmatch(validation_proof_sha256) is None
):
raise ValueError("promoted validation must identify a PR merge commit")
validation_event = "pull_request"
source_tree = run(root, "git", "rev-parse", "HEAD^{tree}")
payload: dict[str, Any] = {
"schema_version": SCHEMA_VERSION,
"repository": args.repository,
"commit": args.commit,
"source_tree": source_tree,
"previous_release_tag": args.previous_release_tag,
"workflow_path": WORKFLOW_PATH,
"workflow_event": args.workflow_event,
"workflow_ref": "refs/heads/main",
"run_id": args.run_id,
"run_attempt": args.run_attempt,
"gates": EXPECTED_GATES,
"validation": {
"mode": validation_mode,
"commit": validation_commit,
"source_tree": source_tree,
"workflow_event": validation_event,
"workflow_ref": validation_ref,
"run_id": validation_run_id,
"run_attempt": validation_run_attempt,
"proof_sha256": validation_proof_sha256,
},
"toolchain_contract_digest": contract_digest(root),
"observed_toolchains": observed_toolchains(root),
"interaction_attestation_sha256": sha256(attestation),
"interaction_contract_digest": attestation_payload.get(
"interaction_contract_digest"
),
"ok": True,
}
atomic_write_json(args.output.resolve(), payload)
def validate(args: argparse.Namespace) -> None:
root = args.root.resolve()
require_identity(args.repository, args.commit, args.previous_release_tag)
if run(root, "git", "rev-parse", "HEAD") != args.commit:
raise ValueError("proof validation checkout does not match the requested commit")
if run(root, "git", "status", "--porcelain", "--untracked-files=no"):
raise ValueError("proof validation checkout contains tracked modifications")
if args.workflow_event not in MAIN_WORKFLOW_EVENTS:
raise ValueError("workflow event must be push or workflow_dispatch")
proof = read_json_regular(args.proof.resolve())
expected_keys = {
"schema_version",
"repository",
"commit",
"source_tree",
"previous_release_tag",
"workflow_path",
"workflow_event",
"workflow_ref",
"run_id",
"run_attempt",
"gates",
"validation",
"toolchain_contract_digest",
"observed_toolchains",
"interaction_attestation_sha256",
"interaction_contract_digest",
"ok",
}
if set(proof) != expected_keys:
raise ValueError("source proof field inventory is invalid")
checks = {
"schema_version": SCHEMA_VERSION,
"repository": args.repository,
"commit": args.commit,
"source_tree": run(root, "git", "rev-parse", "HEAD^{tree}"),
"previous_release_tag": args.previous_release_tag,
"workflow_path": WORKFLOW_PATH,
"workflow_event": args.workflow_event,
"workflow_ref": "refs/heads/main",
"run_id": args.run_id,
"run_attempt": args.run_attempt,
"gates": EXPECTED_GATES,
"toolchain_contract_digest": contract_digest(root),
"ok": True,
}
for key, expected in checks.items():
if proof.get(key) != expected:
raise ValueError(f"source proof {key} does not match the release request")
validation = proof.get("validation")
validation_keys = {
"mode",
"commit",
"source_tree",
"workflow_event",
"workflow_ref",
"run_id",
"run_attempt",
"proof_sha256",
}
if not isinstance(validation, dict) or set(validation) != validation_keys:
raise ValueError("source proof validation provenance is invalid")
mode = validation.get("mode")
if validation.get("source_tree") != checks["source_tree"]:
raise ValueError("source proof validation tree does not match the release tree")
if mode == "full":
expected_validation = {
"mode": "full",
"commit": args.commit,
"source_tree": checks["source_tree"],
"workflow_event": args.workflow_event,
"workflow_ref": "refs/heads/main",
"run_id": args.run_id,
"run_attempt": args.run_attempt,
"proof_sha256": None,
}
if validation != expected_validation:
raise ValueError("full source validation provenance is invalid")
elif mode == "promoted":
validation_commit = validation.get("commit")
validation_run_id = validation.get("run_id")
validation_run_attempt = validation.get("run_attempt")
validation_ref = validation.get("workflow_ref")
validation_proof_sha256 = validation.get("proof_sha256")
if (
not isinstance(validation_commit, str)
or COMMIT_PATTERN.fullmatch(validation_commit) is None
or validation_commit == args.commit
or validation.get("workflow_event") != "pull_request"
or not isinstance(validation_ref, str)
or PULL_REQUEST_REF_PATTERN.fullmatch(validation_ref) is None
or not isinstance(validation_run_id, int)
or validation_run_id <= 0
or not isinstance(validation_run_attempt, int)
or validation_run_attempt <= 0
or not isinstance(validation_proof_sha256, str)
or DIGEST_PATTERN.fullmatch(validation_proof_sha256) is None
):
raise ValueError("promoted source validation provenance is invalid")
else:
raise ValueError("source proof validation mode is invalid")
observed = proof.get("observed_toolchains")
if not isinstance(observed, dict) or set(observed) != {"rustc", "swift", "python", "sdk"}:
raise ValueError("source proof observed toolchain inventory is invalid")
if any(not isinstance(value, str) or not value or len(value) > 4096 for value in observed.values()):
raise ValueError("source proof contains an invalid observed toolchain identity")
attestation = args.attestation.resolve()
proof_path = args.proof.resolve()
if proof_path.parent != attestation.parent:
raise ValueError("source proof files must share one artifact directory")
inventory = []
for child in proof_path.parent.iterdir():
metadata = child.lstat()
if not stat.S_ISREG(metadata.st_mode) or child.is_symlink():
raise ValueError("source proof artifact contains a non-regular entry")
inventory.append(child.name)
if sorted(inventory) != ["interaction-attestation.json", "source-proof.json"]:
raise ValueError("source proof artifact inventory must contain exactly two files")
attestation_payload = validate_attestation(root, attestation, args.commit)
if proof.get("interaction_attestation_sha256") != sha256(attestation):
raise ValueError("source proof interaction attestation digest is invalid")
if proof.get("interaction_contract_digest") != attestation_payload.get(
"interaction_contract_digest"
):
raise ValueError("source proof interaction contract digest is invalid")
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument(
"--root", type=pathlib.Path, default=pathlib.Path(__file__).resolve().parent.parent
)
subparsers = parser.add_subparsers(dest="command", required=True)
for name in ("create", "validate"):
command = subparsers.add_parser(name)
command.add_argument("--repository", required=True)
command.add_argument("--commit", required=True)
command.add_argument("--previous-release-tag", required=True)
command.add_argument("--run-id", required=True, type=int)
command.add_argument("--run-attempt", required=True, type=int)
command.add_argument(
"--workflow-event", required=True, choices=sorted(MAIN_WORKFLOW_EVENTS)
)
command.add_argument("--attestation", required=True, type=pathlib.Path)
if name == "create":
command.add_argument("--output", required=True, type=pathlib.Path)
command.add_argument(
"--validation-mode", choices=("full", "promoted"), default="full"
)
command.add_argument("--validation-commit")
command.add_argument("--validation-run-id", type=int)
command.add_argument("--validation-run-attempt", type=int)
command.add_argument("--validation-ref")
command.add_argument("--validation-proof-sha256")
else:
command.add_argument("--proof", required=True, type=pathlib.Path)
args = parser.parse_args()
try:
if args.command == "create":
create(args)
else:
validate(args)
except (OSError, ValueError, json.JSONDecodeError, subprocess.CalledProcessError) as error:
print(f"release source proof error: {error}", file=sys.stderr)
return 1
return 0
if __name__ == "__main__":
raise SystemExit(main())