前言¶
在 DSH 里做仓库级自动化时,CI 成本往往藏在 workflow 细节里:同一 PR 被新提交 supersede 仍重复跑、矩阵过大、缺少 timeout-minutes、产物保留过久。人工翻 Actions 账单和 YAML 很难系统对照「实际跑了多久」与「规则上能否安全改一行配置」。
CI Diet(npm 包名 dsh-ci-diet)把静态 workflow 解析与可选的只读执行历史对齐,输出带证据等级与覆盖状态的发现项,并对部分规则生成字节级 YAML 补丁;改什么由你在 CLI 里显式 approve 后再 apply,不自动提交或推远端。下面介绍插件定位、能力与典型用法。
这是什么¶
- 名称与归属:社区插件 0disoft/dsh-ci-diet,维护者 0disoft;在 SkillHub 目录 分类为「联网工具」。
- 一句话:读取当前工作区的 workflow YAML,可选通过只读
gh api拉取执行历史,报告 runner 时间花在哪里,并对符合条件的项给出小而可 review 的 YAML 修改建议。 - 状态:README 标明 alpha,npm 已发布
dsh-ci-diet@0.2.0;合约、分析引擎、补丁引擎、CLI、DSH 插件工具与自包含 HTML 报告已实现并测试,DSH Web 端界面仍开放中。 - 许可证:MIT。
核心功能¶
输入与对比方式¶
- 当前工作树中的 workflow YAML。
- 可选:用只读方式同步的 GitHub Actions 执行历史(需
gh与联网;无网络时仍可做静态扫描)。
每条发现带有证据等级(observed、inferred、static)以及按规则的覆盖状态。
规则集(v0.1 计划内)¶
| 规则 | 发现内容 | v0.1 中的处理 |
|---|---|---|
| CD001 | 较新提交已 supersede 的 PR 运行 | 补丁:concurrency |
| CD002 | 重叠触发器 | 仅说明 |
| CD003 | 仅文档变更仍跑重检查 | 仅说明 |
| CD004 | 过大矩阵 | 仅说明 |
| CD005 | Job 无 timeout-minutes |
补丁:timeout-minutes |
| CD008 | 产物保留过久 | 补丁:retention-days |
规则集刻意保持较小;未通过真实仓库质量门的规则不会默认启用。README 注明 CD003、CD005 已实现但默认关闭(见 ADR-13)。
成本数字如何呈现¶
报告区分四类数值,不混用:
| 字段 | 含义 |
|---|---|
observedRunnerSeconds |
运行记录中的实际秒数 |
modeledRoundedMinutes |
按计费方式向上取整的 per-job 分钟 |
listPriceUsd |
按快照标价换算的美元 |
actualBilledUsd |
在无法证明前恒为 null |
报告内嵌所用定价快照(含内容哈希),便于复算;快照无法校验时不会产出报告。
明确不做的事¶
- 不 commit、push、开 PR、合并;不触发 workflow、不取消运行中的 job、不删产物或缓存。
- 不改分支保护;对 GitHub 无写权限,历史访问只读。
- 不用 LLM 判断 job 是否浪费。
- 补丁是对现有 YAML 的字节范围编辑;需你 review diff、显式
approve后再写入工作区。
安装与启用¶
全局安装 npm 包(也可不全局安装,用 npx dsh-ci-diet 跑同一 CLI;DSH 插件只需 profile 中有该包):
npm install --global dsh-ci-diet
dsh plugin --profile web add dsh-ci-diet
插件会添加一条默认禁用的 loader 项;只有需要同步执行历史时,再启用 networkEnabled。
环境要求(来自 README):
- Node
^22.19.0 || >=24.0.0 ghCLI:可选,仅用于执行历史- DSH
>=0.2.1-rc.2 <0.3.0-0 || >=0.2.2-rc.1 <0.3.0-0:可选,仅用于插件工具
安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,启用联网前应确认 gh 与网络策略符合团队要求。
典型用法¶
扫描与同步¶
先静态扫描(无网络):
ci-diet scan --cwd .
需要结合本 checkout 的 Actions 历史时:
ci-diet sync --network
生成计划、审批与应用¶
对可打补丁的发现生成计划(示例针对 CD001):
ci-diet plan --rule CD001 --workflow .github/workflows/ci.yml \
--claims ci-only,replace-safe
plan 在发现不可补丁、覆盖不允许写入、或规则依赖的策略快照过期时会拒绝写入。CD005 需要 --job 与 --minutes;CD008 需要 --job、--step,以及 --claims artifact-purpose:temporary,consumer-min-days:7。未经显式 approve 不会应用任何修改:
ci-diet approve --plan <planId> --confirm <digest tail>
ci-diet apply --plan <planId>
apply 只改写计划中的字节范围。需要回滚时:
ci-diet revert --change <changeId>
阅读报告与诊断¶
ci-diet report
ci-diet report --format html --out report.html
ci-diet diagnose
ci-diet prune
HTML 报告自包含(内联 CSS、无脚本、无外链),只读;审批留在 CLI(摘要与 nonce 校验)。diagnose 说明 job 名与 workflow 键的归因及采集覆盖;--require-complete 在任一轴不完整时以退出码 3 结束。CLI、HTML 与 DSH 工具文案支持含简体中文在内的多种语言,可通过 --lang 等机制选择;存储的报告以英文为主,展示时再翻译。
适用场景与注意¶
适合:已在用 GitHub Actions、希望用规则化证据找出明显浪费(如 superseded PR 运行、缺超时、产物保留过长),并愿意以「小 diff + 人工 approve」方式改本地 YAML 的团队或 DSH 智能体流程。
注意:
- 部分规则默认仅解释、不自动出补丁;默认关闭的规则需等质量门通过后再开。
- 联网历史依赖
gh与只读 API;静态扫描不依赖网络。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本包是其中面向 CI 成本与 workflow 卫生的一项联网类工具。
结尾¶
经过上面的步骤,你可以在 DSH profile 中挂上 dsh-ci-diet,用 ci-diet scan / sync 对照账单与 YAML,再对 CD001、CD005、CD008 等可补丁项走 plan → approve → apply 的闭环,且始终不自动改远端仓库。