接入 Mac universal 构建管线与 Jenkins 归档 Job #430

Merged
suzmii merged 21 commits from feat/jenkins-mac-build into master 2026-09-21 01:02:04 +08:00
Member

关联 #406

本 PR 交付 AGC macOS 完整构建管线:先把 universal 双架构原生资源与发布合同做对,再补锁定依赖校验与隔离 smoke,最后接入本机 Jenkins Agent 的 archive-only 构建 Job;在此基础上启用 sccache 编译缓存,并解决合并主线后暴露的首装 DMG 选择缺陷。

分支 feat/jenkins-mac-build,共 6 个提交(含 1 个合并提交),净差异 20 个文件 / +741 −67。


一、背景

  • AGC 此前只有单架构 macOS 路线;Jenkins 侧只有 Linux 与 Windows 节点,Mac 包依赖本地手工构建,缺少可复现、可归档、可回溯的构建入口。
  • 现状(见 docs/project-memory/plans/【里程碑】Mac通用安装包与构建管线-2026-09-18.md):universal 本地 DMG 已验收,但「接入 Jenkins」尚未落地,也没有任何 Jenkins 侧的成功证据。
  • 目标:在不引入发布、签名、公证与调度的前提下,交付「双架构资源合同 → 锁定依赖校验 → 隔离 smoke → Jenkins archive-only 产物」的最小闭环。

二、落地方案

1. universal 双架构原生资源合同

位置 改动前 改动后
src-tauri/tauri.macos.conf.json 单一 resources/codex/mac-native/ 映射 7 个文件 拆成 darwin-arm64/darwin-x64/ 两套目录,各映射完整 7 个文件
src-tauri/build.rs 仅按当前 TARGET stage 一套资源 apple-darwin 下先清空 staging,再逐 aarch64-apple-darwin / x86_64-apple-darwin 完整 stage 两套;避免 Tauri universal 两次 Cargo 编译共用 staging 时「后编译的切片覆盖前一架构」
scripts/build-release.mjs universal-apple-darwin 被直接拒绝 resolveManifestPlatformKeys 接受 universal,返回 darwin-aarch64 + darwin-x86_64 两个键,同 URL / 同签名
src-tauri/build_support/codex_bundle.rs 单一布局 双架构布局,运行期按当前切片选目录

原生包保持上游相对路径、清单与元数据,不做 lipo 合并 Codex 二进制——code-mode host 与 zsh 仍有架构身份,合并会破坏其寻址。

2. 锁定原生依赖预备与完整性校验

  • 新增 scripts/prepare-macos-codex.mjs:按 lockfile 条目下载两架构 Codex 包,逐一校验 sha512 integrity、归档清单与目标目录,产出到 resources/codex/mac-native/darwin-*(两个目录已加入 .gitignore)。
  • 新增 prepare-macos-codex.test.mjs 4 项单测(锁定条目解析、integrity 校验、归档清单校验、路径约束)。

3. 隔离 smoke 与配置门禁

  • scripts/check-macos-bundle.mjs 支持 --universal:对每个架构分别校验资源摘要、原生身份、可执行位与正式 Codex 选择,并在隔离 HOME/PATH 下做 app-server 握手与「缺 code-mode host 必须拒绝」的负向检查。
  • scripts/check-config.mjs 同步支持 universal 目标,避免配置门禁仍然只认单架构。

4. Mac Jenkins Agent 与 archive-only Job

新增 jenkins/Jenkinsfile.ai-game-creator-shell-macos-build

  • 节点:label 'genarrative-agc-macos',要求 EXCLUSIVE、单 executor;disableConcurrentBuilds(),90 分钟超时,归档保留 10 份 / 产物 3 份。
  • 四个阶段:Checkout(固定提交 + 专用 workspace guard,落在 $AGC_AGENT_ROOT/workspace/* 之外直接失败)/ Toolchain and dependencies / Validate and build universal / Archive only。
  • 归档仅 .dmg.sha256、非敏感 build-manifest.json 与源码 commit;不归档用户 HOME、secret 或全量日志。
  • 新增 scripts/build-macos-ci.mjs(Jenkins 专用入口):显式剥离 TAURI_SIGNING_* / APPLE_* / AGC_OSS_*,构建前要求 ≥8 GiB 可用空间,输出 universal app + DMG + SHA-256 + 构建清单。
  • 762f03715:工作区根目录改用 Jenkinsfile 内默认值,去掉对节点环境变量属性解析的依赖。
  • fc46cabb7:为 LaunchAgent 注入 Node / npm / Cargo / Homebrew 工具链 PATH。
  • 运维文档新增「AGC macOS 手动构建节点」章节。

5. sccache 编译缓存

改动前 RUSTC_WRAPPER 在 Jenkinsfile 与 build-macos-ci.mjs 两处被清空,universal 双架构每次把全部依赖 crate 从零编译,逼近 90 分钟超时。

位置 改动前 改动后
Jenkinsfile environment RUSTC_WRAPPER = '' sccache + CARGO_INCREMENTAL = '0' + SCCACHE_CACHE_SIZE = '20G' + GENARRATIVE_AGC_MACOS_CACHE_ROOT = 'caches/genarrative-jenkins/agc-macos'
Toolchain 阶段 打印 sccache --version,缺失时明确提示回退
Build 阶段 解析缓存根 → SCCACHE_DIR + mkdir -p,构建后打印 sccache --show-stats
build-macos-ci.mjs 强制 RUSTC_WRAPPER = '' 不再清空,wrapper 由管线显式声明
运维文档 未提编译缓存 补缓存根、覆盖变量与回退语义

缓存根固定在 ~/caches/genarrative-jenkins/agc-macos,与 stdb-module 的 ~/caches/genarrative-jenkins/stdb-module 约定一致:放在 HOME 下而不是 WORKSPACE 内,避免 workspace 重建后无改动也近似冷构建。CARGO_TARGET_DIR 仍指向 workspace 内 target,跨构建继续复用增量产物——两者正交,不互相替代。节点未装 sccache 时打印提示并回退真实 rustc

6. 合并主线后的集成修复

合并 origin/master(88 个提交)后,主线最新提交 e3682fd06 新增的 selectFirstInstallArtifact 与本管线的 universal 合同不兼容:它对 universal-apple-darwin 推导架构为 x64,找不到 _<version>_x64.dmg,导致 createUpdateManifest 直接抛「首装 DMG 必须唯一匹配本次版本 0.1.67 和架构 x64,找到 0 个」。

  • build-release.mjs:为 universal-apple-darwin 增加分支,按 _<version>_universal.dmg 唯一匹配(与 build-macos-ci.mjs 的 DMG 命名一致)。
  • build-release.test.mjscreateDmgFixture 支持 universal 命名;universal 用例补首装包断言,锁定「两个平台键共用同一个 DMG」。

合并冲突仅 1 处(docs/project-memory/shared-memory/pitfalls.md 顶部双方各新增条目),解决方式为两边都保留:主线 2026-09-19 / 2026-09-17 两条在前,本分支的「universal 主程序必须配套双架构原生依赖」在后,并补齐标题前缺失的空行。

三、验证

证据
定向 Node 单测 build-release + cargo-features 33/33、prepare-macos-codex 4/4、release-oss 9/9 通过(合并前为 32/33,见第 6 节修复)
Jenkinsfile shell 语法 4 个 shsh -n / bash -n 全部通过
sccache 行为 空缓存目录首次构建 misses=1cargo clean 清空 target 后再次构建 hits=1,依赖不再重编译
sccache 环境契约 按新声明启动后 Cache location = ~/caches/genarrative-jenkins/agc-macos/sccacheMax cache size = 20 GiB
sccache 回退路径 PATH 中无 sccache 时打印提示并 unset RUSTC_WRAPPER
编码/配置门禁 提交经 Husky + lint-staged(ESLint + Prettier)通过

未完成、需要真实 Jenkins 实跑才能补的证据:本 Job 的首次 SUCCESS、归档产物存在性、sccache --show-stats 命中率与构建时长前后对比、Intel 真机(当前 x86_64 侧为 Rosetta)、GUI/账号/Provider 验收。

四、影响面与边界

  • 只扩展既有 Jenkinsfile 与应用打包脚本,不新增发布系统;不发布、不签名、不公证、不上传 OSS、不接入定时调度,不改 Windows 发布职责。
  • 节点仅接受匹配 genarrative-agc-macos 的可信构建;登录用户 Agent 不是安全沙箱。
  • 凭据(Agent secret、SSH key)留在仓库外,不进入源码、日志或归档。
  • 新增磁盘占用:sccache 缓存根上限 20 GiB,需在节点预留。
  • 合并提交 8c17e40d7 使用 --no-verify:该提交内容全部是主线已合入的文件(193 个,其中 99 个 js/ts),跳过 lint-staged 以免对主线代码重新格式化。

五、待办 / 需要确认

  1. 首次 Jenkins 构建成功后回填 SUCCESS、归档与 sccache 命中率证据。
  2. AGC_AGENT_ROOT:当前 LaunchAgent 的 -name/-workDir 指向 genarrative-agc-macos-01,而 Jenkinsfile guard 默认根为 .../genarrative-agc-macos-local;需确认节点配置是否已显式设置该变量,否则 Job 会在 Checkout 阶段直接失败。
  3. Tauri universal 打包产出的 DMG 命名需与本文第 6 节的 _universal.dmg 匹配式一致(当前按 build-macos-ci.mjs 的命名推定,需实跑确认)。
关联 #406 本 PR 交付 **AGC macOS 完整构建管线**:先把 universal 双架构原生资源与发布合同做对,再补锁定依赖校验与隔离 smoke,最后接入本机 Jenkins Agent 的 archive-only 构建 Job;在此基础上启用 sccache 编译缓存,并解决合并主线后暴露的首装 DMG 选择缺陷。 > 分支 `feat/jenkins-mac-build`,共 6 个提交(含 1 个合并提交),净差异 20 个文件 / +741 −67。 --- ## 一、背景 - AGC 此前只有单架构 macOS 路线;Jenkins 侧只有 Linux 与 Windows 节点,Mac 包依赖本地手工构建,缺少可复现、可归档、可回溯的构建入口。 - 现状(见 `docs/project-memory/plans/【里程碑】Mac通用安装包与构建管线-2026-09-18.md`):universal 本地 DMG 已验收,但「接入 Jenkins」尚未落地,也没有任何 Jenkins 侧的成功证据。 - 目标:在不引入发布、签名、公证与调度的前提下,交付「双架构资源合同 → 锁定依赖校验 → 隔离 smoke → Jenkins archive-only 产物」的最小闭环。 ## 二、落地方案 ### 1. universal 双架构原生资源合同 | 位置 | 改动前 | 改动后 | | --- | --- | --- | | `src-tauri/tauri.macos.conf.json` | 单一 `resources/codex/mac-native/` 映射 7 个文件 | 拆成 `darwin-arm64/` 与 `darwin-x64/` 两套目录,各映射完整 7 个文件 | | `src-tauri/build.rs` | 仅按当前 `TARGET` stage 一套资源 | `apple-darwin` 下先清空 staging,再逐 `aarch64-apple-darwin` / `x86_64-apple-darwin` 完整 stage 两套;避免 Tauri universal 两次 Cargo 编译共用 staging 时「后编译的切片覆盖前一架构」 | | `scripts/build-release.mjs` | `universal-apple-darwin` 被直接拒绝 | `resolveManifestPlatformKeys` 接受 universal,返回 `darwin-aarch64` + `darwin-x86_64` 两个键,同 URL / 同签名 | | `src-tauri/build_support/codex_bundle.rs` | 单一布局 | 双架构布局,运行期按当前切片选目录 | 原生包保持上游相对路径、清单与元数据,**不做 lipo 合并 Codex 二进制**——code-mode host 与 zsh 仍有架构身份,合并会破坏其寻址。 ### 2. 锁定原生依赖预备与完整性校验 - 新增 `scripts/prepare-macos-codex.mjs`:按 lockfile 条目下载两架构 Codex 包,逐一校验 `sha512` integrity、归档清单与目标目录,产出到 `resources/codex/mac-native/darwin-*`(两个目录已加入 `.gitignore`)。 - 新增 `prepare-macos-codex.test.mjs` 4 项单测(锁定条目解析、integrity 校验、归档清单校验、路径约束)。 ### 3. 隔离 smoke 与配置门禁 - `scripts/check-macos-bundle.mjs` 支持 `--universal`:对每个架构分别校验资源摘要、原生身份、可执行位与正式 Codex 选择,并在**隔离 HOME/PATH** 下做 app-server 握手与「缺 code-mode host 必须拒绝」的负向检查。 - `scripts/check-config.mjs` 同步支持 universal 目标,避免配置门禁仍然只认单架构。 ### 4. Mac Jenkins Agent 与 archive-only Job 新增 `jenkins/Jenkinsfile.ai-game-creator-shell-macos-build`: - 节点:`label 'genarrative-agc-macos'`,要求 EXCLUSIVE、单 executor;`disableConcurrentBuilds()`,90 分钟超时,归档保留 10 份 / 产物 3 份。 - 四个阶段:Checkout(固定提交 + **专用 workspace guard**,落在 `$AGC_AGENT_ROOT/workspace/*` 之外直接失败)/ Toolchain and dependencies / Validate and build universal / Archive only。 - 归档仅 `.dmg`、`.sha256`、非敏感 `build-manifest.json` 与源码 commit;不归档用户 HOME、secret 或全量日志。 - 新增 `scripts/build-macos-ci.mjs`(Jenkins 专用入口):显式剥离 `TAURI_SIGNING_*` / `APPLE_*` / `AGC_OSS_*`,构建前要求 ≥8 GiB 可用空间,输出 universal app + DMG + SHA-256 + 构建清单。 - `762f03715`:工作区根目录改用 Jenkinsfile 内默认值,去掉对节点环境变量属性解析的依赖。 - `fc46cabb7`:为 LaunchAgent 注入 Node / npm / Cargo / Homebrew 工具链 PATH。 - 运维文档新增「AGC macOS 手动构建节点」章节。 ### 5. sccache 编译缓存 改动前 `RUSTC_WRAPPER` 在 Jenkinsfile 与 `build-macos-ci.mjs` 两处被清空,universal 双架构每次把全部依赖 crate 从零编译,逼近 90 分钟超时。 | 位置 | 改动前 | 改动后 | | --- | --- | --- | | Jenkinsfile `environment` | `RUSTC_WRAPPER = ''` | `sccache` + `CARGO_INCREMENTAL = '0'` + `SCCACHE_CACHE_SIZE = '20G'` + `GENARRATIVE_AGC_MACOS_CACHE_ROOT = 'caches/genarrative-jenkins/agc-macos'` | | Toolchain 阶段 | 无 | 打印 `sccache --version`,缺失时明确提示回退 | | Build 阶段 | 无 | 解析缓存根 → `SCCACHE_DIR` + `mkdir -p`,构建后打印 `sccache --show-stats` | | `build-macos-ci.mjs` | 强制 `RUSTC_WRAPPER = ''` | 不再清空,wrapper 由管线显式声明 | | 运维文档 | 未提编译缓存 | 补缓存根、覆盖变量与回退语义 | 缓存根固定在 `~/caches/genarrative-jenkins/agc-macos`,与 stdb-module 的 `~/caches/genarrative-jenkins/stdb-module` 约定一致:放在 HOME 下而不是 `WORKSPACE` 内,避免 workspace 重建后无改动也近似冷构建。`CARGO_TARGET_DIR` 仍指向 workspace 内 target,跨构建继续复用增量产物——两者正交,不互相替代。节点未装 sccache 时打印提示并回退真实 `rustc`。 ### 6. 合并主线后的集成修复 合并 `origin/master`(88 个提交)后,主线最新提交 `e3682fd06` 新增的 `selectFirstInstallArtifact` 与本管线的 universal 合同不兼容:它对 `universal-apple-darwin` 推导架构为 `x64`,找不到 `_<version>_x64.dmg`,导致 `createUpdateManifest` 直接抛「首装 DMG 必须唯一匹配本次版本 0.1.67 和架构 x64,找到 0 个」。 - `build-release.mjs`:为 `universal-apple-darwin` 增加分支,按 `_<version>_universal.dmg` 唯一匹配(与 `build-macos-ci.mjs` 的 DMG 命名一致)。 - `build-release.test.mjs`:`createDmgFixture` 支持 universal 命名;universal 用例补首装包断言,锁定「两个平台键共用同一个 DMG」。 > 合并冲突仅 1 处(`docs/project-memory/shared-memory/pitfalls.md` 顶部双方各新增条目),解决方式为两边都保留:主线 `2026-09-19` / `2026-09-17` 两条在前,本分支的「universal 主程序必须配套双架构原生依赖」在后,并补齐标题前缺失的空行。 ## 三、验证 | 项 | 证据 | | --- | --- | | 定向 Node 单测 | `build-release` + `cargo-features` 33/33、`prepare-macos-codex` 4/4、`release-oss` 9/9 通过(合并前为 32/33,见第 6 节修复) | | Jenkinsfile shell 语法 | 4 个 `sh` 块 `sh -n` / `bash -n` 全部通过 | | sccache 行为 | 空缓存目录首次构建 `misses=1`;`cargo clean` 清空 target 后再次构建 `hits=1`,依赖不再重编译 | | sccache 环境契约 | 按新声明启动后 `Cache location = ~/caches/genarrative-jenkins/agc-macos/sccache`、`Max cache size = 20 GiB` | | sccache 回退路径 | PATH 中无 sccache 时打印提示并 `unset RUSTC_WRAPPER` | | 编码/配置门禁 | 提交经 Husky + lint-staged(ESLint + Prettier)通过 | **未完成、需要真实 Jenkins 实跑才能补的证据**:本 Job 的首次 SUCCESS、归档产物存在性、`sccache --show-stats` 命中率与构建时长前后对比、Intel 真机(当前 x86_64 侧为 Rosetta)、GUI/账号/Provider 验收。 ## 四、影响面与边界 - 只扩展既有 Jenkinsfile 与应用打包脚本,不新增发布系统;**不发布、不签名、不公证、不上传 OSS、不接入定时调度**,不改 Windows 发布职责。 - 节点仅接受匹配 `genarrative-agc-macos` 的可信构建;登录用户 Agent 不是安全沙箱。 - 凭据(Agent secret、SSH key)留在仓库外,不进入源码、日志或归档。 - 新增磁盘占用:sccache 缓存根上限 20 GiB,需在节点预留。 - 合并提交 `8c17e40d7` 使用 `--no-verify`:该提交内容全部是主线已合入的文件(193 个,其中 99 个 js/ts),跳过 lint-staged 以免对主线代码重新格式化。 ## 五、待办 / 需要确认 1. 首次 Jenkins 构建成功后回填 SUCCESS、归档与 sccache 命中率证据。 2. `AGC_AGENT_ROOT`:当前 LaunchAgent 的 `-name/-workDir` 指向 `genarrative-agc-macos-01`,而 Jenkinsfile guard 默认根为 `.../genarrative-agc-macos-local`;需确认节点配置是否已显式设置该变量,否则 Job 会在 Checkout 阶段直接失败。 3. Tauri universal 打包产出的 DMG 命名需与本文第 6 节的 `_universal.dmg` 匹配式一致(当前按 `build-macos-ci.mjs` 的命名推定,需实跑确认)。
suzmii added 6 commits 2026-09-19 17:12:56 +08:00
补齐macOS universal双架构Codex资源与构建校验
统一发布清单和检查脚本支持universal目标
新增锁定原生依赖完整性校验与隔离构建smoke
新增Mac Jenkins Agent归档构建Job与本机构建接入规范
移除不兼容的节点环境变量配置依赖
在Jenkinsfile中使用专用Agent根目录默认值
避免节点分配阶段环境变量属性解析失败
为LaunchAgent构建环境注入Node、npm、Cargo和Homebrew路径
原因:macOS universal 构建此前在 Jenkinsfile 与 build-macos-ci.mjs 两处把
RUSTC_WRAPPER 清空,依赖 crate 每次从零编译且双架构各编译一遍,逼近 90 分钟超时。

改动:
- Jenkinsfile 对齐 Linux 生产管线:RUSTC_WRAPPER=sccache、CARGO_INCREMENTAL=0、
  SCCACHE_CACHE_SIZE=20G,SCCACHE_DIR 固定到稳定缓存根
  ${HOME}/caches/genarrative-jenkins/agc-macos/sccache(可用
  GENARRATIVE_AGC_MACOS_CACHE_ROOT 覆盖),并输出 sccache --show-stats 供判断命中率。
- build-macos-ci.mjs 不再清空 RUSTC_WRAPPER,wrapper 由管线显式声明。
- 保留 CARGO_TARGET_DIR 指向 workspace 内 target,跨构建继续复用增量产物。
- 文档补充缓存根、覆盖变量与回退语义。

验证:sh -n/bash -n 通过;管线同款 node --test 34 项全通过;本地探针证明空缓存
首次 miss 编译、清空 target 后再次构建命中缓存不再编译。
- 冲突仅 1 处:踩坑文档顶部双方各新增条目(本次合并相对 master 落后 88 个提交)
- 解决方式:保留 master 的 2026-09-19 / 2026-09-17 两条在前,分支的
  「universal 主程序必须配套双架构原生依赖」在后;另补齐标题前缺失的空行
- 本次提交内容为上游已合入 master 的文件,跳过 lint-staged/Husky,
  避免对 master 侧 99 个 js/ts 文件重新格式化产生无意义改动
修复 universal 首装 DMG 选择以兼容主线新增校验
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m38s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 7m46s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m49s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m57s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m59s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m20s
Project CI / Repository checks (pull_request) Successful in 7m8s
Project CI / Native shell tests (pull_request) Successful in 13m34s
Project CI / Frontend tests (pull_request) Successful in 12m58s
Project CI / Backend tests (pull_request) Successful in 14m59s
Project CI / AI game creator shell web tests (pull_request) Successful in 5m8s
261228ed3f
合并 origin/master 后,e3682fd06 新增的 selectFirstInstallArtifact 对
universal-apple-darwin 会推导出架构 x64,匹配不到本管线产出的
陶泥儿_<version>_universal.dmg,createUpdateManifest 直接抛
「首装 DMG 必须唯一匹配本次版本 x 和架构 x64,找到 0 个」。

- build-release.mjs:为 universal-apple-darwin 增加分支,按
  _<version>_universal.dmg 唯一匹配(与 build-macos-ci.mjs 的命名一致)
- build-release.test.mjs:createDmgFixture 支持 universal 命名;universal 用例
  补首装包断言,锁定两个平台键共用同一个 DMG

验证:管线同款 node --test 33/33 通过(合并前 32/33);prepare-macos-codex
与 release-oss 用例同跑通过。
suzmii added 1 commit 2026-09-19 17:51:32 +08:00
Mac 渠道接入更新包签名、OSS 上传与渠道清单
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m17s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 7m25s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m26s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m34s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m9s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m17s
Project CI / Backend tests (pull_request) Successful in 11m30s
Project CI / Repository checks (pull_request) Successful in 11m36s
Project CI / Frontend tests (pull_request) Successful in 13m46s
Project CI / Native shell tests (pull_request) Successful in 16m19s
Project CI / AI game creator shell web tests (pull_request) Successful in 5m31s
b1cadd0cc8
问题:mac 侧此前只有 archive-only 构建,dev-mac 渠道不产出更新包、不上传、无渠道
清单,客户端拿不到 macOS 更新(里程碑曾因签名/公证凭据未就绪而暂缓)。

改动:
- build-macos-ci.mjs 改为 dev-mac 发布入口:开启 createUpdaterArtifacts 产出
  .app.tar.gz + .sig,生成 universal DMG 与渠道清单 latest.json,构建后用产物内
  烘焙的公钥复核签名,再按 AGC_RELEASE_DRY_RUN 决定是否上传 OSS
- 新增 verify-updater-signature.mjs(minisign ED 预哈希校验)+ 单测:验签失败或
  keyId 不一致立即失败关闭,绝不写 OSS
- Jenkinsfile:新增 AGC_RELEASE_VERSION / AGC_RELEASE_DRY_RUN(默认开启)/
  AGC_UPDATE_RELEASE_NOTES / OSSUTIL_BIN 参数;withCredentials 注入
  AgcUpdaterSigningKey(+密码) 与 AliyunAccessKeyId/Secret;归档补 latest.json、
  .sig 与更新摘要
- 既有单测口径更新:archive-only → 发布型,并新增「必须先验签再上传」守卫
- 文档:技术方案、里程碑、运维文档同步;Apple 签发与公证暂缺显式记录为
  未验证项(--no-sign、appleSigned=false、notarized=false)

验证:单测 11/11 + 42/42;Jenkinsfile 四个 sh 块语法通过;伪造 bundle 端到端
验证清单(两平台同 URL/同签名、universal 首装包被正确选中)、真实 Tauri 签名
验签通过、错钥匙报 keyId 不一致、篡改报校验失败、dry-run 上传计划顺序正确。
suzmii added 1 commit 2026-09-20 17:46:59 +08:00
Merge remote-tracking branch 'origin/master' into feat/jenkins-mac-build
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 11s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 11s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 11s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 12s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 12s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Native shell tests (pull_request) Failing after 14s
Project CI / Frontend tests (pull_request) Failing after 6s
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
bb1df3c6da
# Conflicts:
#	docs/technical/【技术方案】AGC客户端更新检查与下载-2026-08-31.md
suzmii added 1 commit 2026-09-20 18:51:44 +08:00
Mac构建并行度改为可调参数并记录首次缓存表现
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 18s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 19s
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Failing after 18s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
bdf6d0f556
CARGO_BUILD_JOBS从写死4改为Job参数默认6,适配8核共用机器
补充并行度与sccache首次全未命中的运维口径
增加Jenkinsfile并行度参数的回归断言
suzmii added 1 commit 2026-09-20 19:11:37 +08:00
修复Mac入口误用--no-sign导致更新包无签名
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Failing after 18s
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 19s
Project CI / Frontend tests (pull_request) Failing after 6s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
Project CI / Repository checks (pull_request) Failing after 12s
57017ee046
移除build-macos-ci的--no-sign:该标志会连带跳过updater的minisign签名
改为剥离APPLE_*凭据跳过Apple签名,保持更新包签名能力
构建清单按codesign实测记录appleSigned与签名类型
补充回归断言与运维、更新规范口径
suzmii added 1 commit 2026-09-20 19:58:40 +08:00
修复Mac构建产物不幂等导致的DMG重建失败
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 17s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / Native shell tests (pull_request) Failing after 16s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 17s
Project CI / Frontend tests (pull_request) Failing after 6s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
Project CI / Repository checks (pull_request) Failing after 12s
bd0f9f481a
构建前删除本次将写出的DMG、更新包与签名,避免同名文件让hdiutil失败
hdiutil create显式覆盖,杜绝残留对象影响本次产物
补充回归断言,防止旧签名让验签门禁误通过
suzmii added 1 commit 2026-09-20 20:44:18 +08:00
记录Mac构建管线首次端到端验收结果
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Failing after 17s
Project CI / Backend tests (pull_request) Failing after 17s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 18s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
Project CI / Repository checks (pull_request) Failing after 12s
c4b391cb84
回填build3成功的产物、验签、dry-run与耗时证据
补充--no-sign连带跳过更新包签名、残留产物不幂等两处踩坑
记录主crate重复编译这一剩余耗时优化点
suzmii added 1 commit 2026-09-20 21:00:15 +08:00
优化Mac构建管线并行度与入口健壮性
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 15s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 12s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 15s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 18s
Project CI / Frontend tests (pull_request) Failing after 8s
Project CI / Repository checks (pull_request) Failing after 16s
Project CI / Native shell tests (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
c0154c2aed
并行度参数默认改为8以吃满节点,并在说明里记录其作为rustc jobserver令牌上限的影响
产品名统一从Tauri配置推导,校验脚本从Info.plist读取可执行名,改产品名不再静默失效
隔离smoke改用ditto --clone复制副本,实测整轮6.8秒
Agent工作区守卫改为按目录约定匹配,节点改名后仍成立
签到同时取master以便解析上次发布commit,失败仅降级更新摘要
补充上述行为的回归断言
suzmii added 1 commit 2026-09-20 21:19:25 +08:00
记录Mac Job与节点描述的维护口径
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 18s
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Failing after 17s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
d4de81c128
补充Job描述与节点描述属Jenkins侧元数据、不随仓库同步的说明
记录该Job的config.xml POST返回500、须用脚本接口原地改描述以保留历史
同步并行度默认值与描述口径
suzmii added 1 commit 2026-09-20 21:34:28 +08:00
Merge remote-tracking branch 'origin/master' into feat/jenkins-mac-build
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 17s
Project CI / Backend tests (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 20s
Project CI / Native shell tests (pull_request) Failing after 19s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 19s
Project CI / Frontend tests (pull_request) Failing after 6s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
Project CI / Repository checks (pull_request) Failing after 12s
88090fcc6e
# Conflicts:
#	docs/project-memory/shared-memory/pitfalls.md
suzmii added 1 commit 2026-09-20 22:47:37 +08:00
把macOS渠道纳入定时发布并共用总版本号
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 17s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 16s
Project CI / Native shell tests (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 16s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
dbbbef8a0d
调度器在发号后同时触发macOS渠道构建,透传同一个总版本号与固定revision
macOS Job改为默认真实发布,演练需显式勾选
新增SKIP_IF_SUPERSEDED:节点离线期间排队的旧构建在恢复后自行让位
补充生产门禁规则与回归断言
同步调度与运维文档口径
suzmii added 1 commit 2026-09-20 22:54:37 +08:00
Merge remote-tracking branch 'origin/master' into feat/jenkins-mac-build
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 20s
Project CI / Backend tests (pull_request) Failing after 20s
Project CI / Native shell tests (pull_request) Failing after 20s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 21s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 21s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
Project CI / Repository checks (pull_request) Failing after 11s
62bffebf8e
# Conflicts:
#	docs/project-memory/shared-memory/pitfalls.md
suzmii added 1 commit 2026-09-20 22:58:50 +08:00
修复发号Job未授权调度器读取归档导致整轮调度失败
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 20s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 20s
Project CI / Native shell tests (pull_request) Failing after 19s
Project CI / Backend tests (pull_request) Failing after 20s
Project CI / Frontend tests (pull_request) Failing after 9s
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / AI game creator shell web tests (pull_request) Failing after 13s
d354e5e7c3
发号Jenkinsfile显式copyArtifactPermission授权调度管线
生产门禁新增该授权规则避免回归
运维文档补充生产者到调度器的Copy Artifact映射与失败后果
suzmii added 2 commits 2026-09-21 00:49:06 +08:00
过程中发现并修复:本地 pre-commit 钩子在提交合并时pipeline里prettier会重排无关文件,导致本PR携带与客户端无关的上下文
本提交把20个纯格式化文件恢复为主线内容,PR只保留macOS构建管线和发布链路相关改动
后续提交不再把这些文件纳入范围
修正Mac构建入口的个人路径、超时余量与过期文档口径
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 15s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 15s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 15s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 11s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 18s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 19s
Project CI / Native shell tests (pull_request) Failing after 18s
Project CI / Backend tests (pull_request) Failing after 19s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
Project CI / Repository checks (pull_request) Failing after 11s
65b7ae0e2b
Jenkinsfile的PATH改为按$HOME展开,移除写死的节点用户名
构建超时90分钟提高到150分钟并补失败/中断诊断,避免冷构建被中断在链接阶段
同步更新检查技术方案里dry-run默认值与调度接入的过期描述
新增回归断言:禁止个人Home路径、锁定超时余量与诊断文案
suzmii added 1 commit 2026-09-21 00:54:25 +08:00
Merge branch 'master' into feat/jenkins-mac-build
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 21s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 21s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 21s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 21s
Project CI / Native shell tests (pull_request) Failing after 20s
Project CI / Backend tests (pull_request) Failing after 20s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 20s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 20s
Project CI / Frontend tests (pull_request) Failing after 6s
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
b178431a57
suzmii merged commit 12c1e5f3f8 into master 2026-09-21 01:02:04 +08:00
suzmii deleted branch feat/jenkins-mac-build 2026-09-21 01:02:05 +08:00
Sign in to join this conversation.