Files
ARCADIA-Studio/harness/experiments/canvas-repair-publication-20260912/prepare-release-assets.py
T

32 lines
2.0 KiB
Python

from pathlib import Path
import hashlib,json,re,subprocess
root=Path(__file__).resolve().parent.parent
work=root/'.local/canvas-union-ytr83r-20260911'
commit='0c53c210306d768fc8b1ae6cee3618701c887bb6'
assert subprocess.check_output(['git','rev-parse','HEAD'],cwd=work).decode().strip()==commit
pub=root/'.local/canvas-repair-publication-20260912';pub.mkdir(exist_ok=False)
base='http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/'+commit+'/'
validation=work/'harness/release-canvas-repair-validation-20260912.md'
s=validation.read_text(encoding='utf-8')
def link(m):
target=m.group(2)
if '://' in target or target.startswith('#'):return m.group(0)
path=(validation.parent/target).resolve();rel=path.relative_to(work.resolve()).as_posix()
assert path.exists(),rel
return '['+m.group(1)+']('+base+rel+')'
s=re.sub(r'\[([^\]]+)\]\(([^)]+)\)',link,s)
with (pub/'VALIDATION.md').open('x',encoding='utf-8',newline='\n') as f:f.write(s)
notes=(root/'.local/canvas-repair-release-notes-final.md').read_text(encoding='utf-8')
assert notes.count('EVIDENCE_URL')==1
notes=notes.replace('EVIDENCE_URL',base+'harness/release-canvas-repair-validation-20260912.md')
assert 'PENDING' not in notes and 'EVIDENCE_URL' not in notes
with (pub/'release-notes.md').open('x',encoding='utf-8',newline='\n') as f:f.write(notes)
dist=root/'.local/native-repair-union-33e30c1-r2/dist'
name='ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip'
assets=[]
for p in [dist/name,dist/(name+'.sha256'),pub/'VALIDATION.md']:
data=p.read_bytes();assets.append({'name':p.name,'local_path':str(p),'bytes':len(data),'sha256':hashlib.sha256(data).hexdigest()})
record={'evidence_commit':commit,'tag':'v0.2.0-preview.canvas-repair.20260912','source_commit':'33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d','tag_commit':'33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d','assets':assets}
with (pub/'local-assets.json').open('x',encoding='utf-8') as f:json.dump(record,f,indent=2)
print(json.dumps(record))