test: add pinned LES baseline and temporary candidate diagnostics
This commit is contained in:
1 parent
69e9b78de9
commit
20ae677092
9 files changed
+742
No files matched your search
@@ -0,0 +1,63 @@
|
||||
"""Materialize pinned baseline/candidate headers under a new explicit output path."""
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
REPO = HERE.parents[2]
|
||||
DATA = HERE / "data"
|
||||
PIN = "d79e3f6f0a424f5bcc3a1a6d610313e49daf97a2"
|
||||
|
||||
|
||||
def manifest():
|
||||
result = json.loads((DATA / "source_manifest.json").read_text())
|
||||
if result["baseline_commit"] != PIN:
|
||||
raise RuntimeError("Wrong baseline pin")
|
||||
return result
|
||||
|
||||
|
||||
def verify_candidate(root):
|
||||
for name, expected in manifest()["files"].items():
|
||||
if hashlib.sha256((root / name).read_bytes()).hexdigest() != expected:
|
||||
raise RuntimeError("Candidate header hash mismatch: " + name)
|
||||
|
||||
|
||||
def materialize(repo, output):
|
||||
"""Copy only the two exact source headers, then patch the isolated copy."""
|
||||
expected = manifest()
|
||||
headers = [
|
||||
Path(name).relative_to("baseline")
|
||||
for name in expected["files"]
|
||||
if name.startswith("baseline/")
|
||||
]
|
||||
for relative in headers:
|
||||
wanted = expected["files"][str(Path("baseline") / relative)]
|
||||
if hashlib.sha256((repo / relative).read_bytes()).hexdigest() != wanted:
|
||||
raise RuntimeError("Production header does not match d79: " + str(relative))
|
||||
output.mkdir(parents=True, exist_ok=False)
|
||||
for mode in ("baseline", "patched"):
|
||||
for relative in headers:
|
||||
target = output / mode / relative
|
||||
target.parent.mkdir(parents=True, exist_ok=True)
|
||||
shutil.copyfile(repo / relative, target)
|
||||
patch = DATA / "smagorinsky_normalization.patch"
|
||||
subprocess.run(
|
||||
["git", "apply", "--check", str(patch)], cwd=output / "patched", check=True
|
||||
)
|
||||
subprocess.run(["git", "apply", str(patch)], cwd=output / "patched", check=True)
|
||||
verify_candidate(output)
|
||||
(output / "source_manifest.json").write_text(json.dumps(expected, indent=2) + "\n")
|
||||
return output
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--repo", type=Path, default=REPO)
|
||||
parser.add_argument("--output-dir", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
materialize(args.repo.resolve(), args.output_dir.resolve())
|
||||
print("Pinned baseline/candidate headers verified; production files unchanged.")
|
||||
Reference in new issue
Block a user