img2threejs / scripts /build_fixture_factory.py
Mike0021's picture
Deploy verified img2threejs Docker Space
39ff632 verified
Raw
History Blame Contribute Delete
2.22 kB
#!/usr/bin/env python3
"""Regenerate tests/fixtures/factory_fixture.ts from the canned spec.
Used by the Docker build's fixture stage and by
``pytest tests/test_forge_bridge.py`` indirectly. Requires only the Python
standard library plus the vendored forge/ tree (via app/forge_bridge.py).
Usage: python3 scripts/build_fixture_factory.py [out.ts]
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO_ROOT))
from app import forge_bridge # noqa: E402
def main() -> int:
out = Path(sys.argv[1]) if len(sys.argv) > 1 else (
REPO_ROOT / "tests" / "fixtures" / "factory_fixture.ts")
spec = json.loads(
(REPO_ROOT / "tests" / "fixtures" / "canned_spec.json").read_text(encoding="utf-8"))
# Mirror the runtime adapter: strict-gate the original spec, then compile
# a separate unreviewed hosted-preview manifest. No visual review evidence
# or pass approval is invented.
import tempfile
with tempfile.TemporaryDirectory() as tmp:
spec_path = Path(tmp) / "spec.json"
spec_path.write_text(json.dumps(spec), encoding="utf-8")
validation = forge_bridge.validate_spec(spec_path, strict=True)
if not validation.get("ok"):
print("canned spec failed strict-quality gate:", file=sys.stderr)
for error in validation.get("errors", []):
print(f" - {error}", file=sys.stderr)
return 1
hosted_errors = forge_bridge.hosted_spec_errors(spec)
if hosted_errors:
print("canned spec is not supported by the hosted compiler:", file=sys.stderr)
for error in hosted_errors:
print(f" - {error}", file=sys.stderr)
return 1
target = forge_bridge.HOSTED_PREVIEW_PASS
preview = forge_bridge.prepare_hosted_preview(spec)
spec_path.write_text(json.dumps(preview), encoding="utf-8")
forge_bridge.generate_factory(spec_path, out, pass_id=target)
print(f"fixture factory written: {out} ({out.stat().st_size} bytes, pass {target})")
return 0
if __name__ == "__main__":
raise SystemExit(main())