github/gh-actions-lock

GitHub: github/gh-actions-lock

gh-actions-lock 是一个 gh CLI 扩展,为 GitHub Actions 工作流生成并验证依赖锁定文件,将所有 action 引用固定到确切 commit 以确保供应链可复现性。

Stars: 7 | Forks: 1

# gh-actions-lock 锁定您的 workflow 依赖。 ## 背景 gh-actions-lock 是 GitHub Workflow 依赖固定(Workflow Dependency Pinning)工作的一部分。它为仓库提供一个 lockfile,将每个 workflow 依赖固定到一个已验证的 commit,因此在 runner 上运行的内容正是您锁定的内容。开发仍在进行中,行为可能还会发生变化。 ## 要求 需要 [`gh` CLI](https://cli.github.com/)。请先安装它,然后再安装扩展: ``` gh extension install github/gh-actions-lock ``` ## 用法 扫描 `.github/workflows/` 目录下的每个 workflow,将每个可解析的 action 固定到一个 SHA,并更新 lockfile: ``` gh actions-lock ``` 在初次运行以接入 workflows 之后,当出现以下情况时,您将需要运行 `gh actions-lock`: - 创建了具有 `uses` 依赖的新 workflow。 - 现有的 workflow 添加或移除了 `uses` 依赖。 全目录运行(不带路径参数的 `gh actions-lock`)还会清理已从 `.github/workflows/` 中删除的 workflow 的 lockfile 条目,丢弃因删除而留下的任何孤立依赖。指定特定 workflow 的限定范围运行绝不会清理超出范围的条目。 针对分支或部分版本(例如 `main`、`v4`)的固定会被 lockfile 信任,并且不会在常规运行中重新解析。要将它们更新为当前的 上游 commit,请运行: ``` gh actions-lock --relock ``` `--relock` 会重新解析合法移动的 ref,并将 lockfile 重写为新的 SHA。记录的 commit 在上游不再存在的可疑固定会被作为错误留下 —— 请使用 `--accept-moved` 来同样重新解析 它们。 ### 自身仓库 action(`$/…`) `uses: $/…` 引用了与 定义文件**同一仓库**中的 action 或可重用 workflow,并在**运行的 commit** 处进行解析。因为它总是解析为 该仓库正在运行的 SHA,所以它是**固有固定的** —— 不需要 lockfile 条目,并且它在任何可以使用相对 `./…` 引用的地方都是有效的: ``` steps: - uses: $/actions/my-action # same-repo action, inherently pinned jobs: call: uses: $/.github/workflows/reusable.yml # same-repo reusable workflow ``` 结尾的 `@ref`(例如 `$/actions/my-action@v1`)会被拒绝 —— 该 ref 始终 是运行的 commit。 同仓库的 `./…` 复合 action 引用会在修复运行时自动转换为 `$/…`。 这将重写您的 workflows 以及仓库内 复合 action 定义(`action.yml`)中的 `./…` 步骤。只有解析为 仓库内 action 文件的 `./…` 路径才会被重写。要保持 `./…` 引用不变, 请使用 `--no-migrate-local-actions` 退出: ``` gh actions-lock --no-migrate-local-actions ``` ## 工作原理 仓库会获得一个 lockfile(位于 [`.github/workflows/actions.lock`](https://github.com/github/gh-actions-lock/blob/main/.github/workflows/actions.lock)),并且 workflows 会按每个 workflow 的基础上被接入到 lockfile。 被接入到 lockfile 的 workflows 会强制要求所有依赖都存在于 lockfile 中,并确保 Action 锁定的 commit 就是在 runner 上执行的内容。Lockfile 还会进行伪造验证。sha 必须存在于它声明存在的 refs 中。仓库身份会被记录,并且在运行时会阻止重定向和不匹配。 最后,被锁定的 actions 必须拥有一个包含被锁定 commit 的分支。这是为了让冒充 commit 式的攻击变得更加困难。 ## 限制 目前对于可以接入到 lockfile 的 workflows 存在一些资格限制: - lockfile 中的 workflows 不能使用本地路径的 actions,这些将在接入时被跳过。这也是一个短期的缺陷。 ## 许可证 本项目基于 MIT 开源许可证的条款授权。完整条款请参见 [LICENSE](./LICENSE)。 ## 维护者 gh-actions-lock 由 @github/actions-dispatch-reviewers 维护。请参见 [CODEOWNERS](./CODEOWNERS)。 ## 支持 我们提供尽力而为且基于社区的支持。请将错误和功能请求作为 [GitHub issues](https://github.com/github/gh-actions-lock/issues) 提交。详情请参见 [SUPPORT.md](./SUPPORT.md)。
标签:EVTX分析, GitHub Actions, SOC Prime, 依赖管理, 开发工具, 日志审计, 自动笔记