"""Verify every published entity against the release SHA256SUMS.""" import argparse import hashlib from pathlib import Path def verify(root): root=Path(root).resolve(); count=0 for row in (root/'SHA256SUMS').read_text().splitlines(): digest,name=row.split(' ',1); path=(root/name).resolve() if root not in path.parents: raise ValueError('Invalid manifest path') h=hashlib.sha256() with path.open('rb') as f: for block in iter(lambda:f.read(1048576),b''): h.update(block) if h.hexdigest()!=digest: raise RuntimeError(f'Checksum mismatch: {name}') count+=1 print(f'PASS: {count} published files verified') return count if __name__=='__main__': p=argparse.ArgumentParser(); p.add_argument('--bundle-dir',default=Path(__file__).resolve().parents[1]) verify(p.parse_args().bundle_dir)