# -*- coding: utf-8 -*- """一键:上传 relay -> 重启 -> 拿隧道地址和管理钥匙 -> 跑端到端测试。 把这一串固定下来,省得每次手工拼。 """ from __future__ import annotations import re import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "_build")) from devssh import run, upload # noqa: E402 def main() -> int: print("===== 1. 上传 relay.py =====") upload(str(ROOT / "relay" / "relay.py"), "/root/lanremote-relay/relay.py", 0o644) print() print("===== 2. 重启 relay + 隧道 =====") _code, out, _err = run("bash /root/deploy_relay.sh", timeout=600, quiet=True) url = "" match = re.search(r"PUBLIC_URL=(\S+)", out) if match: url = match.group(1) if not url: print(" 拿不到隧道地址,部署输出:") print(out[-1500:]) return 1 print(f" 隧道地址: {url}") print() print("===== 3. 拿管理钥匙 =====") _code, key_out, _err = run("cat /root/lanremote-relay/data/admin_key.txt", quiet=True) admin_key = key_out.strip() print(f" 管理钥匙: {admin_key}") # 存起来,后面其它脚本要用 (ROOT / "_build" / "relay_info.json").write_text( '{"url": "%s", "adminKey": "%s"}' % (url, admin_key), encoding="utf-8") print() print("===== 4. 端到端测试 =====") result = subprocess.run( [sys.executable, "-u", str(ROOT / "_tests" / "test_relay_e2e.py"), url, admin_key], capture_output=True, text=True, encoding="utf-8", errors="replace") print(result.stdout) if result.stderr.strip(): print("[stderr] " + result.stderr[-500:]) return result.returncode if __name__ == "__main__": sys.exit(main())