# -*- coding: utf-8 -*- r'''把 1.8.0 的三个成品上传到中转的下载目录。 发布规则(用户定的,不能违反): * Windows 成品必须是**安装包 .exe**,不是 agent zip (用户要"双击就能装",不能让他去解压) * 服务端给 zip * 手表给 APK * 上一个版本的成品要删掉,别让用户下错 顺手做的事: 给 verify_all.ps1 补 UTF-8 BOM(edit 工具会吃掉 BOM, PowerShell 按 GBK 读就会中文乱码 + 语法报错) ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") sys.path.insert(0, str(ROOT / "_build")) from devssh import run, upload # noqa: E402 VERSION = "1.8.0" OLD_VERSIONS = ["1.7.0", "1.7.1", "1.6.0", "1.6.1", "1.5.0"] REMOTE_DIR = "/root/lanremote-relay/downloads" # 顺序就是官网上显示的优先级 UPLOADS = [ (f"dist/ykxmz-setup-{VERSION}.exe", f"{REMOTE_DIR}/ykxmz-setup-{VERSION}.exe"), (f"dist/ykxmz-server-{VERSION}.zip", f"{REMOTE_DIR}/ykxmz-server-{VERSION}.zip"), (f"dist/ykxmz-watch-{VERSION}.apk", f"{REMOTE_DIR}/ykxmz-watch-{VERSION}.apk"), (f"dist/ykxmz-watch-{VERSION}-说明.txt", f"{REMOTE_DIR}/ykxmz-watch-{VERSION}-说明.txt"), ] VERIFY = ROOT / "_tests" / "verify_all.ps1" def fix_bom() -> None: raw = VERIFY.read_bytes() if raw.startswith(b"\xef\xbb\xbf"): print(" verify_all.ps1: BOM 正常") else: VERIFY.write_bytes(b"\xef\xbb\xbf" + raw) print(" verify_all.ps1: 补回了 UTF-8 BOM") def main() -> int: fix_bom() # 本地先确认三个成品都在 print() print(" 本地成品检查:") missing = [] for local, _remote in UPLOADS: src = ROOT / local if src.is_file(): print(" ✓ %-38s %7.2f MB" % (src.name, src.stat().st_size / 1024 / 1024)) else: print(" ✗ %-38s 不存在" % local) missing.append(local) if missing: print() print(" [失败] 少了 %d 个成品,先构建" % len(missing)) return 1 # 清掉旧版本,免得用户下错 print() print(" 清理设备上的旧版本:") run("mkdir -p " + REMOTE_DIR, timeout=30) for old in OLD_VERSIONS: _c, out, _e = run( "ls %s/ 2>/dev/null | grep -F '%s' || true" % (REMOTE_DIR, old), timeout=30) for name in (out or "").strip().splitlines(): if not name.strip(): continue run("rm -f '%s/%s'" % (REMOTE_DIR, name.strip()), timeout=30) print(" - 删掉 %s" % name.strip()) # 上传 print() print(" 上传:") for local, remote in UPLOADS: src = ROOT / local try: upload(str(src), remote, 0o644) print(" ✓ %s (%.2f MB)" % (src.name, src.stat().st_size / 1024 / 1024)) except Exception as exc: # noqa: BLE001 print(" ✗ %s: %s" % (src.name, exc)) return 1 # 确认 print() print(" 设备上现在的下载目录:") _c, out, _e = run("ls -la %s/" % REMOTE_DIR, timeout=30) for line in (out or "").strip().splitlines(): print(" " + line) # 确认中转能列出来 print() print(" 中转接口返回的下载列表:") _c, out, _e = run( "curl -s --max-time 10 http://127.0.0.1:8080/v1/downloads", timeout=60) print(" " + (out or "").strip()[:600]) return 0 if __name__ == "__main__": sys.exit(main())