orena-procedure-runtime / bundle /verify_package.py
gwd200's picture
Publish PROCEDURE ep15 merged3225 self-contained runtime v1
f6588d9 verified
Raw History Blame Contribute Delete
1.68 kB
"""Verify the complete model, runtime, and dependency-lock package."""
from __future__ import annotations
import argparse
import hashlib
import json
from pathlib import Path
from typing import Sequence
from .verify_model import verify_model
from .verify_runtime import verify_runtime
def _file_receipt(path: Path) -> dict[str, str | int]:
resolved = path.resolve(strict=True)
if not resolved.is_file():
raise RuntimeError(f"package artifact must be a regular file: {resolved}")
return {
"path": str(resolved),
"bytes": resolved.stat().st_size,
"sha256": hashlib.sha256(resolved.read_bytes()).hexdigest(),
}
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--model-root", type=Path, required=True)
parser.add_argument("--manifest", type=Path, required=True)
parser.add_argument("--requirements-direct", type=Path, required=True)
parser.add_argument("--requirements-lock", type=Path, required=True)
return parser
def main(argv: Sequence[str] | None = None) -> int:
args = build_parser().parse_args(argv)
report = {
"schema_version": "procedure.ep15_merged3225.package_verify.v1",
"status": "PASS",
"model": verify_model(args.model_root, args.manifest),
"runtime": verify_runtime(),
"requirements": {
"direct": _file_receipt(args.requirements_direct),
"lock": _file_receipt(args.requirements_lock),
},
}
print(json.dumps(report, ensure_ascii=False, sort_keys=True))
return 0
if __name__ == "__main__":
raise SystemExit(main())