41 lines
2.3 KiB
Python
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}))
|