配了三年 CI,今天才发现 actions 跑的是哪个版本只能靠猜——workflow lockfiles 今天把这件事彻底锁死了

npm 有 lockfile,Go 有 go.sum,Pip 有 requirements.txt。但 GitHub Actions?直到今天,你的 CI 依赖还是在运行时从可变引用里解析的——没有任何内置机制能保证你跑的是你以为的那个版本。

这不是理论上的风险。2025 年 3 月,tj-actions/changed-files 供应链攻击利用 mutable tag 机制,在运行时静默替换了上游代码,影响超过 23000 个仓库。你配置的 SHA pinning 保护了你直接依赖的那一层,但 composite action 内部调用的其他 action——那些传递依赖——对你完全不透明。

GitHub 今天把这件事用 workflow lockfiles 从根上堵上了。

工作原理

新的 dependencies: 块直接写在 workflow YAML 里,每一条 action 锁定到具体 commit SHA 和哈希值:

name: CI
on: [push]
dependencies:
  actions/checkout:
    commit: b4ffde65f46336ab88eb53be808477a3936bae11
    hash: sha256:a1b2c3d4e5f6...
  actions/setup-node:
    commit: 60edb5dd545a775178f52524783378180af0d1f8
    hash: sha256:f6e5d4c3b2a1...
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4

job steps 里的 uses: 依然可以写人类可读的 tag,lock 逻辑在 dependencies: 块里由平台在运行前校验。如果哈希对不上,workflow 直接在启动前失败——根本不会跑任何 job。

关键改进是传递依赖也被锁住了。你 pin 了一级 action,但它内部调用的其他 action 依然是在运行时从 tag 解析的。新的 lockfile 把整条链都锁死,包括 composite action 内部那些你看不见的引用。

和现有实践的区别

手动 SHA pinning 大家都在推,Dependabot 和 Renovate 也能自动化。但有两个问题一直无解:

传递依赖不可见。 你 pin 了 top-level action,但它内部用了什么你看不到,除非去读 action 源码。这是供应链攻击的老路。

没有内置强制。 人可以忘,CI 可以跳,企业政策没有技术手段落地。lockfile 是平台层校验,不是靠流程约定。

lockfile 出来之后,依赖更新的日常变成了:用 GitHub CLI 重新解析,生成新的 lock 数据,commit 更新后的 YAML,PR diff 里清晰看到哪个 action 换了哪个版本——这比现在 guess + hope 的方式靠谱多了。

什么时候能用

官方路线图 2026 年 3 月发布,public preview 目标 3-6 个月内,正式 GA 预计 2026 年 9 月。功能本身已经 ready 了,只是 GA 节奏的问题。

现在能做的事:把现有的 action 全换成完整 commit SHA(不用 tag),审计 pull_request_target 触发器,review workflow 里的外部网络依赖。等 lockfile GA 之后切过去就行。

三步落地

  1. 现在就做:把 production workflow 里所有 @v4 形式的 action 替换成完整 commit SHA。Dependabot 可以帮你自动化这件事,但目前只能覆盖直接依赖。
  2. 等 GA:watch GitHub Actions changelog,lockfile GA 之后用 gh workflow update-dependencies 命令生成第一个 lock 块,commit 进仓库。
  3. review 流程:把 lock 块更新也纳进 PR review——和 package-lock.json 一样,依赖变了 diff 里要能看到。

npm 用了十年才把 lockfile 做对。Actions 的 lockfile 虽然来得晚,但补的是 CI/CD 基础设施里最大的结构性缺口。等它 GA 之后,supply chain 攻击的门槛会高得多。

评论区

0 条评论

登录后可评论。