Files
aios/scripts/verify_v2r1c7_release.py
T

14 lines
1.2 KiB
Python

from __future__ import annotations
import argparse, hashlib, io, json, subprocess, tarfile
from pathlib import Path
parser=argparse.ArgumentParser(); parser.add_argument("artifact",type=Path); args=parser.parse_args()
assert args.artifact.is_file() and args.artifact.stat().st_size > 0
raw=subprocess.check_output(["zstd", "-dc", str(args.artifact)])
with tarfile.open(fileobj=io.BytesIO(raw), mode="r:") as archive:
names={m.name for m in archive.getmembers()}
required={"payload/VERSION","payload/active-runtime/app/deployment_state.py","payload/active-runtime/app/v2r1c7_health_service.py","payload/deploy/aios-v2/systemd/aios-v2r1c7-production.service","payload/deploy/aios-v2/v2r1c7-runtime-config.json","payload/deploy/aios-v2/v2r1c7-rollback.json","payload/scripts/probe_v2r1c7_health.py","payload/scripts/rollback_v2r1c7_release.sh","payload/BUILD-METADATA.json","payload/ARTIFACT-MANIFEST.json","payload/ROLLBACK-METADATA.json"}
missing=sorted(required - names)
if missing: raise SystemExit("artifact_members_missing:"+",".join(missing))
print(json.dumps({"status":"PASS","artifact_sha256":hashlib.sha256(args.artifact.read_bytes()).hexdigest(),"deployable":True,"required_members":len(required)},sort_keys=True))