Skip to content

ci/release: 收敛检查、并行发行并迁入签名汇总与 OSS 双源更新 - #1426

Open
aeoform wants to merge 7 commits into
betafrom
fix/ci-maintenance-consolidation
Open

aeoform wants to merge 7 commits into
betafrom
fix/ci-maintenance-consolidation

Conversation

@aeoform

@aeoform aeoform commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

摘要

修复近期 Cache maintenance 与 Sync MicYou DSP 的失败,按当前维护范围暂停 Linux egui 专属 CI/自动发行,并参考 #1412、#1417,在不继续扩张 VM 数量的前提下减少重复构建。

修复维护任务

Cache maintenance

  • 实际失败原因:失效 PR/旧代清理后,分支缓存仍有 10.30 GB,超过 8 GB 预算。
  • 增加显式 --prune-budget:先清理失效 PR 与旧代,再按最后访问时间淘汰分支缓存至预算内。
  • 保留 tag、开放或状态不可读 PR 的缓存;受保护内容独占超额时仍失败,不静默掩盖超额。
  • 补齐 pull-requests: read;PR 关闭事件只执行默认分支脚本,不以 actions: write 执行 PR 代码。
  • 基于线上数据只进行过 dry-run:预计 10.30 → 7.48 GB,未实际删除缓存。预算淘汰可能导致后续冷构建。

Sync MicYou DSP

  • 上游新增依赖其设备宿主的 AEC 可用性检测,导致 DSP-only 适配补丁冲突。
  • 审查并刷新补丁,固定版本更新至 692ecbb9cee1ac45da590cadb59b645f23c1ea65;导入的 Rust、模型和许可证字节保持不变。
  • API 请求使用只读 token 避免匿名限流;源码下载不携带 token。未来真实补丁冲突仍须失败并人工审查。

工作流整理与覆盖变化

  • iOS 检查迁入 ci.yml,复用统一变更检测,保留 test / device-build 检查名和全部原有步骤。两项没有产物依赖,改为并行;VM 总数不增加,但峰值并发增加一个槽位,测试失败时可能已有设备构建开销。
  • 参考 perf(ci): 并行 iOS 检查并补齐 Rust 缓存与超时证据 #1417,iOS host/device 分离 Rust 缓存,键包含 Xcode/Rust/lockfile 身份,device 区分 iOS 16;仅 beta push/手动写入,PR 只读。补充长步骤与 curl 下载超时,保留续传/SHA-256;Boost 校验后才从临时文件提升为正式归档,host/device timings 保留 7 天。不恢复独立 iOS workflow、不缓存模型或生成源码。新缓存体积与预热收益待线上测量,受 8 GB 维护预算约束。
  • Windows 平台敏感契约合入现有 stable VM,保留前置检查;不再重复 checkout、npm 安装、前端构建和 PowerShell 解析。
  • 按维护范围要求暂停 Linux egui 专属自动化:删除 check-linux-egui.yml、release-linux-egui.yml、CI 调用及桌面 tag 派发。保留 Linux 源码、本地打包/校验脚本与本地契约。
  • 覆盖代价:不再自动执行 Linux Core/egui、fcitx5、remote TLS 和 deb/rpm 原生验证;Ubuntu 上的浏览器、Android、鸿蒙任务仍保留。恢复 Linux 发行仍须设备验收。
  • 原有独立 Windows frontend and contracts check 不再产生;其断言改由 Windows stable checks 执行并纳入 Windows checks 汇总。若分支保护单独要求旧名称,需同步调整。

进一步减少重复编译(参考 #1412)

  • 保留已有浏览器分路、stable/MSRV 隔离、feature-on 诊断的 test profile、backend target 复用及发布优化等级。
  • macOS 沙箱契约、Windows CPAL/COM 与临时诊断/录音/所有权/runtime harness 复用主 host target;Cargo 仍按版本、features、profile 决定安全复用,不复用不兼容产物。
  • 所有权脚本尊重外部 target,并从相同目录寻找执行文件;无变量的本地运行维持原隔离默认值。
  • Windows 增加手动 windows_build_jobs=2/4 对照入口,push/PR 和 macOS 默认仍为 2;concurrency group 包含该参数,不让对照互相取消。未新增 job 或大规格 VM。
  • 记录 CPU、核心数、内存、Rust/Cargo 和并行度,便于后续区分硬件、缓存与代码因素。
  • 修复既有离线 Cargo 复用测试受全局 build.target-dir 污染的问题,所有 fixture 命令显式使用同一临时 target。

后续发行不再生成重复下载别名

  • 仅改变此配置生效后的新运行;不迁移或删除已有 Release 附件。
  • 桌面停止生成/归档固定名称副本,上传收集器同时过滤旧别名 artifacts,避免部分重跑再次附加。
  • Android 仅上传原始版本 APK 和统一签名索引;忽略目录中遗留的别名及其签名。
  • HarmonyOS 仅生成并上传 OpenLess_harmony_arm64.hap,SHA256SUMS 只列这一份;保留商店签名流程。
  • 保留 macOS .app.tar.gz 更新包及签名、CDN manifest 生成/传递;旧 alias helper 仅留作历史/手动用途,自动发行不再调用。
  • 兼容性提醒:新 Release 不提供旧固定别名。配套网站 PR chore: 将 OSS 发行同步迁移至主仓库 aeoform/openless-workspace#1 改为优先原始安装包,仍兼容历史别名。历史 Release 固定名链接保留。
  • 增加行为验证:模拟遗留别名 artifact/APK 的上传收集,保证新上传列表仅含原包及其签名。

单一签名 JSON、阿里云优先与 OSS 迁移

详细设计、限制和切换步骤见 docs/release-distribution.md。

  • 新 Release 将各原包的 Minisign 签名汇总为一份 updater-signatures.json,记录 schema、tag、精确文件名、原始签名、长度及摘要。临时 .sig 仍用于生成 CDN 清单;新 Release 不再附加多个独立 .sig。
  • 桌面/Android 发布 job 共用同一 tag 的并发锁,先读取已有草稿索引再合并本平台,任意完成顺序/重跑不丢失其他平台;无聚合 VM。旧格式草稿维修不迁移,已发布版本拒绝改写。
  • 新客户端的 GitHub API/网页发现优先读索引、兼容历史 .sig;最终仍用内置公钥验签安装包,不把 JSON 摘要代替来源认证。
  • 适配 fix(updater): download Aliyun artifacts first and fall back to GitHub #1399,Windows/macOS/Android 下载均优先阿里云对应 tag/同名原包;探测失败回退 GitHub。桌面还在下载中断/验签失败时克隆原 resource 重试 GitHub,不重新选择版本;Android 每次尝试均完整验签。
  • 保留当前 GitHub 独立版本发现、CDN 备份和 Android 防降级,阿里云清单故障不应切断新客户端的 GitHub 发现路径。安装失败不触发换源安装。
  • 旧客户端限制:只认识独立 .sig 的现有客户端升级到首个索引版本时,必须使用仍内嵌签名的 CDN 清单;它们不能在 CDN 全故障时独立解析新索引。这无法仅修改未来附件解决。旧 Release 不动。
  • 从网站仓库迁入主仓库 mirror-release.yml / mirror-release.py:published/edited 事件、手动/dispatch、每 6 小时补偿。只用默认分支工具执行带凭据的 job;校验摘要和 Minisign 后,先成功上传包,再推进七目标滚动清单;保留历史独立 .sig 兼容(包括旧版 Tauri 无 version comment 的 Stable)。
  • 不再沿用网站每 15 分钟全量下载 3+3 标签/purge;同步最新 Stable/Beta,不清理历史 OSS 对象,不修改 GitHub 附件。
  • 凭据已恢复:从用户先前提供的历史会话恢复 OSS_BUCKET、OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET,已通过标准输入安全配置到主仓库,并核对 Secrets 名称与更新时间;未回显或落盘密钥。本机只读 OSS 探测网络超时,尚不能宣称凭据在线验收通过。仍需合并并成功跑一次主仓库同步,再合并网站配套 Draft PR 建议增加新功能 #1 停用旧任务。目前线上旧任务未禁用。

合并 Release 入口,平台同时构建

  • release-tauri.yml 统一显示为 Release (all platforms),tag 只进入这一条 workflow。
  • 一次轻量 prepare-release 预检创建/验证共享草稿;桌面三目标、Android 四 ABI、Harmony 随后平行启动,不再等待其他平台完成。
  • Android/Harmony 改为同一个 run 的本地 workflow_call;Harmony 不再在桌面发布后才被 dispatch,也不再轮询等桌面创建 Release。自动 HAP checkout 固定到触发提交,手动维修保留 tag 输入。
  • Android 删除独立 tag push,防止合并后同一标签重复构建四个 ABI;保留每周 smoke、手动/signed-debug 入口。桌面 branch/schedule 和 Windows 草稿维修在预检跳过时仍可运行。
  • 同一个 run 共用 artifact 命名空间:桌面下载只匹配 macOS/Windows,不重复拉取 APK、HAP 或商店签名产物。
  • 桌面/Android 的签名索引发布段仍用同 tag 的互斥锁防止丢记录;构建阶段没有相互等待。没有增加 ABI/桌面矩阵数量或提高默认编译并行度。
  • 整体仍保持草稿、由管理员确认发布;不改历史附件。预检遇到已发布目标、API 失败、tag/渠道错误时停止,不重新打开 Release。
  • 草稿查询改为 gh release view:REST GET /releases/tags/<tag> 对真实草稿返 404,旧写法会误判为“尚未创建”并重复建 Release,签名汇总也会当作无旧索引而覆盖另一平台记录。现只把 release not found/HTTP 404 当缺失,其他错误直接失败;索引附件改按 assets[].apiUrl 下载(id 是 GraphQL node ID,不是 REST 数字 ID)。已用现存 Beta.5 草稿实测只读:正确识别为已有草稿,并保持其历史 .sig 格式不变。
  • 新增/调整契约覆盖同根 DAG、仅一次 tag 触发、手动/周检保留、产物隔离、草稿重跑只读、Stable/Beta 创建和发布保护;完整 170 个测试文件与 Actionlint 通过。
  • 仅消除实际依赖等待,未实际触发产品发行,尚无新 Release 的端到端耗时对照。

性能依据与限制

完整记录见 docs/ci-runner-balance.md。修改前样本:Windows 独立前端 VM 95s,其中契约 42s;Linux 两台 VM 合计约 17 VM-min;iOS 两项串行 475s + 879s。

这些只支持优化方向,不是修改后的远端加速结果。不把 VM-min 当成墙钟时间,也不承诺未经测量的提速百分比。桌面发行 Intel Mac/Windows 约 29 分钟的关键路径仍待后续受控测量。

验证

  • npm test:生产前端构建及全部 170 个 JS/TS 测试文件通过。
  • 4 个 Python harness 路由/模式测试、9 个 MicYou 单元测试通过。
  • 指定 target 下真实 Rust 所有权 helper:7 项单测和 2 项编译失败边界通过。
  • MicYou 离线与当前上游联网校验通过。
  • iOS 下载行为测试覆盖首次成功、超时后续传、持续超时、损坏拒绝发布及已验证文件复用。
  • Actionlint、相关 Prettier 检查、iOS shell 脚本语法及 git diff --check 通过。
  • 前一提交 b45711a7 的完整远端 CI:15 项检查全部通过(run 42818661012)。
  • 直接包含生产更新模块的 Rust harness:50 项测试通过(含发现、索引/历史签名、源合并、APK 验签与受限元数据传输)。
  • 新增 7 项镜像生成测试:新索引、历史签名/旧 CLI 格式、缺包、摘要/验签失败及错误 tag/渠道。
  • 签名发布顺序、重跑合并、历史/已发布保护及桌面下载中断后一次 GitHub 重试测试。
  • 网站 TypeScript、脚本语法、原始安装包选择检查通过;配套 PR 保持 Draft,未切换线上任务。
  • 本次追加更新链路及发行改动后的远端 CI;未实际触发产品发行。
  • 从历史用户消息恢复并配置主仓库三个 OSS Secrets,核对配置存在与更新时间。
  • 修复 Harmony IPC 自动生成快照漏更新,并新增只读 --check,纳入完整前端测试防止再漏;本地 170 个测试文件通过。
  • 追加更新链路的远端 Android cargo check、macOS checks、Windows stable/MSRV 检查通过(run 42837557955);Harmony 在快照检查处失败,当前提交修复该问题。
  • Harmony 修复后的完整远端 CI 通过:run 42840396456。
  • 完整 170 个测试文件、新增草稿查询/索引下载回归测试、Actionlint 通过。
  • 本次统一并行 Release 改动对应远端 CI;真实 OSS 同步及设备/原生更新安装验收。
  • 下一次真实 tag 发版的并行耗时;未触发任何发行。
  • 同提交、相同 runner/缓存条件下的性能对照;尚未提高默认编译并行度。

@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-10T12:46:51.238842Z
We couldn’t complete this review. Comment @codex review to try again.
b45711a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@aeoform aeoform changed the title ci: 修复维护任务、暂停 Linux 自动化并优化检查资源复用 ci: 收敛检查与维护任务,暂停 Linux 自动化并去除重复发行附件 Nov 10, 2026
@aeoform aeoform changed the title ci: 收敛检查与维护任务,暂停 Linux 自动化并去除重复发行附件 ci/release: 收敛检查、合并签名并迁入 OSS 同步与双源更新 Nov 10, 2026
@aeoform aeoform changed the title ci/release: 收敛检查、合并签名并迁入 OSS 同步与双源更新 ci/release: 收敛检查、并行发行并迁入签名汇总与 OSS 双源更新 Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant