Files
2026-09-03 08:38:17 +08:00

33 lines
1.7 KiB
Python

import hashlib
import json
import zipfile
from pathlib import Path
root = Path(__file__).resolve().parent
workspace = root.parents[1]
base = root.parent / 'application-20260831-120612/payload/backend-source.zip'
changed = ['backend/internal/app/im.go', 'backend/internal/app/im_unread_integration_test.go']
source = root / 'backend-source.zip'
with zipfile.ZipFile(str(base)) as old, zipfile.ZipFile(str(source), 'w', zipfile.ZIP_DEFLATED) as new:
for item in old.infolist():
if item.filename not in changed:
new.writestr(item, old.read(item))
for name in changed:
new.write(str(root / name), name)
with zipfile.ZipFile(str(base)) as old, zipfile.ZipFile(str(source)) as new:
def hashes(z):
return {i.filename: hashlib.sha256(z.read(i)).hexdigest() for i in z.infolist() if not i.is_dir()}
left, right = hashes(old), hashes(new)
actual = sorted(name for name in left.keys() | right.keys() if left.get(name) != right.get(name))
assert actual == changed, actual
files = {name: hashlib.sha256((root / name).read_bytes()).hexdigest() for name in ['xingyu-api', 'backend-source.zip']}
manifest = json.dumps({'files': files}, indent=2)
(root / 'manifest.json').write_text(manifest, encoding='utf-8')
with zipfile.ZipFile(str(root / 'release.zip'), 'w', zipfile.ZIP_DEFLATED) as package:
for name in [*files, 'manifest.json']:
package.write(str(root / name), name)
package.write(str(workspace / 'deploy/baota_publish_im_unread.py'), 'baota_publish_im_unread.py')
result = {'sha256': hashlib.sha256((root / 'release.zip').read_bytes()).hexdigest(), 'files': files, 'changed': actual}
(root / 'package-result.json').write_text(json.dumps(result, indent=2), encoding='utf-8')
print(json.dumps(result))