"""Build one identified Windows GUI and bind its Cargo artifact to frozen inputs.""" import datetime import hashlib import json import os from pathlib import Path import subprocess root = Path(__file__).resolve().parents[2] evidence = Path(__file__).resolve().parent manifest = json.loads((evidence / "inputs4.json").read_text(encoding="utf-8")) build_commit = "36db9356cce3c7614ae37eec9fe17678ca210afe" assert subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=root).decode().strip() == build_commit assert not subprocess.check_output(["git", "status", "--porcelain", "--", "crates", "docs", "examples", ".cargo", "Cargo.toml", "Cargo.lock", "harness/fixtures"], cwd=root).strip() def sha(path): return hashlib.sha256(path.read_bytes()).hexdigest() def verify(): for entry in manifest["files"]: path = (root / entry["path"]).resolve() assert path.is_relative_to(root) and sha(path) == entry["sha256"], entry["path"] def now(): return datetime.datetime.now(datetime.timezone.utc).isoformat() verify() os.environ["CARGO_BUILD_JOBS"] = "1" args = ["cargo", "build", "--locked", "--offline", "-p", "oa-desktop", "--bin", "arcadia-studio", "--message-format=json-render-diagnostics"] started = now() with (evidence / "gui-build-v2-messages.jsonl").open("xb") as out, (evidence / "gui-build-v2-stderr.log").open("xb") as err: result = subprocess.run(args, cwd=root, stdout=out, stderr=err) receipt = {"started": started, "finished": now(), "exitCode": result.returncode, "args": args, "buildJobs": 1, "head": build_commit, "capturedBaseHead": manifest["head"], "branch": manifest["branch"], "rawInputs": "inputs4.json", "rawInputArchiveSha256": manifest["archiveSha256"], "scope": "Windows development GUI from committed navigation source and exact inputs4 bytes; native evaluation pending"} if result.returncode == 0: verify() messages = [json.loads(line) for line in (evidence / "gui-build-v2-messages.jsonl").read_text(encoding="utf-8").splitlines()] artifacts = [m for m in messages if m.get("reason") == "compiler-artifact" and m.get("target", {}).get("name") == "arcadia-studio" and m.get("executable") and not m.get("profile", {}).get("test")] assert len(artifacts) == 1, len(artifacts) binary = Path(artifacts[0]["executable"]).resolve() assert binary.is_relative_to(root / ".local/target-gnullvm") receipt.update(binary=str(binary), sha256=sha(binary), bytes=binary.stat().st_size, cargoArtifact=artifacts[0], inputsUnchanged=True) with (evidence / "gui-build-v2.json").open("x", encoding="utf-8", newline="\n") as out: json.dump(receipt, out, indent=2) out.write("\n") print(json.dumps({k: receipt[k] for k in ("started", "finished", "exitCode", "sha256", "bytes") if k in receipt})) raise SystemExit(result.returncode)