szl-kernels-live / scripts /deploy_hf_space.py
betterwithage's picture
Deploy GitHub source e03cdb25aee1
c9917d4 verified
Raw
History Blame Contribute Delete
5.64 kB
#!/usr/bin/env python3
"""Atomically deploy a prebuilt bundle to the governed SZL Kernels Space."""
from __future__ import annotations
import argparse
import hashlib
import json
import os
import re
from pathlib import Path, PurePosixPath
HF_REPO = "SZLHOLDINGS/szl-kernels-live"
SOURCE_REPO = "szl-holdings/szl-kernels-live"
def canonical_json(value: object) -> bytes:
return (
json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
+ "\n"
).encode("utf-8")
def sha256_file(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for block in iter(lambda: handle.read(1024 * 1024), b""):
digest.update(block)
return digest.hexdigest()
def validate_bundle(bundle: Path, source_sha: str) -> dict[str, object]:
if not re.fullmatch(r"[0-9a-f]{40}", source_sha):
raise RuntimeError(
"workflow source must be an exact lowercase 40-character SHA"
)
if not bundle.is_dir():
raise RuntimeError("bundle directory does not exist")
manifest_path = bundle / "hf-deploy-manifest.json"
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
expected_keys = {
"schema",
"source_repository",
"source_revision",
"target",
"file_count",
"files",
"self_manifest",
"bundle_sha256",
}
if set(manifest) != expected_keys:
raise RuntimeError("bundle manifest fields do not match the v2 contract")
if manifest.get("schema") != "szl.hf-deploy-manifest/v2":
raise RuntimeError("bundle manifest schema is not supported")
if manifest.get("source_repository") != SOURCE_REPO:
raise RuntimeError("bundle source repository does not match")
if manifest.get("source_revision") != source_sha:
raise RuntimeError("bundle source revision does not match workflow source")
if manifest.get("target") != HF_REPO:
raise RuntimeError("bundle target does not match the governed Space")
if manifest.get("self_manifest") != {
"path": "hf-deploy-manifest.json",
"included_in_files": False,
"reason": "self-digest would be recursive; exact bytes are bound by GitHub OIDC attestation",
}:
raise RuntimeError("bundle self-manifest exclusion does not match the contract")
entries = manifest.get("files")
if not isinstance(entries, list) or manifest.get("file_count") != len(entries):
raise RuntimeError("bundle manifest file count does not match its entries")
listed: set[str] = set()
for entry in entries:
if not isinstance(entry, dict) or set(entry) != {"path", "bytes", "sha256"}:
raise RuntimeError("bundle manifest file entry is malformed")
relative = PurePosixPath(entry["path"])
if relative.is_absolute() or ".." in relative.parts or str(relative) in listed:
raise RuntimeError("bundle manifest contains an unsafe or duplicate path")
listed.add(str(relative))
path = bundle.joinpath(*relative.parts)
if path.is_symlink() or not path.is_file():
raise RuntimeError(f"bundle file is missing or symbolic: {relative}")
if entry["bytes"] != path.stat().st_size:
raise RuntimeError(f"bundle byte count does not match: {relative}")
if not re.fullmatch(r"[0-9a-f]{64}", str(entry["sha256"])):
raise RuntimeError(f"bundle digest is malformed: {relative}")
if entry["sha256"] != sha256_file(path):
raise RuntimeError(f"bundle digest does not match: {relative}")
actual = {
path.relative_to(bundle).as_posix()
for path in bundle.rglob("*")
if path.is_file()
}
if actual != listed | {"hf-deploy-manifest.json"}:
raise RuntimeError("bundle tree is not closed by the manifest")
manifest_core = {
key: value for key, value in manifest.items() if key != "bundle_sha256"
}
if (
manifest["bundle_sha256"]
!= hashlib.sha256(canonical_json(manifest_core)).hexdigest()
):
raise RuntimeError("bundle aggregate digest does not match")
return manifest
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--bundle", type=Path, required=True)
parser.add_argument("--source-sha", required=True)
args = parser.parse_args()
manifest = validate_bundle(args.bundle, args.source_sha)
token = os.environ.get("HF_TOKEN")
if not token:
raise RuntimeError("HF_TOKEN is required in the approved secret store")
from huggingface_hub import HfApi
api = HfApi(token=token)
before = api.space_info(HF_REPO, token=token)
commit = api.upload_folder(
repo_id=HF_REPO,
repo_type="space",
folder_path=args.bundle,
token=token,
parent_commit=before.sha,
delete_patterns="*",
commit_message=f"Deploy GitHub source {args.source_sha[:12]}",
commit_description=(
f"Source: https://github.com/szl-holdings/szl-kernels-live/commit/"
f"{args.source_sha}\nBundle: {manifest['bundle_sha256']}"
),
)
print(
json.dumps(
{
"status": "PUBLISHED",
"source_revision": args.source_sha,
"previous_hf_revision": before.sha,
"hf_revision": commit.oid,
"bundle_sha256": manifest["bundle_sha256"],
"target": HF_REPO,
},
sort_keys=True,
)
)
return 0
if __name__ == "__main__":
raise SystemExit(main())