up
This commit is contained in:
53
tests/reachability/samples-public/scripts/update_manifest.py
Normal file
53
tests/reachability/samples-public/scripts/update_manifest.py
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Regenerate the public samples manifest deterministically.
|
||||
Usage: python tests/reachability/samples-public/scripts/update_manifest.py
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SAMPLES_ROOT = ROOT / "samples"
|
||||
FILE_LIST = [
|
||||
"callgraph.static.json",
|
||||
"ground-truth.json",
|
||||
"sbom.cdx.json",
|
||||
"vex.openvex.json",
|
||||
"repro.sh",
|
||||
]
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
entries: list[dict] = []
|
||||
for lang_dir in sorted(p for p in SAMPLES_ROOT.iterdir() if p.is_dir()):
|
||||
for case_dir in sorted(p for p in lang_dir.iterdir() if p.is_dir()):
|
||||
files: dict[str, str] = {}
|
||||
for name in FILE_LIST:
|
||||
path = case_dir / name
|
||||
if not path.exists():
|
||||
raise SystemExit(f"missing {path}")
|
||||
files[name] = sha256(path)
|
||||
entries.append(
|
||||
{
|
||||
"id": case_dir.name,
|
||||
"language": lang_dir.name,
|
||||
"files": files,
|
||||
}
|
||||
)
|
||||
|
||||
manifest_path = ROOT / "manifest.json"
|
||||
manifest_path.write_text(json.dumps(entries, indent=2, sort_keys=True) + "\n")
|
||||
print(f"wrote {manifest_path} ({len(entries)} entries)")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
|
||||
Reference in New Issue
Block a user