Skip to content

fix(doctor)+ci: 修复台式机丢失 sleep-policy 诊断,并引入快车道实现单次快速迭代 - #6

Merged
wangzhizhou merged 2 commits into
mainfrom
fix/sleep-policy-and-fast-ci
Oct 23, 2026
Merged

wangzhizhou merged 2 commits into
mainfrom
fix/sleep-policy-and-fast-ci

Conversation

@wangzhizhou

Copy link
Copy Markdown
Collaborator

背景

main 上 CI 连续 6 次红灯,唯一失败项是 macOS 的
C7-doctor-sleep-policy-on-macos(tests/conformance/c4_cli.bats:96)。

根因

platform.SleepPolicies() 要求 pmset -g custom 同时提供 AC Power: 与
Battery Power: 两个分支,否则整项跳过。GitHub macOS 虚拟机(以及所有台式
Mac:mini/Studio/iMac)只有 AC Power: 分支 → sleep-policy 检查从未输出。
这是产品缺陷而非测试问题:台式机用户永远看不到电源策略矛盾提示。

复现(注入只有 AC 分支的假 pmset):

$ ew doctor --json --offline   # 修复前
{"name":"curl"},{"name":"git"},…,{"name":"console"},{"name":"network"}   ← 没有 sleep-policy

测试之所以"只报 line 96",是 bats 在末尾断言上报错位置的表现,实际是整项缺失。

改动

修复(commit 1)

  • SleepPolicies() 返回「实际存在的分支」(AC 在前),新增纯函数 ParseSleepPolicies
  • doctor 按分支逐一诊断回显,任一分支矛盾即 ok=false
  • 单测:AC-only / 双分支顺序 / 无分支
  • conformance:注入假 pmset 固定「双分支」「仅 AC」「矛盾组合」三组用例,
    不再断言宿主真实电源状态(这类用例会随机型漂移)

CI 分层(commit 2)

  • Quick gate(Ubuntu,~1–2 分钟):ShellCheck + bash -n + shfmt + gofmt + vet + unit + conformance
  • 重矩阵仅 main 推送 + 确有代码改动 + quick 通过后跑:macOS ShellCheck、
    macOS/Windows conformance + Windows 原生冒烟、三平台安装链路 e2e、6 目标交叉编译
  • Changed paths 判定纯 docs/site/*.md 改动 → 跳过重矩阵
  • PR 只跑快车道;workflow_dispatch 支持 scope=fast|full;同分支新推送取消旧运行
  • 新增 make quick 与 docs/ITERATION.md(提交/分支/发布规范)

验证

  • make quick:73 用例全绿(18s)
  • ShellCheck + shfmt -d 无差异,gofmt/go vet 干净
  • 修复后 AC-only 假 pmset:✓ sleep-policy AC sleep=0m displaysleep=30m disksleep=0m(自洽)
  • 本机(有电池):AC …;Battery …(自洽)
  • 本 PR 自身即验证「PR 只跑快车道」:应只有 Changed paths + Quick gate 两个任务

原实现要求 `pmset -g custom` 同时提供 AC 与电池两个分支,否则整项跳过;
Mac mini/Studio/iMac 与 CI 虚拟机只有 `AC Power:` 分支,于是这项诊断从未生效
(GitHub macOS 虚拟机上 CI 每次红灯:`C7-doctor-sleep-policy-on-macos`)。

- power.go:SleepPolicies 返回「实际存在的分支」(AC 在前),新增纯函数
  ParseSleepPolicies 便于单测;ParseSleepPolicy 语义不变
- commands.go:按分支逐一诊断并回显,任一分支有矛盾即 ok=false
- 单测:AC-only(台式机)、双分支顺序、无分支三种情形
- conformance:注入假 pmset 固定「双分支 / 仅 AC / 矛盾组合」三组用例,
  不再断言宿主真实电源状态

验证:make quick(73 用例全绿);`ew doctor` 在 AC-only 假 pmset 下输出
「sleep-policy AC sleep=0m displaysleep=30m disksleep=0m(自洽)」
把 CI 拆成快车道与重矩阵,让一次迭代的反馈稳定在 2 分钟内:

- 新增 `Changed paths`:判定是否只有 docs/site/*.md 改动,纯文档提交不触发重矩阵
- 新增 `Quick gate`(Ubuntu,~1–2 分钟):ShellCheck + bash -n + shfmt +
  gofmt + go vet + go test + conformance;每次 push/PR 都跑
- 重矩阵(macOS ShellCheck、macOS/Windows conformance + Windows 原生冒烟、
  三平台安装链路 e2e、6 目标交叉编译)改为:仅 main 推送、确有代码改动、
  且 quick 通过后运行(`needs: quick`,红灯不再浪费平台机时)
- PR 只跑快车道;`workflow_dispatch` 支持 `scope=fast|full`;
  同分支新推送取消旧运行(concurrency.cancel-in-progress)

配套:

- `make quick`:本地 < 1 分钟门禁(shfmt 检查 + go test + conformance)
- `docs/ITERATION.md`:分层门禁、单次快速迭代、提交/分支/发布规范,
  并写明「依赖宿主环境的诊断项必须注入假命令」这条踩坑结论
- CONTRIBUTING vs AGENTS vs ACCEPTANCE 同步(CI 任务映射、用例数 71 → 73)

验证:make quick 全绿(73 用例,18s);本地 ShellCheck + shfmt 无差异;
ci.yml 通过 YAML 解析校验
@wangzhizhou
wangzhizhou merged commit aad16b4 into main Oct 23, 2026
6 checks passed
@wangzhizhou
wangzhizhou deleted the fix/sleep-policy-and-fast-ci branch October 23, 2026 09:01
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