28 lines
1.2 KiB
Python
28 lines
1.2 KiB
Python
"""Resolve pinned shared frame/backing assets without copying them into a card proof."""
|
|
from pathlib import Path
|
|
import hashlib, json
|
|
ROOT = Path(__file__).resolve().parent
|
|
|
|
def digest(path):
|
|
return hashlib.sha256(Path(path).read_bytes()).hexdigest()
|
|
|
|
def load_tier(tier, version=None):
|
|
index = json.loads((ROOT / 'manifest.json').read_text())
|
|
entry = index['tiers'][tier]
|
|
version = version or entry['selectedVersion']
|
|
if version not in entry['versions']:
|
|
raise ValueError(f'Unknown tier revision: {tier}/{version}')
|
|
directory = ROOT / tier / version
|
|
manifest = json.loads((directory / 'manifest.json').read_text())
|
|
for relative, record in manifest['files'].items():
|
|
path = directory / relative
|
|
if not path.is_file() or digest(path) != record['sha256']:
|
|
raise ValueError(f'Shared layer missing or changed: {tier}/{version}/{relative}')
|
|
return {
|
|
'tier': tier, 'version': version, 'directory': directory,
|
|
'manifestSHA256': digest(directory / 'manifest.json'),
|
|
'layout': json.loads((directory / 'layout.json').read_text()),
|
|
'reviewStatus': manifest['reviewStatus'],
|
|
'assets': {name: directory / relative for name, relative in manifest['assets'].items()},
|
|
}
|