File size: 883 Bytes
12496fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from pathlib import Path
from hashlib import sha256
import argparse
import json


def verify(root):
    root = Path(root).resolve()
    manifest = json.loads((root / "reports/release-manifest.json").read_text(encoding="utf-8"))
    for entry in manifest["files"]:
        path = (root / entry["path"]).resolve()
        if not path.is_relative_to(root) or not path.is_file():
            raise ValueError("Missing file or invalid path: " + entry["path"])
        if path.stat().st_size != entry["bytes"] or sha256(path.read_bytes()).hexdigest() != entry["sha256"]:
            raise ValueError("Hash mismatch: " + entry["path"])
    return {"verified_files": len(manifest["files"]), "source_commit": manifest["source_commit"]}


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("root")
    print(json.dumps(verify(parser.parse_args().root)))