# -*- coding: utf-8 -*- r'''把当前版本的三个成品上传到中转的下载目录。 用法: python _build/upload_release.py 1.8.1 会自动: * 本地确认三个成品都在(安装包 exe / 服务端 zip / 手表 apk) * 删掉设备上的旧版本文件 * 上传新的四个文件(apk 还带一份说明) * 确认中转的 /v1/downloads 能列出来 发布规则(用户定的): * Windows 成品必须是**安装包 exe**,不是 agent zip * 服务端给 zip,手表直接给 APK * **每次都升版号**(用户原话:自行更新版号) ''' 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 REMOTE_DIR = "/root/lanremote-relay/downloads" def main() -> int: version = sys.argv[1] if len(sys.argv) > 1 else "1.8.1" files = [ ("dist/ykxmz-setup-%s.exe" % version, "ykxmz-setup-%s.exe" % version), ("dist/ykxmz-server-%s.zip" % version, "ykxmz-server-%s.zip" % version), ("dist/ykxmz-watch-%s.apk" % version, "ykxmz-watch-%s.apk" % version), ("dist/ykxmz-watch-%s-说明.txt" % version, "ykxmz-watch-%s-说明.txt" % version), ] print(" 版本 %s" % version) print() print(" 本地成品:") missing = [] for local, _remote in files: path = ROOT / local if path.is_file(): print(" ✓ %-38s %7.2f MB" % (path.name, path.stat().st_size / 1024 / 1024)) else: print(" ✗ %-38s 不存在" % local) missing.append(local) if missing: print() print(" [失败] 少了 %d 个,先构建" % len(missing)) return 1 # 清掉设备上所有旧版本(任何不是当前版本的 ykxmz-*) print() print(" 清理设备上的旧版本:") _c, out, _e = run("ls %s/ 2>/dev/null" % REMOTE_DIR, timeout=60) for name in (out or "").strip().splitlines(): name = name.strip() if not name or version in name: continue if not name.startswith("ykxmz-"): continue run("rm -f '%s/%s'" % (REMOTE_DIR, name), timeout=30) print(" - 删掉 %s" % name) print() print(" 上传:") for local, remote_name in files: path = ROOT / local upload(str(path), "%s/%s" % (REMOTE_DIR, remote_name), 0o644) print(" ✓ %s" % remote_name) print() print(" 设备上的下载目录:") _c, out, _e = run("ls -la %s/" % REMOTE_DIR, timeout=60) for line in (out or "").strip().splitlines(): print(" " + line) print() print(" 中转 /v1/downloads:") _c, out, _e = run( "curl -s --max-time 10 http://127.0.0.1:8080/v1/downloads", timeout=60) print(" " + (out or "").strip()[:500]) print() print(" 官网下载按钮会指向:") for _local, remote_name in files: if remote_name.endswith((".exe", ".zip", ".apk")): print(" /download/%s" % remote_name) return 0 if __name__ == "__main__": sys.exit(main())