Skip to content

feat(ci): 每天从 preview 自动构建并滚动发布 Desktop AutoBuild(macOS/Windows/Linux) - #1839

Merged
xiaoyumuxi merged 2 commits into
previewfrom
ci/1794-desktop-autobuild
Nov 13, 2026
Merged

xiaoyumuxi merged 2 commits into
previewfrom
ci/1794-desktop-autobuild

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进

改动说明 / What changes

背景 / Why

#1799 删掉旧客户端后,旧 AutoBuild 用的 release-preview-macos.yml、release-preview-windows.yml 也一起删了。现在 Viva 桌面端只有 Desktop Release:要手动推 desktop-vX.Y.Z 标签,并且每次都跑完整验证。想试最新 preview 的人没有每日构建可下载。

本 PR 新增 Desktop AutoBuild 工作流,作用同以前的 AutoBuild:每天从 preview 构建 macOS、Windows、Linux 安装包,滚动发布到一个固定的 prerelease。和正式发版不同,它只构建和发布,不跑测试,也不验证安装包。

改动 / Changes

新工作流 .github/workflows/desktop-autobuild.yml

  • 触发:每天 10:00 UTC(北京时间 18:00)定时运行(cron: "0 10 * * *"),也可以手动运行(workflow_dispatch,输入 source_branch,默认 preview)。定时运行不限制触发者;手动运行只允许仓库所有者或 vars.LITHE_RELEASE_ACTOR 里列出的账号,规则与 Desktop Release 相同。
  • prepare job 记下源分支当前的提交、desktop/viva.toml 的版本,以及 UTC 构建号 YYYYMMDD.HHMMSS 和构建时间。之后各平台都检出这个提交,运行期间有人推送也不会混入两份源码。定时运行时,如果 desktop-AutoBuild 标签已经指向这个提交,就跳过构建,不浪费 runner。
  • build 矩阵(fail-fast: false):macOS arm64(macos-26)、Windows x64(windows-2022,x86_64-pc-windows-gnu)、Linux x64(ubuntu-22.04)、Linux arm64(ubuntu-22.04-arm)。Core 构建缓存与 Desktop Release 用同一个 key,两条工作流共用一份 release 构建缓存。产物以 artifact 形式保留 3 天,不再压缩。
  • publish job 只在所有平台都成功后运行,只有它拿 contents: write。发布脚本从工作流自己的提交(github.workflow_sha)检出,不从被构建的分支取。
  • 并发组 desktop-autobuild,cancel-in-progress: false:同一时间只有一次发布,后来的运行排队等待。

scripts/ci/desktop-autobuild/package-autobuild.sh(新增)

  • 调用 scripts/desktop/package-desktop.sh 打包。macOS 出 dmg、zip,Windows 出 NSIS 安装程序和 zip,Linux 出 deb 和 tar.gz。打好的包复制到 dist/autobuild/,每个文件附 .sha256,缺文件或空文件时直接失败。
  • 签名判断规则与 package-release.sh 一致:配置了签名 secret 才签名,配置不完整(例如只有证书没有密码)就失败,什么都没配就 --no-sign。每个平台只拿到自己的签名 secret。

scripts/ci/desktop-autobuild/publish-autobuild.sh(新增)

  • 发布到滚动 prerelease desktop-AutoBuild,永远不标记为 latest。标签与旧客户端更新器读取的 AutoBuild 分开,旧客户端不会把 Viva 包当成更新。
  • 流程:release 不存在就先创建,然后用 --clobber 覆盖同名资源,把标签移到本次提交,重写标题(Lithe Desktop AutoBuild — 构建自 YYYY-MM-DD HH:MM:SS UTC)和中英文说明,最后删掉本次没有产出的旧资源(例如版本号变了以后的旧包)。
  • 说明里写明:源分支和提交、版本和构建号、各平台下载文件、只有 Apple 芯片版本、不会自动更新,以及按 secret 是否存在给出的签名和公证状态,附 Gatekeeper / SmartScreen 的打开方法。

Windows 构建工具抽成 composite action

  • 新增 .github/actions/setup-desktop-windows-build-tools/action.yml,内容是原先 desktop-release.yml 里 "Ensure Windows build tools" 的 MinGW-w64 + NSIS 安装脚本,原样搬过来,没有改行为。
  • desktop-release.yml 改为 uses: ./.github/actions/setup-desktop-windows-build-tools(-40 行),AutoBuild 也用这个 action。

CI、文档与矩阵

  • desktop-ci.yml 的 "Check shell script syntax":两个新脚本加入 bash -n 和 shellcheck -S warning。
  • docs/viva-migration.md 发布工作流那一行补充 AutoBuild 的平台、频率和标签。
  • 功能矩阵 updates-check-download.json 只改 releaseSource,写明 AutoBuild 不注入更新源、也没有独立的开发版身份。实现状态和验证状态不变(partial / pending)。
  • Agent Note:
    • 2026-09-13-ci-build-cache-and-artifact-strategy.md:写明 AutoBuild 与 Release 共用 Core 缓存 key 和 Windows 工具 action,并说明 AutoBuild 由 main 上的定时任务运行,所以它保存的缓存其他分支和标签都能复用。
    • 2026-09-13-macos-update-signing-and-release-strategy.md:写明 AutoBuild 只构建和发布,使用 app.lithe.viva,两条工作流都不传公证凭据。
    • 两篇都更新了适用范围。

不在本 PR 范围内 / Out of scope

  • rpm:viva package 只支持 tar.gz 和 deb,按讨论不做 rpm。
  • Intel Mac:只出 Apple 芯片包,和旧 AutoBuild 一样。
  • 公证:旧工作流从来没有公证过,仓库里也没有 Apple 公证凭据,所以没有可复用的公证流程。签名 secret(MACOS_SIGNING_CERTIFICATE、WINDOWS_SIGNING_CERTIFICATE_BASE64 等)目前也没配置,产物暂时未签名,发布说明会如实写明。AutoBuild 用的 secret 名称和 Desktop Release 相同,以后配置好,两条工作流会同时开始签名。要公证还需要 Apple Developer 账号,并把公证凭据传给 viva package。
  • 应用内更新与开发版身份:AutoBuild 不注入更新源或渠道,和 desktop-v 预发布包使用同一个应用身份 app.lithe.viva,没有旧 Lithe-Dev 那样的独立身份。应用内更新整体还没接入(见功能矩阵 updates-check-download)。
  • desktop-ci 里另一份 MinGW 安装:desktop-ci.yml 的 Windows 测试 lane 里还有一份内联的 "Ensure MinGW-w64",与新 action 的 MinGW 部分重复。这是既有重复,已建单 [Feature] desktop-ci.yml 的 Windows 测试仍内联一份 MinGW-w64 安装步骤,改用共享的 setup-desktop-windows-build-tools #1838,本 PR 不改。
  • docs/ci-builds.md 的过时引用:它仍引用 Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 删除的 5 个工作流(release-preview-macos.yml、ci-windows.yml、release-windows.yml、release-preview-windows.yml、release-official-plugins.yml)。Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 约定文档的改写方向由维护者决定,本 PR 没改,也没建单。
  • 首次运行:schedule 和 workflow_dispatch 只在默认分支生效。本 PR 合入 preview 后,要等进入 main 才会按时运行或能手动触发:gh workflow run desktop-autobuild.yml -f source_branch=preview。

类型专属:feat

多平台对齐

  • 两端都具备:同一条工作流同时构建并发布 macOS(arm64)和 Windows(x64)包,另外还发布 Linux x64 / arm64 包

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/updates-check-download.json:只改 releaseSource,两端实现状态和验证状态保持 partial / pending,没有虚报验证
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh 和 ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的理由:已更新

统一日志系统 / Structured logging

N/A:只改 CI 工作流和打包、发布脚本,没有改应用里的日志事件或失败路径。

界面文案 / i18n

N/A:没有新增应用界面文案(发布说明是 GitHub Release 正文,不走应用 i18n)。两项 i18n 检查仍然跑了,都通过,见验证表。

逻辑归属 / Logic placement

N/A:没有业务逻辑,只有 CI 编排和 shell 脚本。

性能与内存 / Performance and memory

N/A:不改应用运行时,没有新增后台功能、子进程、缓存或依赖。

设置 / Settings

N/A:没有设置项改动。

插件契约 / Plugin contract

N/A:不涉及插件契约、能力版本或宿主方法。

发行包与资源 / Bundle and resources

  • 运行时不向已安装的 app bundle 或 Windows 安装目录写入:本 PR 不改应用代码。已运行发行包不可写检查,模板里的 ./scripts/macos/verify/... 在 Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 后已不存在,实际路径是 ./scripts/desktop/verify/verify-runtime-bundle-immutability.sh
  • [N/A] 没有新增下载、解压、生成或缓存资源:AutoBuild 缓存的 .artifacts/desktop/lithe-core-rust 与 Desktop Release 的路径和 key 都相同,工作树资源复用清单不需要改

无用代码与重构 / Dead code and refactoring


验证 / Verification

命令或操作 平台 结果
actionlint 检查 desktop-autobuild.yml、desktop-release.yml、desktop-ci.yml macOS 本机 通过
bash -n + shellcheck -S warning 检查两个新脚本 macOS 本机 通过
package-autobuild.sh 打桩 dry-run(package-desktop.sh 替换为只生成产物文件) macOS 本机 未签名和签名两种情况都复制 dmg、zip 并生成 .sha256;只有签名身份或只有证书时 exit 1;缺 dmg 时 exit 1 并报出路径;架构非法或缺少参数时 exit 2
publish-autobuild.sh 打桩 dry-run(gh 替换为只记录参数) macOS 本机 release 不存在时先 create --prerelease --latest=false,再依次 upload --clobber、PATCH 移动标签、edit 标题和说明(prerelease、非 latest、非 draft);删掉本次没有产出的 lithe-0.6.9-darwin-arm64.dmg;中英文说明渲染正确
./scripts/agent-notes/verify-agent-notes.sh macOS 本机 217 篇通过
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS 本机 217 项通过
./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD macOS 本机 通过
node scripts/i18n/verify-app-language-localization.mjs、node scripts/i18n/generate-i18n.mjs --check macOS 本机 通过
./scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS 本机 静态检查通过(desktop 的 macOS 与 Windows 源码)

未能执行的检查和原因:

  • 真实工作流运行:schedule / workflow_dispatch 只在默认分支 main 上生效,Draft PR 不会运行它。第一次真实运行要等合入 main。
  • 真实打包:macOS、Windows、Linux x64 / arm64 的 runner 打包本 PR 都没跑。Windows action 是从 Desktop Release 原样搬来的,Desktop Release 下次发版时才会真正走到它。
  • 签名路径:仓库没有配置签名 secret,签名和"配置不完整就失败"只在打桩 dry-run 里验证过,没有用真实证书验证。
  • 两个 dry-run 的打桩脚本放在会话临时目录,没有提交进仓库。

提交前确认 / Final checks

  • 分支从最新的 preview 创建(基于 e145b2b3c,推送前确认 preview 没有新提交);目标分支 preview
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交 .build/、target/、dist/、.artifacts/ 等产物,没有凭据、个人路径和未脱敏的日志或截图
  • 本次没有启动任何 Lithe 应用或子进程

新增 Desktop AutoBuild 工作流,作用同旧客户端的 AutoBuild:只构建和发布,不跑测试,也不验证安装包。

- 触发:每天 03:17 UTC 定时,或由仓库所有者 / LITHE_RELEASE_ACTOR 手动触发(可选分支,默认 preview)。
  定时运行时如果 desktop-AutoBuild 已经指向同一个提交,就跳过构建。
- 产物:macOS arm64(dmg、zip)、Windows x64(NSIS 安装程序、zip)、Linux x64/arm64(deb、tar.gz),
  每个文件附 .sha256。所有平台都构建成功后才发布。
- 发布:滚动 prerelease desktop-AutoBuild,永不标记为 latest。每次覆盖同名资源、把标签移到本次提交、
  重写标题(构建自 YYYY-MM-DD HH:MM:SS UTC)和中英文说明,删掉本次没有产出的旧资源。
  标签与旧客户端更新器读取的 AutoBuild 分开。
- 签名:沿用 Desktop Release 的签名 secret 名称,配置了才签名;不传公证凭据,所以 macOS 包不公证。
  说明里按实际签名状态写清楚。
- Windows 的 MinGW-w64/NSIS 安装从 desktop-release.yml 抽成 composite action
  setup-desktop-windows-build-tools,Release 与 AutoBuild 共用;Core 构建缓存与 Release 用同一个 key。
- desktop-ci 的 shell 语法检查和 shellcheck 加入两个新脚本;迁移清单、功能矩阵和两篇 Agent Note 同步。

Refs #1794
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 13, 2026 04:10
@xiaoyumuxi
xiaoyumuxi merged commit b418024 into preview Nov 13, 2026
4 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant