Files
MagnetismHeroes/.dryforge/002/execution-support/preserve-horizon-failed-smoke.py
T
2026-10-10 01:27:54 +09:00

41 lines
2.3 KiB
Python

import hashlib
import json
import shutil
from pathlib import Path
root = Path('C:/git/MagnetismHeroes')
record_path = root / 'artifacts/verification/VisualUpgrade/FinalProduct/completion.json'
record = json.loads(record_path.read_text(encoding='utf-8-sig'))
assert record['sourceCommit'] == '3346eb559bdfba24332feb4d9be4b7104520233e'
failed = [phase for phase in record['phases'] if phase['phase'] == 'AndroidSmoke']
assert len(failed) == 1 and failed[0]['exitCode'] == 1 and failed[0]['status'] == 'failed'
destination = root / 'artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1'
files = list((root / 'artifacts/verification/Final/Fresh30').rglob('*'))
files += [root / relative for relative in [
'artifacts/verification/Final/androidsmoke-evidence.json',
'artifacts/verification/Final/androidsmoke.log',
'artifacts/verification/Final/android-final-evidence.json',
'artifacts/verification/VisualUpgrade/FinalProduct/completion.json',
'artifacts/verification/VisualUpgrade/FinalProduct/androidsmoke-outer.log',
'artifacts/verification/VisualUpgrade/FinalProduct/android-readiness.json',
]]
manifest = {'status': 'preserved-failed-attempt', 'sourceCommit': record['sourceCommit'], 'phaseExitCode': 1, 'files': []}
for source in sorted(set(path for path in files if path.is_file())):
relative = source.relative_to(root)
target = destination / relative
target.parent.mkdir(parents=True, exist_ok=True)
digest = hashlib.sha256(source.read_bytes()).hexdigest()
if target.exists():
assert hashlib.sha256(target.read_bytes()).hexdigest() == digest, str(target)
else:
shutil.copy2(source, target)
assert hashlib.sha256(target.read_bytes()).hexdigest() == digest, str(target)
manifest['files'].append({'path': relative.as_posix(), 'sha256': digest, 'bytes': source.stat().st_size})
(destination / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n', encoding='utf-8')
for field in ['evidence', 'outerLog']:
original = Path(failed[0][field])
failed[0][field + 'OriginalPath'] = str(original)
failed[0][field] = str(destination / original.relative_to(root))
record_path.write_text(json.dumps(record, indent=2) + '\n', encoding='utf-8')
print(json.dumps({'status': 'preserved', 'files': len(manifest['files']), 'phaseExitCode': 1}))