Skip to content

[Feature] Linux / CLI / TUI 加「有新版」提示(Android 已有 UpdateChecker,可复用) #60

Description

@Ma6302

背景

我在 Ubuntu 云服务器的 Docker 里跑 zcode-proxy(docker compose,镜像 ghcr.io/tridefender/zcode-proxy:latest,容器 CMD 就是 serve),桌面端是单文件 zcode-proxy.exe / --cli serve。这块目前没有任何"有新版本"的提示:

端 现在的更新体验
Android ✅ 已经有 Android-APP/app/src/main/java/com/zcode/proxy/UpdateChecker.kt:启动自动查 releases/latest、可手动"检查更新"、能"忽略此版本"、GitHub 不可达时静默失败
CLI / TUI ❌ 只有 --version 和面板横幅里的 VERSION(src/index.ts:38),要知道有没有新版得自己去 Releases 页面比对
Docker ❌ 连"镜像有新 tag 了"都不会说,只能自己想起来 docker compose pull

VERSION 是硬编码常量(src/index.ts:38),而 .github/workflows/release.yml 的 bump job 发版时会把它改写成 tag 版本,所以"当前版本"和 releases/latest 的 tag_name 是一对可以直接比较的值。

期望

第一层(建议先做):只提示,不自动替换

  • TUI / serve 启动时查一次(或每 24h 一次)https://api.github.com/repos/TriDefender/zcode-api/releases/latest,比 VERSION 新就打印一行,例如:
    • 独立二进制:update available: v4.7.6 (current v4.7.5) — https://github.com/TriDefender/zcode-api/releases/latest
    • 识别到容器环境时(/.dockerenv 存在):update available: v4.7.6 — docker compose pull && docker compose up -d
  • 建议同时给:--version 顺带一行、一个手动入口(TUI 快捷键 / zcode-proxy update --check / 未来 Web 面板上的按钮),以及一个能关掉的开关(env 或 config.yaml,例如 ZCODE_UPDATE_CHECK=off)。
  • 失败必须静默:GitHub 不可达 / 限流 / 解析异常都不该影响启动,也不该影响代理转发(Android 那版的注释里明确写了"绝不影响启动流程")。
  • 隐私:这会是项目里唯一主动出网的地方,只发一个带 User-Agent 的匿名 GET,不带任何本机信息。

第二层(可选,有前提):Linux 独立二进制的真自更新

  • 只在"从 Releases 下载的独立二进制"场景有意义:下载对应资产(zcode-proxy-linux-x64 / zcode-proxy-linux-arm64 / zcode-proxy-darwin-* / zcode-proxy.exe)→ 校验 → 原子替换 → 提示重启。
  • Docker 场景建议明确不做自更新:镜像不可变,进程替换自己没有意义;正确做法是提示用户 docker compose pull,真要自动化就交给宿主机的 watchtower / cron。
  • 前提:现在 release 里没有校验文件(v4.7.5 的 assets 只有 5 个二进制 + app-debug.apk),自更新下载完无从校验完整性。建议先在 .github/workflows/release.yml 里 files: dist/* 旁边加一份 SHA256SUMS,再考虑做自更新。

也许能省很多事的实现建议

  • Android 那套逻辑几乎是现成的,可以 1:1 翻成 TS(大约 60 行,无新依赖):releases/latest + Accept: application/vnd.github+json + 必须带 User-Agent(否则 403) + 10s 连接 / 15s 读取超时 + 任何异常返回 null;版本比较沿用同一个"取前三个数字段逐位比较"的规则;UpdatePrefs 的"跳过此版本 / 自动检查开关"可以映射成 config.yaml 的一节或 env。
  • 运行形态判断:/.dockerenv 存在 → Docker 文案;否则按 process.platform + arch 拼资产名。Bun 里 fetch 直接可用,不需要新依赖。
  • 将来如果有前端 UI:可以把结果并进面板的状态接口(或加一个 checkUpdate 控制命令),由服务端查询、前端只负责显示 —— 这样无头 + 浏览器场景都能看到,也避免让浏览器直连 GitHub(CSP / 企业网络 / 隐私都更麻烦)。

环境

  • zcode-proxy 4.7.5(Docker + Ubuntu 云服务器,前面还挂过一层 nginx)
  • 桌面端:Windows 单文件 exe / --cli serve
  • Android 端 4.7.2 上已经能用上述检查

(顺带说明:我搜过现有 issue、含已关闭的,没有关于 Linux / CLI 更新提示的重复项;#48 是安卓包版本号不同步,已关闭。)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions