关于 action-audit
用于只读审计组织内 GitHub Actions 引用的技能,可针对指定 Action 搜索或全面检查未固定引用。它依据 Bitwarden 工作流检查器的固定规则分类并报告结果,附带修复指引。
主要功能
- 01事件与组织范围审计模式
- 02搜索 GitHub 工作流文件
- 03分类 Action 引用及固定状态
- 04应用 Bitwarden 固定规则
- 05报告结果与修复指引
适用场景
- 01检查受影响 Action 的引用位置
- 02查找组织内不合规的 Action 固定
- 03修复前审查 Action 引用
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bitwarden/ ai-plugins --skill action-audit安装后在 Claude Code 中输入/action-audit确认已加载。
详细介绍
规则
- 此技能严格为只读。 不要修改、创建或删除任何文件。
- 不得调用会修改数据的 API。 可自由使用
gh apiGET 请求。不要使用-X POST、-X PUT、-X PATCH或-X DELETE。 - 标明不确定之处。 如果某项发现存在歧义,请在报告中注明,不要猜测。
固定版本合规规则
在对任何操作引用进行分类之前,请先阅读 ${CLAUDE_PLUGIN_ROOT}/skills/bitwarden-workflow-linter-rules/SKILL.md,并将 step_pinned 规则作为以下所有步骤的合规判定标准。该技能是判断合规与否的唯一依据。
模式
incident(默认):针对特定操作进行定向搜索,适用于操作遭到入侵或已弃用的情况。audit:全面扫描整个组织中的所有工作流文件,查找不合规的操作引用。
步骤 1:解析上下文
根据用户的请求确定模式:
- 如果用户指定了某个操作(例如
tj-actions/changed-files),请使用 incident 模式。 - 如果用户要求全面扫描未固定版本的操作,请使用 audit 模式。
- 如果提到了替代操作,请记下并在修复步骤中处理(由
action-remediate技能另行负责)。
步骤 2:全组织搜索
Incident 模式 — 搜索指定操作:
gh search code "uses: <action-name>" --owner <org> --path .github/workflows/ --limit 100
同时搜索不带 uses: 前缀的内容,以查找间接引用:
gh search code "<action-name>" --owner <org> --path .github/workflows/ --limit 100
Audit 模式 — 查找所有工作流文件并提取 uses: 引用:
gh search code "uses:" --owner <org> --path .github/workflows/ --limit 100
然后,对每条引用应用 ${CLAUDE_PLUGIN_ROOT}/skills/bitwarden-workflow-linter-rules/SKILL.md 中的 step_pinned 合规筛选规则。
注意: GitHub 代码搜索索引可能会在近期推送后延迟数分钟至数小时更新。搜索结果可能无法反映最新提交。请在输出中注明此限制。
步骤 3:解析并显示结果
对于每条 uses: 引用(不包括本地 ./ 路径),确定:
- 仓库和文件路径
- 当前
uses:值(完整行) - 操作类型:
internal— 以bitwarden/开头third-party— 其他所有类型(本地路径除外)
- 固定状态:
hash— 固定到完整的 40 位 SHAtag— 固定到版本标签(例如@v3、@v1.2.3)branch— 指向命名分支(例如@main、@master)none— 未指定引用
- 是否合规: 应用
${CLAUDE_PLUGIN_ROOT}/skills/bitwarden-workflow-linter-rules/SKILL.md中的step_pinned规则 — 合规标记 ✅,否则标记 ❌。
显示表格:
| 仓库 | 文件 | 当前引用 | 类型 | 固定状态 | 是否合规 |
|---|---|---|---|---|---|
| ... | ... | ... | ... | ... | ... |
在 incident 模式下,包含所有行。在 audit 模式下,省略合规(✅)的行。
如果没有发现不合规项,请告知用户并停止。
第 4 步:确定修复目标
根据操作类型和模式应用正确的修复方法。不要对所有不合规引用一视同仁。
事件模式 — 已提供替换操作:
如果用户在第 1 步提到了替换操作,不要解析受影响操作的 SHA,而应解析替换操作的 SHA:
gh api repos/<owner>/<repo>/commits/<ref> --jq '.sha'
向用户提供解析出的替换 SHA 和验证链接(https://github.com/<owner>/<repo>/commit/<sha>)。在最终确定前请用户确认。
内部操作(bitwarden/):
- 预期的修复方式是将 ref 更改为
@main。无需解析 SHA。 - 如果操作当前使用的是 SHA,不要自动将其视为不合规——SHA 固定比
@main限制更多,可能是有意为之(例如,在安全事件期间冻结,或为确保可复现性而固定)。请告知用户,并询问是否要将其更改为@main,然后再将其列入修复清单。
第三方操作:
- 为每个唯一的不合规操作解析当前 SHA:
gh api repos/<owner>/<repo>/commits/<ref> --jq '.sha'
其中 <owner>/<repo> 是操作的仓库,<ref> 是目标标签或 main。
向用户提供:
- 解析出的 SHA
- 验证链接:
https://github.com/<owner>/<repo>/commit/<sha>
询问:“这个 SHA 看起来正确吗?输入 yes 确认,或提供其他 SHA。”
等待用户确认后再完成报告。
在审计模式下,按唯一的第三方操作分组,每个操作只解析一次,而不是按出现次数解析。
第 5 步:汇总报告
输出最终汇总:
| Repo | File | Current Reference | Type | Compliant | Remediation |
|---|---|---|---|---|---|
| ... | ... | ... | ... | ... | ... |
Remediation 列应包含:
- 对于内部操作:
change ref to @main - 对于第三方操作:解析出的 40 位 SHA + 要添加的行内注释(例如,
@abc123...def456 # v4.1.1)
告知用户,他们可以使用 action-remediate skill,根据这些发现应用修复。