Files
ARCADIA-Studio/harness/experiments/save-diagnostics-package-20261001/raw/scripts/launch-package46-reopen.py
T

41 lines
2.3 KiB
Python

from pathlib import Path
import datetime, hashlib, json, os, platform, subprocess
root = Path(__file__).resolve().parent / 'package46'
record = json.loads((root / 'extraction-check.json').read_text())
bundle = Path(record['bundle'])
native = root / 'qa/reopen46'
native.mkdir(exist_ok=False)
work = root / 'working'
sha = lambda p: hashlib.sha256(p.read_bytes()).hexdigest()
def inventory(p):
return {f.relative_to(p).as_posix(): sha(f) for f in p.rglob('*') if f.is_file()}
assert inventory(bundle) == record['sha256']
system = os.environ['SystemRoot']
env = os.environ.copy()
env['PATH'] = str(Path(system) / 'System32') + ';' + system
for key in list(env):
if key.startswith(('CARGO_', 'RUST', 'LLVM', 'WGPU', 'ARCADIA_')):
del env[key]
command = [str(bundle / 'arcadia-studio.exe')]
receipt = {'source': '0e83157e09d52e6152df91208e41693b62da2d46',
'package_documentation_source': 'ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47',
'start': datetime.datetime.now(datetime.timezone.utc).isoformat(),
'command': command, 'cwd': str(work), 'path': env['PATH'], 'platform': platform.platform(),
'archive_sha256': record['archive_sha256'],
'binary_sha256': sha(Path(command[0])), 'runtime_sha256': sha(bundle / 'libunwind.dll')}
with (native / 'stdout.log').open('xb') as out, (native / 'stderr.log').open('xb') as err:
child = subprocess.Popen(command, cwd=work, env=env, stdout=out, stderr=err,
creationflags=subprocess.CREATE_NO_WINDOW)
receipt['pid'] = child.pid
(native / 'started.json').write_text(json.dumps(receipt, indent=2) + '\n', encoding='utf-8')
print(json.dumps(receipt, indent=2), flush=True)
code = child.wait()
receipt.update({'exit_code': code, 'finished': datetime.datetime.now(datetime.timezone.utc).isoformat(),
'stdout_bytes': (native / 'stdout.log').stat().st_size,
'stderr_bytes': (native / 'stderr.log').stat().st_size,
'package_files_unchanged': inventory(bundle) == record['sha256']})
(native / 'finished.json').write_text(json.dumps(receipt, indent=2) + '\n', encoding='utf-8')
print(json.dumps(receipt, indent=2), flush=True)
assert code == 0 and receipt['stdout_bytes'] == receipt['stderr_bytes'] == 0 and receipt['package_files_unchanged']