#!/usr/bin/env python3 """Add a new corpus case from a template.""" from __future__ import annotations import argparse from datetime import datetime, timezone from pathlib import Path ROOT = Path(__file__).resolve().parents[2] CORPUS = ROOT / "bench" / "golden-corpus" / "categories" def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--category", required=True) parser.add_argument("--name", required=True) args = parser.parse_args() case_dir = CORPUS / args.category / args.name (case_dir / "input").mkdir(parents=True, exist_ok=True) (case_dir / "expected").mkdir(parents=True, exist_ok=True) created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") (case_dir / "case-manifest.json").write_text( '{\n' f' "id": "{args.name}",\n' f' "category": "{args.category}",\n' ' "description": "New corpus case",\n' f' "createdAt": "{created_at}",\n' ' "inputs": ["sbom-cyclonedx.json", "sbom-spdx.json", "image.tar.gz"],\n' ' "expected": ["verdict.json", "evidence-index.json", "unknowns.json", "delta-verdict.json"]\n' '}\n', encoding="utf-8", ) for rel in [ "input/sbom-cyclonedx.json", "input/sbom-spdx.json", "input/image.tar.gz", "expected/verdict.json", "expected/evidence-index.json", "expected/unknowns.json", "expected/delta-verdict.json", "run-manifest.json", ]: target = case_dir / rel if target.suffix == ".gz": target.touch() else: target.write_text("{}\n", encoding="utf-8") print(f"Created case at {case_dir}") return 0 if __name__ == "__main__": raise SystemExit(main())