29 lines
1.5 KiB
Python
29 lines
1.5 KiB
Python
import datetime
|
|
import hashlib
|
|
import json
|
|
import pathlib
|
|
import shutil
|
|
|
|
root = pathlib.Path('C:/git/MagnetismHeroes').resolve()
|
|
backup = root / 'artifacts/verification/VisualUpgrade/BeforeHorizonFix'
|
|
assert backup.is_relative_to(root / 'artifacts/verification/VisualUpgrade')
|
|
backup.mkdir(exist_ok=True)
|
|
sources = [root / 'artifacts/verification/Final', root / 'artifacts/verification/VisualUpgrade/FinalProduct']
|
|
paths = [path for source in sources for path in source.rglob('*') if path.is_file()]
|
|
paths += [root / 'artifacts/android/Final/MagnetismHeroes.apk', root / 'artifacts/android/MagnetismHeroes.apk']
|
|
sha = lambda path: hashlib.sha256(path.read_bytes()).hexdigest()
|
|
records = []
|
|
for source in paths:
|
|
target = backup / source.relative_to(root)
|
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
expected = sha(source)
|
|
if target.exists():
|
|
assert sha(target) == expected, target
|
|
else:
|
|
shutil.copy2(source, target)
|
|
assert sha(target) == expected, target
|
|
records.append({'source': source.relative_to(root).as_posix(), 'copy': target.relative_to(backup).as_posix(), 'bytes': source.stat().st_size, 'sha256': expected})
|
|
result = {'status': 'PASS', 'preservedUtc': datetime.datetime.now(datetime.timezone.utc).isoformat(), 'productSourceCommit': '83182e7f3e86926bf130817d401a331829401fac', 'files': records}
|
|
(backup / 'manifest.json').write_text(json.dumps(result, indent=2) + '\n', encoding='utf-8')
|
|
print(json.dumps({'status': 'PASS', 'preservedFiles': len(records), 'preservedBytes': sum(item['bytes'] for item in records)}))
|