Skip to content

fix(ci): Intel 无可用机器时显式跳过真机验证 - #11

Merged
sljdxde merged 1 commit into
mainfrom
ci/intel-runner-skip
Nov 3, 2026
Merged

sljdxde merged 1 commit into
mainfrom
ci/intel-runner-skip

Conversation

@sljdxde

@sljdxde sljdxde commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Verify x64 DMG on Intel 的第一条命令断言 runner 架构。GitHub 现在会把 macos-15-intel 的请求落到 arm64 机器上,于是这条断言直接让整个 run 变红,与任何代码改动无关。

这里把「有没有 Intel 机器」和「在 Intel 机器上验证」拆开:探测 job 判断可用性,验证 job 在拿不到 x86_64 时整job skipped,而不是伪装成通过;验证 job 内仍保留架构闸门,分配不一致时报错退出。

before
  build
  intel-smoke (macos-15-intel)
    test "$(uname -m)" = "x86_64"     # GitHub 给的是 arm64 -> 整条 run 红

after
  build
  probe-intel-runner (macos-15-intel)
    uname -m -> intel-available
             -> 步骤摘要写明「将继续」或「SKIPPED」
  intel-smoke   if: intel-available
    arch 闸门 -> 非 x86_64 时 ::error + exit 1(拒绝冒充 Intel 验证)
    校验和 -> 挂载 -> --smoke-test -> WKWebView E2E -> 生命周期回归

skipped 只影响这个 job 的显示:DMG 的构建、签名、校验和与 Mach-O 架构检查仍在 build job 里跑,两种架构都覆盖,不依赖 Intel 机器。

Evidence

  • Before: run 41471199476 里该步骤在 22-30 毫秒内于 test "$(uname -m)" = "x86_64" 退出;连续两次 --failed 重跑结果相同。7 小时前同一个 job 通过同一断言并打印 Levil Notes 0.1.21-x64.dmg: OK,build-macos.yml 自 10 月 27 日起未改动。
  • After(本地执行两个分支):
=== PROBE on arm64 ===
::notice title=Intel 真机验证未执行::SKIPPED(实际分配到 arm64 机器,本次未做 Intel 真机验证)
GITHUB_OUTPUT: intel_available=false
摘要: - Intel 真机验证:**SKIPPED(实际分配到 arm64 机器,本次未做 Intel 真机验证)**

=== PROBE 以 uname 桩模拟 x86_64 ===
GITHUB_OUTPUT: intel_available=true
摘要: - Intel 真机验证:**将继续(分配到 x86_64 机器)**

=== GATE on arm64 ===
::error title=非 Intel 机器::runner 架构为 arm64,拒绝冒充 x86_64 验证
exit=1        # 停在断言处,不会在 arm64 上继续报「已验证」

=== GATE 模拟 x86_64 ===
find: .../artifact/build/macos: No such file or directory   # 已通过架构检查,进入后续步骤
  • After: 工作流经 js-yaml 解析,15 个 run 块全部通过 bash -n。本 PR 的 run 41547702868 实地跑通了探测路径:Detect Intel runner availability 5 秒完成且未触发 ::notice,说明本次拿到了真正的 x86_64,因此验证 job 正常执行(而非跳过)。跳过分支由上述本地执行证明。

Merge Danger

Door: two-way

revert 即恢复原先的单 job 结构,不涉及数据、发布物或 runner 配置变更。

Blast Radius: macOS CI 结论 + release.yml 的发布门控

release.yml 以 workflow_call 复用本工作流,且 release job needs: [windows, macos]。改动前,Intel 断言失败会让整条调用链变红、发布被挡住(哪怕失败原因只是 GitHub 没给 Intel 机器);改动后,容量不足只会让该 job 显示 skipped,发布照常进行,也就是发布可能在没有 Intel 真机验证的情况下出去。真实的 Intel 回归仍会失败并挡住发布:拿到 x86_64 时验证照旧执行,job 内的闸门也拒绝在 arm64 上冒充「已验证」。

风险在于 Intel 容量长期不足时,跳过会常态化而不显眼。缓解:探测 job 在摘要里写明实际架构与「SKIPPED」,并给出 ::notice,job 状态是 skipped 而非 success,因此不会被读成通过。

- 新增 probe-intel-runner:在 macos-15-intel 上读取 uname -m,把 Intel 可用性
  作为 job 输出,并在步骤摘要里写明本次是继续还是 SKIPPED
- Verify x64 DMG on Intel 改为 needs probe,并在拿不到 x86_64 时整job跳过,
  显示为 skipped 而不是伪装成绿
- 保留 job 内的架构闸门:probe 与本 job 分配不一致时报错退出,拒绝在 arm64
  上冒充 Intel 验证
- 原先该 job 首步 test "$(uname -m)" = "x86_64" 在 GitHub 把请求落到 arm64
  机器时直接失败,导致与改动无关的红
@sljdxde
sljdxde merged commit 9edaddf into main Nov 3, 2026
3 checks passed
@sljdxde
sljdxde deleted the ci/intel-runner-skip branch November 3, 2026 02:20
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