from __future__ import annotations
import argparse
import sys
from interop_lib import (
DOCUMENT_PATH,
MATRIX_PATH,
ValidationError,
build_matrix,
canonical_json_bytes,
load_inputs,
render_document,
)
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument(
"--check",
action="store_true",
help="fail unless tracked generated bytes exactly match regeneration",
)
args = parser.parse_args()
try:
matrix = build_matrix(load_inputs())
matrix_bytes = canonical_json_bytes(matrix)
document_bytes = render_document(matrix)
if args.check:
problems: list[str] = []
if not MATRIX_PATH.exists() or MATRIX_PATH.is_symlink():
problems.append(f"missing or symlinked generated matrix: {MATRIX_PATH}")
elif MATRIX_PATH.read_bytes() != matrix_bytes:
problems.append("matrix.json differs from deterministic regeneration")
if not DOCUMENT_PATH.exists() or DOCUMENT_PATH.is_symlink():
problems.append(f"missing or symlinked generated document: {DOCUMENT_PATH}")
elif DOCUMENT_PATH.read_bytes() != document_bytes:
problems.append("INTEROPERABILITY.md differs from deterministic regeneration")
if problems:
for problem in problems:
print(f"ERROR: {problem}", file=sys.stderr)
return 1
print(
"interoperability regeneration check passed: "
f"rows={len(matrix['rows'])}, blockers={matrix['counts']['interoperability_blockers']}"
)
return 0
MATRIX_PATH.write_bytes(matrix_bytes)
DOCUMENT_PATH.write_bytes(document_bytes)
print(
"generated interoperability matrix: "
f"rows={len(matrix['rows'])}, blockers={matrix['counts']['interoperability_blockers']}"
)
return 0
except (OSError, ValidationError) as exc:
print(f"ERROR: {exc}", file=sys.stderr)
return 1
if __name__ == "__main__":
raise SystemExit(main())