# -*- coding: utf-8 -*- r"""设备回来了:把成品传到下载区,并部署最新 relay。 版本号从 _build/package_remote.py 里读,不用手改。 """ from __future__ import annotations import re 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 def current_version() -> str: text = (ROOT / "_build" / "package_remote.py").read_text(encoding="utf-8") match = re.search(r'VERSION\s*=\s*"([^"]+)"', text) return match.group(1) if match else "0.0.0" VER = current_version() REMOTE_DIR = "/root/lanremote-relay/downloads" # 电脑端对外发的是**安装包**,不是 zip(和 Gitee 发行版保持一致) UPLOADS = [ (f"dist/ykxmz-setup-{VER}.exe", f"{REMOTE_DIR}/ykxmz-setup-{VER}.exe"), (f"dist/ykxmz-server-{VER}.zip", f"{REMOTE_DIR}/ykxmz-server-{VER}.zip"), (f"dist/ykxmz-watch-{VER}.apk", f"{REMOTE_DIR}/ykxmz-watch-{VER}.apk"), ] def main() -> int: print("===== 1. 清掉旧版本 =====") _c, out, _e = run(f"ls {REMOTE_DIR}/ 2>/dev/null", timeout=30) for line in (out or "").splitlines(): name = line.strip() if name and VER not in name: run(f"rm -f '{REMOTE_DIR}/{name}'", timeout=30) print(f" 删除 {name}") print() print(f"===== 2. 上传 {VER} =====") for local, remote in UPLOADS: src = ROOT / local if not src.is_file(): print(f" [失败] {local} 不存在") return 1 upload(str(src), remote, 0o644) print(f" ✓ {src.name} ({src.stat().st_size / 1024 / 1024:.2f} MB)") print() print("===== 3. 部署最新 relay.py / net-tune.sh =====") for local, remote in (("relay/relay.py", "/root/lanremote-relay/relay.py"), ("relay/net-tune.sh", "/root/lanremote-relay/net-tune.sh"), ("relay/watchdog.sh", "/root/lanremote-relay/watchdog.sh")): upload(str(ROOT / local), remote, 0o755) print(f" ✓ {Path(local).name}") run("systemctl restart lanremote-relay", timeout=90) print(" 已重启中转服务") print() print("===== 4. 确认 =====") _c, out, _e = run( "sleep 4; echo ' 版本: '$(curl -s --max-time 8 " "http://127.0.0.1:8080/v1/health | head -c 100); " f"echo; ls -la {REMOTE_DIR}/ | tail -5", timeout=90) print(out) return 0 if __name__ == "__main__": sys.exit(main())