Repository navigation
feat(ci): 每天从 preview 自动构建并滚动发布 Desktop AutoBuild(macOS/Windows/Linux) - #1839
Merged
Merged
Conversation
新增 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
关联 Issue / Linked issue
PR 类型 / Type
改动说明 / 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.ymlcron: "0 10 * * *"),也可以手动运行(workflow_dispatch,输入source_branch,默认preview)。定时运行不限制触发者;手动运行只允许仓库所有者或vars.LITHE_RELEASE_ACTOR里列出的账号,规则与 Desktop Release 相同。preparejob 记下源分支当前的提交、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 天,不再压缩。publishjob 只在所有平台都成功后运行,只有它拿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(新增)desktop-AutoBuild,永远不标记为 latest。标签与旧客户端更新器读取的AutoBuild分开,旧客户端不会把 Viva 包当成更新。--clobber覆盖同名资源,把标签移到本次提交,重写标题(Lithe Desktop AutoBuild — 构建自 YYYY-MM-DD HH:MM:SS UTC)和中英文说明,最后删掉本次没有产出的旧资源(例如版本号变了以后的旧包)。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)。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
viva package只支持tar.gz和deb,按讨论不做 rpm。MACOS_SIGNING_CERTIFICATE、WINDOWS_SIGNING_CERTIFICATE_BASE64等)目前也没配置,产物暂时未签名,发布说明会如实写明。AutoBuild 用的 secret 名称和 Desktop Release 相同,以后配置好,两条工作流会同时开始签名。要公证还需要 Apple Developer 账号,并把公证凭据传给viva package。desktop-v预发布包使用同一个应用身份app.lithe.viva,没有旧 Lithe-Dev 那样的独立身份。应用内更新整体还没接入(见功能矩阵updates-check-download)。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
多平台对齐
范围检查 / 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/下生成的矩阵视图统一日志系统 / 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
./scripts/macos/verify/...在 Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 后已不存在,实际路径是./scripts/desktop/verify/verify-runtime-bundle-immutability.sh.artifacts/desktop/lithe-core-rust与 Desktop Release 的路径和 key 都相同,工作树资源复用清单不需要改无用代码与重构 / Dead code and refactoring
desktop-release.yml原来的内联 MinGW/NSIS 脚本已删,改为调用 actionrefactor标签的 Issue,没有在本 PR 顺手处理:[Feature] desktop-ci.yml 的 Windows 测试仍内联一份 MinGW-w64 安装步骤,改用共享的 setup-desktop-windows-build-tools #1838验证 / Verification
actionlint检查desktop-autobuild.yml、desktop-release.yml、desktop-ci.ymlbash -n+shellcheck -S warning检查两个新脚本package-autobuild.sh打桩 dry-run(package-desktop.sh替换为只生成产物文件).sha256;只有签名身份或只有证书时 exit 1;缺 dmg 时 exit 1 并报出路径;架构非法或缺少参数时 exit 2publish-autobuild.sh打桩 dry-run(gh替换为只记录参数)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./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEADnode scripts/i18n/verify-app-language-localization.mjs、node scripts/i18n/generate-i18n.mjs --check./scripts/desktop/verify/verify-runtime-bundle-immutability.sh未能执行的检查和原因:
schedule/workflow_dispatch只在默认分支main上生效,Draft PR 不会运行它。第一次真实运行要等合入 main。提交前确认 / Final checks
preview创建(基于e145b2b3c,推送前确认 preview 没有新提交);目标分支preview.build/、target/、dist/、.artifacts/等产物,没有凭据、个人路径和未脱敏的日志或截图