GitHub Actions 停用 Node 20:JavaScript Action 如何迁移到 Node 24
GitHub Actions 是 GitHub 提供的自动化服务,可以在代码提交、拉取请求等事件发生时运行测试、构建和发布任务。工作流中的 Action 是可复用的任务组件;其中,JavaScript Action 会由 runner(执行工作流任务的运行环境)提供的 Node.js 运行时执行。此次调整针对的正是这个运行时:GitHub Actions runner 已不再提供 Node 20,JavaScript Action 改由 Node 24 运行。
这意味着,维护 JavaScript Action 的人需要更新 Action 的运行时声明并发布新版本;在工作流中调用 Action 的人,则需要改用支持 Node 24 的版本。此前用于临时继续使用旧运行时的 ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION 选项也已撤销,不能再通过设置它来保留 Node 20。
先分清:Action 的 Node 运行时不等于项目的 Node 版本
一个工作流可以调用多个 Action,也可以构建一个使用 Node.js 的项目。这两者涉及的 Node.js 版本并不一定相同:Action 的运行时由 Action 自身的元数据声明;项目构建所用的 Node.js 版本,则取决于工作流如何配置构建环境。比如,工作流可以通过 actions/setup-node 设置项目构建所用的 Node.js 版本,但这不等于改变了其他 JavaScript Action 的运行时声明。
因此,此次迁移不应被理解为“所有项目都必须把自身升级到 Node 24”。首先要检查工作流调用了哪些 JavaScript Action,并确认它们使用的版本是否支持 Node 24;维护 Action 的开发者则要修改自己的 Action 元数据。官方公告指出,最新版本的全部第一方 Action 已更新为使用 Node 24。
使用 Action 的工作流:更新被调用的版本
工作流通常在 YAML 文件中通过 uses: 调用 Action,例如 actions/checkout@v4。更新时,重点是确认这些引用对应的版本支持 Node 24,并按 Action 维护者提供的版本信息更新引用。只检查项目的 package.json,无法替代这项检查。
- 打开仓库中的工作流文件,通常位于
.github/workflows,检查其中的uses:配置,列出工作流实际调用的 Action。 - 将 JavaScript Action 更新到支持 Node 24 的最新版本。对于 GitHub 提供的第一方 Action,官方表示其最新版本已更新为 Node 24。
- 提交工作流修改并重新运行相关工作流,确认更新后的 Action 能在实际任务中正常执行。
如果工作流使用提交哈希固定 Action 版本,也需要确认该哈希对应的版本是否支持 Node 24;否则,应将引用更新到支持该运行时的新版本。这里要更新的是 Action 的引用,而不是仅仅修改工作流变量:临时的 ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION 已不可用。
维护 JavaScript Action:把运行时声明改为 node24
如果你维护自己的 JavaScript Action,需要修改 Action 元数据文件中的 runs.using 值,将它设为 node24,然后发布包含此改动的新版本。Action 元数据用于说明 Action 如何运行;其中的 main 指向入口文件,应保留为项目实际使用的入口路径。
runs:
using: node24
main: dist/index.js
示例中的 dist/index.js 是入口文件路径示意,实际项目应使用自己的文件路径。修改仓库中的源代码或元数据后,还需要发布新版本;调用方工作流引用的是某个 Action 版本或标签,不会因为维护者改动默认分支就自动切换到新版本。维护者完成发布后,使用方也要相应更新 uses: 引用。
Self-hosted runner 的操作系统和架构限制
Node 24 与 macOS 13.4 及更早版本不兼容,也不正式支持 ARM32。使用这些操作系统或 ARM32 架构的 self-hosted runner(由用户自行管理的 runner)不再受支持。若工作流依赖这类 runner,单独更新 Action 或修改其版本并不能消除底层环境与 Node 24 的兼容限制;需要一并检查 runner 的操作系统和处理器架构。
这项变化同时适用于 GitHub.com 和 GitHub Data Residency。迁移时可据此分别检查工作流调用的 Action 版本,以及自托管执行环境是否落在上述系统或架构限制范围内。
原始来源: https://github.blog/changelog/2026-09-23-node-20-is-no-longer-available-in-github-actions