"""Restore this release's saved admin entry; preserve all versioned assets.""" from pathlib import Path import hashlib, importlib.util, json, sys, urllib.request assert sys.argv[1:] == ['--apply'], 'Use --apply only for the authorized release rollback' root=Path('/Users/mac/.local/state/xiaoshu/cloud-releases/2026-11-10-admin-speed-round2/admin') origin='https://xiaoshu-admin.obs.cn-south-1.myhuaweicloud.com/' sha=lambda b:hashlib.sha256(b).hexdigest() current=json.loads(urllib.request.urlopen(origin+'deployment-version.json',timeout=30).read()) expected=json.loads((root/'site/deployment-version.json').read_text()) baseline=json.loads((root/'baseline/deployment-version.json').read_text()) assert current['releaseId'] in [expected['releaseId'],baseline['releaseId']], 'Unrelated release has replaced this batch' for file in baseline['files']: assert sha(urllib.request.urlopen(origin+file['path'],timeout=30).read() if file['path']!='index.html' else (root/'baseline/index.html').read_bytes()) == file['sha256'], 'Baseline asset missing' spec=importlib.util.spec_from_file_location('cloud','/Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-15-mobile-web/cloud.py') cloud=importlib.util.module_from_spec(spec);spec.loader.exec_module(cloud) for name in ['deployment-version.json','index.html']: (root/('rollback-'+name+'.log')).write_text(cloud.run('obs',['cp',str(root/'baseline'/name),'obs://xiaoshu-admin/'+name,'-vmd5','-acl=public-read'])) assert sha(urllib.request.urlopen(origin+name,timeout=30).read())==sha((root/'baseline'/name).read_bytes()) (root/'rollback-cdn.json').write_text(cloud.run('cdn',['CreateRefreshTasks/v2','--refresh_task.type=directory','--refresh_task.mode=all','--refresh_task.urls.1=https://admin.xiaoshu.pro/'])) print(json.dumps({'restored':baseline['releaseId'],'originVerified':True}))