用途
action-remediate 用于修复由 action-audit 技能识别出的 GitHub Actions 动作使用问题。它针对每个受影响仓库,按照既定的修复策略对工作流文件中的动作引用进行修正,并协助创建草稿 PR。
主要能力
- 按动作类型应用不同修复策略:
- pin to main:针对内部 bitwarden/ 动作,将引用改为 @main,例如
uses: bitwarden/gh-actions/action@v1改为uses: bitwarden/gh-actions/action@main,无需解析 SHA。 - pin update:针对外部动作,更新为经过验证的 40 位 SHA,并附内联版本注释,格式为
uses: <action>@<sha> # <original-ref>。 - replace:替换为其他动作。应用前需确认替换动作在 bitwarden/workflow-linter 的已批准动作列表中,然后替换为
uses: <new-action>@<sha> # <tag>。
- pin to main:针对内部 bitwarden/ 动作,将引用改为 @main,例如
- 为每个仓库创建修复分支:
git checkout -b fix/action-remediation-<action-name-slug>。 - 展示 git diff 并在继续前获取用户确认。
- 生成提交、推送命令供用户手动执行,并在推送确认后创建草稿 PR。
- 输出最终汇总,包含仓库、变更文件、PR 创建情况和备注。
使用方式
- 确认审计发现:确认要修复的仓库范围(全部、子集或特定仓库)、修复策略(pin to main、pin update 或 replace),以及目标 SHA、替换动作或 @main 的确认。若不清楚需先询问用户。
- 按仓库应用修复:询问用户仓库克隆的基础目录,检查
<base-dir>/<repo>是否存在本地克隆,不存在则跳过并告知用户。创建修复分支后按策略修改受影响文件,展示 diff 并获取确认。 - 提交、推送与创建 PR:不自行运行暂存、提交或推送命令,而是向用户展示建议命令块供其手动执行。用户确认推送后,使用
gh pr create创建草稿 PR,标题为 "Remediate <action-name> action usage",正文包含摘要、所采取的动作和原因。 - 最终汇总:输出所有操作的汇总表格,并提醒用户代码搜索结果可能存在延迟,若为安全事件需手动检查以确保没有遗漏仓库。
适用场景
- 修复由 action-audit 发现的 GitHub Actions 动作引用问题,如未固定引用、已弃用动作或被入侵动作。
- 需要批量对多个仓库进行动作修复并创建草稿 PR 的场景。
限制与安全约束
- 未经确认不得进行变更类 API 调用;
gh api的 GET 请求可自由使用,但使用-X POST、-X PUT、-X PATCH或-X DELETE的调用必须先展示给用户并获得批准。 - 禁止强制推送、删除分支或删除仓库。
- 仅修改
.github/下的文件,不得触碰工作流文件之外的应用代码、脚本或配置。 - 提交前需展示 diff 并获取确认。
- 所有 PR 必须以草稿形式创建。
- 遇到模糊的发现或可能破坏工作流的修复时,应停止并询问,而非猜测。
- 代码搜索结果可能存在延迟,安全事件场景下需手动验证是否遗漏仓库。