from pathlib import Path import hashlib,json,shutil,subprocess root=Path(__file__).resolve().parents[1] source='0e83157e09d52e6152df91208e41693b62da2d46' assert subprocess.check_output(['git','rev-parse','HEAD'],cwd=root,text=True).strip()==source subprocess.run(['git','diff','--exit-code',source,'--','crates','Cargo.toml','Cargo.lock'],cwd=root,check=True) run=root/'.local/native46';run.mkdir(exist_ok=False) bins=run/'bin';bins.mkdir() target=Path('C:/Users/User/Documents/Git/ARCADIA-Studio/.local/target-gnullvm/debug') runtime=Path('C:/ar-compact-01a0d717/.local/package39/bin/libunwind.dll') assert hashlib.sha256(runtime.read_bytes()).hexdigest()=='f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4' shutil.copyfile(target/'arcadia-studio.exe',bins/'arcadia-studio.exe') shutil.copyfile(runtime,bins/'libunwind.dll') sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() fixture=root/'examples/release1' def inventory(p): return {f.relative_to(p).as_posix():{'bytes':f.stat().st_size,'sha256':sha(f)} for f in p.rglob('*') if f.is_file()} baseline=inventory(fixture) assert len(baseline)==37 for name in ['collision-a','external-b']: shutil.copytree(fixture,run/name) fresh=run/'fresh-c';fresh.mkdir() for f in fixture.rglob('*'): if f.is_file() and f.suffix!='.arcadia': p=fresh/f.relative_to(fixture);p.parent.mkdir(parents=True,exist_ok=True);shutil.copyfile(f,p) assert len(inventory(fresh))==7 and not list(fresh.rglob('*.arcadia')) receipt={'source':source,'profile':'dev/unoptimized','target':'x86_64-pc-windows-gnullvm','binary':{'bytes':(bins/'arcadia-studio.exe').stat().st_size,'sha256':sha(bins/'arcadia-studio.exe')},'runtime':{'bytes':(bins/'libunwind.dll').stat().st_size,'sha256':sha(bins/'libunwind.dll')},'baseline':baseline,'fresh_companions':inventory(fresh),'declared_rename':{'activity':'61f7bbfb-74a4-5540-9182-2583dfb27a49','before':'Assess pressure alarm','after':'Assess pressure alarm QA46'},'external_dependency':'oa/activities/activity_oa_restore_work.arcadia','external_comment':'\n// native #46 external-edit probe\n'} (run/'baseline.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8') print(json.dumps({k:v for k,v in receipt.items() if k not in ['baseline','fresh_companions']},indent=2))