Bind isolated restore to fetched artifact and document archive integrity gates
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
This commit is contained in:
codex 2026-09-05 22:21:54 +02:00
parent 0cca68da96
commit 480d181549
4 changed files with 41 additions and 3 deletions

View file

@ -154,9 +154,18 @@ LEVEL = Error
def main():
p=argparse.ArgumentParser(description=__doc__)
p.add_argument('--archive',required=True,type=Path);p.add_argument('--receipt',required=True)
p.add_argument('--transfer-receipt',required=True,type=Path)
a=p.parse_args();receipt={'schema':'platform.forgejo-isolated-restore.v1','status':'failed','images':[FORGE,POSTGRES]}
fd=os.open(a.receipt,os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
try: run(a.archive,receipt)
try:
transfer=json.loads(a.transfer_receipt.read_text())
if (transfer.get('status') != 'offsite_fetched_pending_isolated_restore'
or transfer.get('download_http_status') != 200
or transfer.get('plaintext_sha256') != file_digest(a.archive)):
raise ValueError('verified_offsite_provenance_required')
receipt['offsite_artifact']=transfer['artifact']
receipt['ciphertext_sha256']=transfer['ciphertext_sha256']
run(a.archive,receipt)
except Exception: receipt['error']='isolated_restore_failed'
finally:
with os.fdopen(fd,'w') as f: json.dump(receipt,f,indent=2)