from pathlib import Path import datetime, hashlib, json, os, re, sys path=Path('/mnt/data/ikar_server/shared/data/AppUpdates/Android') assert os.path.ismount('/mnt/data') and path.resolve().is_relative_to(Path('/mnt/data/ikar_server')) apk=path/'ikar-android-1.apk' staged=path/'ikar-android-1.apk.next' expected=sys.argv[1].lower() assert re.fullmatch(r'[0-9a-f]{64}',expected), 'Expected APK SHA-256 is required' assert hashlib.sha256(staged.read_bytes()).hexdigest()==expected os.chown(staged,1000,1000) os.replace(staged,apk) metadata=path/'latest.json' staged_metadata=path/'latest.json.next' staged_metadata.write_text(json.dumps({'versionCode':1,'versionName':'1.0.0','packageFileName':apk.name,'publishedAt':datetime.datetime.now(datetime.timezone.utc).isoformat(),'notes':'ИКАР: собственный сервер, сообщения, группы, каналы, звонки, файлы, голосовые сообщения, стикеры и отложенная отправка.'},ensure_ascii=False)) os.chown(staged_metadata,1000,1000) os.replace(staged_metadata,metadata) print(json.dumps({'version':'1.0.0+1','sha256':expected,'bytes':apk.stat().st_size}))