平台工程

CI 从 Release 抓二进制托管自有服务器 · 桌面应用国内直连下载

入档:2026-06-26 来源:把桌面小工具《工位池塘 Desk Pond》v0.5.0 发布到自有站 tiaozhuxiansheng.com,要给国内用户一个「点一下就下」的入口 状态:全链路跑通并验证(部署成功 + curl HTTP 200 + Content-Length 与构建字节逐字节一致)

一句话总结

要给一个 Windows 应用/游戏做国内直连、零维护的下载入口:别把二进制塞进 git,也别只甩 GitHub 直链(国内慢)——让 CI 在部署时从 GitHub Release 抓最新 .exe、随静态站产物一起 rsync 到自有(香港)服务器,主页按钮指向服务器上固定文件名的绝对地址。下载走香港服务器(国内直连),二进制不进仓库、不进 Pages 产物,每次部署自动同步到最新版。

为什么这么选(决策链)

可照做(CI 步骤)

在「构建 → rsync」之间插一步,从公开仓库的最新 Release 抓 .exe:

- name: 拉取最新 Release 二进制到 dist
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    mkdir -p dist/<app>/download
    asset_url=$(curl -sL -H "Authorization: Bearer $GH_TOKEN" \
      https://api.github.com/repos/<owner>/<repo>/releases/latest \
      | grep -o '"browser_download_url": *"[^"]*\.exe"' | head -1 \
      | sed -E 's/.*"(https[^"]+)".*/\1/')
    test -n "$asset_url"                       # 取不到 URL 就让 job 显式失败
    curl -fL "$asset_url" -o dist/<app>/download/<App>-Windows.exe   # -f:HTTP 错误即失败
# 之后照常 rsync dist 到服务器

主页下载按钮指向绝对地址(任何镜像访问都打到香港服务器):

<a href="https://你的域名/<app>/download/<App>-Windows.exe">下载 Windows 版</a>

关键设计点(都是会咬人的)

配套:刚发布、近零下载时可「补包」不升版本

UI 小修想立刻让下载用户拿到、且该版本刚发布几乎无人下载时:重新构建 → gh release upload <tag> <file> --clobber 替换资产 → 触发一次部署(gh workflow run)让服务器重抓。边界:一旦版本有真实下载量,必须升版本保持不可变性,不能再悄悄改旧版内容。

边界

关联文档

类型/平台工程