中文EN

dsh-ci-diet

usage已测通过npmMIT

找出被浪费的 GitHub Actions 运行时间,并提出小而可审查的工作流补丁;任何修改都需要明确批准,并提供用于分析规则、历史上限、存储和成本估算的 DSH 设置页面。

下载量 / Downloads
1,805
依赖体积 / node_modules
3.93 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-ci-diet

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

CI Diet

[English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)

状态: alpha;dsh-ci-diet@0.5.2 已发布到 npm。当前源码树在现有契约、分析引擎、补丁引擎、CLI、DSH 工具、设置页面和自包含 HTML 报告之外,新增了 设置 → CI Diet Reports 审查页面。审查页面已在之前的提交中通过真实浏览器 E2E。一次性默认值迁移另行在 DSH 0.2.1-rc.2 的 configEditor、SettingsForms 和 Loader 运行时中验证,并不表示这次重新验证了浏览器页面渲染。DSH 插件现在默认开启 preflight、历史网络访问和本地应用。

DSH 默认值和迁移。 新配置档默认启用 preflightEnabled、networkEnabled、localApplyEnabled 以及 CD001、CD002、CD004、CD006、CD008。锁定配置档迁移会记录 defaultsRevision: 2。已经迁移到修订版 1 的配置档会保留之后选择的开关和规则。状态路径、保留期限、配额和现有数值型账户输入均会保留。除非主动启用,CD003 和 CD005 保持关闭。金额估算会自动使用两项账户输入;留空表示未知,显式填写 0 是有效的。以前启用过计费的配置档在省略某个值时,会保留其零默认值。

CI Diet 用于查找可能被浪费的 GitHub Actions 工作,保留每个发现背后的证据,并预览供人审查的小型 workflow 修改。

只安装本工具不会节省 runner 分钟。 支持的 DSH 部署命令会在运行前自动检查节省候选项;workflow 修改只有在审查和批准后才会应用。DSH 插件没有批准、apply 或 revert 工具,preflight 本身不会修改文件。设置页面保存工具配置并显示主机提供的会话级报告和计划,不会自行优化 workflow。已批准的本地写入默认开启,但应用仍需单独的 digest 批准。任何发现都不能保证降低成本。

preflightEnabled 默认为开启。在带 workdir 参数的受支持 stateless DSH bash tool 中,literal git push、npm|pnpm|bun publish、wrangler deploy 或 npm|pnpm|bun run deploy 执行前会做一次离线检查。它会把 npm CD006、仅 PR workflow 缺少 concurrency、以及未显式设置下载缓存的 Bun frozen install 作为候选项提示审查。存在候选项时,第一次命令不会执行;模型审查这些项目后重试同一命令即可放行。preflight 本身不会联网,也不会自动修改文件;应用 plan 仍需要人工批准。持久 shell 和复杂 shell wrapper 无法可靠识别,preflight 会跳过。节省量尚未测量,因此不声称节省。

功能

静态扫描读取目标检出目录中的 workflow YAML。可选的历史同步通过只读 gh api 调用收集最近的运行。每项发现都带有证据级别(observed、inferred 或 static)以及各维度的采集 coverage。

规则 · 查找内容 · 可能的 plan

CD001 · 被较新提交取代的 PR 运行 · concurrency 编辑

CD002 · 重叠的触发器 · 仅解释

CD003 · 仅文档变更仍执行重型检查 · 仅解释,默认关闭

CD004 · 过大的矩阵 · 仅解释

CD005 · 缺少 timeout-minutes 的 job · timeout 编辑,默认关闭

CD006 · npm / pnpm / Bun · [CD006](docs/spec/rules.md)

CD008 · 过长的 artifact 保留时间 · 保留时间编辑

CD001 针对因出现较新提交而重叠、已被取代的 PR 运行。CD005 为异常运行设置上限,不会缩短正常 job 的运行时间。CD008 改变 artifact 的存储保留时间,与 runner 分钟无关。CD003 和 CD005 在通过质量门槛前默认关闭。

CD006 还支持经过验证的 npm/pnpm 配置,以及使用 oven-sh/setup-bun@v2、随后执行 bun install --frozen-lockfile 并且采用受跟踪的文本文件 bun.lock 的 Bun 作业。Bun 会增加一个下载缓存步骤;安装和测试仍会运行。缓存恢复/保存的开销可能超过其收益。请参阅[当前缓存防护](docs/spec/rules.md#bun-dependency-cache-variant)和[一个实测示例](docs/measurements/2026-10-25-cache-review.md)。下面的 npm 示例展示了其中一种受支持的配置。

安装与升级

CLI 需要 Node ^22.19.0 || >=24.0.0。插件支持 DSH >=0.2.1-rc.2 <0.3.0-0 和 >=0.2.2-rc.1 <0.3.0-0。版本 0.3.1 已在 DSH 0.2.1-rc.2 上验证;不支持 DSH 0.3.0。

npm install --global dsh-ci-diet@0.5.2
ci-diet --version

如果不希望全局安装,请把命令名 ci-diet 替换为 npx dsh-ci-diet@0.5.2,例如 npx dsh-ci-diet@0.5.2 report --cwd .。

dsh plugin --profile web add dsh-ci-diet@0.5.2
dsh --profile web

安装后会注册插件工具、设置页面和 设置 → CI Diet Reports 审查页面。插件的 preflight、网络访问和本地应用默认开启。安装和启动不会调用 gh、收集历史、执行扫描或修改 workflow。

npm install --global dsh-ci-diet@latest
dsh plugin --profile web add dsh-ci-diet@latest

更新插件后重启 DSH。使用 dsh plugin --profile web list、ci-diet --version 或 npx dsh-ci-diet@latest --version 核对已安装版本。

首次扫描与历史报告

在要检查的仓库中运行这些命令。--cwd . 表示该仓库;--cwd 也可以接受其他路径,相对路径从实际生效的工作目录解析。第一个命令离线执行。历史采集需要单独、明确地允许网络访问。

ci-diet scan --cwd .
gh auth status
ci-diet sync --cwd . --network
ci-diet report --cwd .
ci-diet report --cwd . --format html --out report.html

scan 在没有网络的情况下输出静态报告;--json 或 --out FILE 可以写出该输出,但 CLI scan 不会把报告保存到状态存储。report 需要 CLI sync、插件 ci_diet_scan 或插件 ci_diet_sync 已保存的报告。在下面的纯 CLI 流程中,sync 会保存报告,随后 HTML 选项生成一个自包含文件。历史同步要求安装并认证 gh,且 gh 能读取该仓库的 Actions 运行和 job。sync --network 是 CLI 的网络启用方式,不需要 GitHub 写权限。历史不完整时仍会生成并保存报告,并标出覆盖不完整的维度。插件的离线 ci_diet_scan 会保存报告,因此可以直接在其后运行 ci_diet_report。

DSH 插件的网络访问默认开启,因此只要 gh 已安装并认证,就可以运行 ci_diet_sync。该开关只允许这个工具调用 gh;安装、启动和保存设置本身不会收集历史。要阻止插件联网,请在 设置 → CI Diet 中关闭 允许网络访问,然后选择 保存更改。该页面设置只作用于插件工具,不会开启 CLI 的 --network 参数。静态扫描和报告无需网络。设置页面本身不会执行优化。

清晰的聊天请求应写明执行顺序和审查边界。请把示例绝对路径换成自己的仓库路径:

以 cwd C:\work\my-repo 运行 ci_diet_scan,再用同一个 cwd 运行 ci_diet_sync 和 ci_diet_report。如果 gh 未认证或我关闭了网络访问,就在扫描后停止。如果用 ci_diet_plan 预览补丁,只显示编辑内容。不要批准、apply、revert、提交、推送或部署任何内容。

插件预览不会保存 plan。响应中的 nextCommand 会通过 CLI 重新创建 plan,使其持久保存并进入人工批准流程。

离线 npm 缓存 plan(CD006)

CD006 不需要运行历史。它匹配仓库根目录下的 job:actions/checkout 没有用户 with 选项,紧接其后恰好有一个未启用缓存的 actions/setup-node@v3 或 @v4 步骤,再下一步的 run 正好是 npm ci。根目录的 package.json 和 package-lock.json 必须是已提交的普通 JSON 文件。plan 只向 setup-node 添加 cache: npm 和 cache-dependency-path: package-lock.json,不改变 Node、action 版本、npm ci、测试或本地缓存。

ci-diet plan --cwd . --rule CD006 --workflow .github/workflows/ci.yml --job test --step 1
ci-diet plans --cwd . --plan PLAN_ID

--step 是 setup-node 步骤从 0 开始的索引;示例假设 checkout 是 0、setup-node 是 1。CLI plan 在内存中执行这次静态扫描,无需先 sync 就能保存 plan,并保留最新已保存的报告。插件 ci_diet_plan 仍需要已保存的报告,所以先运行 ci_diet_scan。审批和适用沿用下面的现有命令。plan 和 attestation 会在规划阶段保存;人工批准 plan 并运行 apply 之前,不会修改任何 workflow 文件。

CLI 命令参考

ci-diet scan --cwd .
ci-diet sync --cwd . --network
ci-diet sync --cwd . --network --repo OWNER/REPO --days 7
ci-diet report --cwd .
ci-diet report --cwd . --format json
ci-diet report --cwd . --format html --out report.html
ci-diet diagnose --cwd .
ci-diet prune
ci-diet changes --cwd .
ci-diet plans --cwd . --plan PLAN_ID
ci-diet report --cwd . --lang ko

scan 检查 workflow 文件。sync 仅在指定 --network 时读取历史;--repo 明确选择 OWNER/REPO,--days 在配置范围内调整回溯时间。report 输出文本、JSON 或 HTML,--out 相对于 --cwd 写入。diagnose 根据已保存历史解释 job 名称匹配和 coverage;加上 --require-complete 后,数据不完整会以退出码 3 结束。prune 按状态存储设置删除过期报告、plan 和缓存项。changes 列出已经应用的修改,plans 重新显示已保存的 plan。--config FILE 可为任意命令合并部分 JSON 配置。

审查、批准、apply 与 revert

成功的 CLI plan 会显示提议的 diff、类似 p_... 的真实 plan id,以及由 plan digest 最后 12 个字符组成的 confirmation。创建 plan 时会拒绝过期证据和其他不安全的写入;找不到 workflow 可能是用法错误并以退出码 1 结束。如果查看已保存 plan 时工作区或 workflow 消失,plans --plan 会隐藏 diff、保留 plan JSON、要求重新创建 plan,并以退出码 3 结束。workflow 字节与保存的源哈希不一致时也是如此。批准前请再次检查 diff 和 plan。

ci-diet 

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:9,最后更新 2026-10-26

链接

GitHub · Homepage · npm

同类插件