
外部精选
软件工程
#社区热议GitHub Actions 支持工作流锁文件,可锁定 Action 版本
来源标题:Lock Your GitHub Actions
GitHub Actions 现已支持工作流锁文件,用于替代此前将 Action 固定到完整 SHA 的做法。由于标签可变、易受供应链攻击,过去建议固定 SHA;现在可通过 gh-actions-lock 扩展运行 gh actions-lock 生成锁文件。锁文件中的工作流改用 vX.Y.Z 标签形式。
Hacker Newsgslin2026/11/11 · 今天11 分钟阅读
以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
目录安装锁定它们Renovate 和 Dependabot验证zizmor锁定完成!示例GitHub Actions 现在支持工作流锁文件。由于 GitHub Actions 是从 Git 获取的,之前的建议是固定到完整的 SHA 而不是标签。这是因为标签是可变的,容易受到供应链攻击,攻击者可以将原本安全的标签指向恶意代码。name: Lint on: [push, pull_request, workflow_dispatch] permissions: {} env: FORCE_COLOR: 1 RUFF_OUTPUT_FORMAT: github jobs: lint: runs-on: ubuntu-latest steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false
- uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0 以下是我设置锁文件的方法。为 gh CLI 安装 gh-actions-lock 扩展:$ gh extension install github/gh-actions-lock ✓ Installed extension github/gh-actions-lock锁定它们 #在你的仓库中运行:$ gh actions-lock ✓ All 1 workflows valid工作流现在使用 vX.Y.Z 标签,如下所示:diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 946971c..3503607 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml runs-on: ubuntu-latest steps:
-
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
-
- uses: actions/checkout@v7.0.1 with: persist-credentials: false
-
- uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0
-
- uses: j178/prek-action@v3.1.0
并在 .github/workflows/actions.lock 生成一个锁文件:# This file is machine-generated by
gh actions-lock.
- uses: j178/prek-action@v3.1.0
并在 .github/workflows/actions.lock 生成一个锁文件:# This file is machine-generated by
Do not edit by hand; run gh actions-lock to update.
Docs: https://gh.io/actions-lockfile
version: 'v0.0.3' workflows: '.github/workflows/lint.yml':
- 'actions/checkout@v7.0.1'
- 'j178/prek-action@v3.1.0' dependencies: 'actions/checkout@v7.0.1': ref: 'v7.0.1' commit: 'sha1-3d3c42e5aac5ba805825da76410c181273ba90b1' owner_id: 44036562 repo_id: 197814629 'j178/prek-action@v3.1.0': ref: 'v3.1.0' commit: 'sha1-44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d' owner_id: 10510431 repo_id: 1052387486 提交修改后的工作流和新的锁文件。好消息是,两者都已经支持锁文件!你的定期更新也会更新锁文件。记得使用冷却期。GitHub 还建议在 CI 中验证锁文件,以确保它是最新的且未损坏。他们建议将这个 verify-lockfile.yml 复制到你的仓库中。我决定把它放到现有的 lint 工作流中,但作为一个独立的 job,这样它可以独立并行运行:name: Lint on: [push, pull_request, workflow_dispatch] permissions: {} env: FORCE_COLOR: 1 RUFF_OUTPUT_FORMAT: github jobs: lint: runs-on: ubuntu-latest steps:
- uses: actions/checkout@v7.0.1 with: persist-credentials: false
- uses: j178/prek-action@v3.1.0
Fails when .github/workflows/actions.lock is out of sync with the
workflows or a locked pin no longer verifies upstream.
lockfile: runs-on: ubuntu-slim env: GH_TOKEN: ${{ github.token }} steps:
- uses: actions/checkout@v7.0.1 with: persist-credentials: false
- run: gh extension install github/gh-actions-lock --pin v0.4.1
- run: gh actions-lock --verify 注意我在这里使用了轻量级的 ubuntu-slim runner。另外,它固定到了 v0.4.1;我们将来得更新它,或者想办法自动化。那是以后的事了。别忘了我们刚刚修改了工作流中的 actions,所以需要用 gh actions-lock 重新锁定。如果只是添加到 lint.yml,实际上不会有任何变化,因为它已经在锁定 actions/checkout 了。但如果你创建了一个新文件比如 verify-lockfile.yml,就需要为它重新锁定。CI 会提醒你的。zizmor 是一个 GitHub Actions 的安全 linter,强烈推荐使用。如果你还没用,请务必用起来。v1.32.0 之前的版本会提示你对 actions 进行哈希固定,而 v1.32.0 是第一个支持锁文件的版本。我在 prek 中使用 zizmor,所以在 .pre-commit-config.yaml 中添加/更新 zizmor:- repo: https://github.com/zizmorcore/zizmor-pre-commit rev: v1.32.0 hooks:
- id: zizmor锁定完成! #好了,提交并推送吧!头图:Slaymaker Barry Co. Sprocket Locks,发表于 The Bearings(第 XII 卷第 23 期,1896 年 1 月 2 日),收录于 Smithsonian Libraries and Archives,无已知版权限制。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。