Your CI pipeline may have started failing this week without a clear explanation. On September 23, 2026, GitHub removed Node 20 entirely from its Actions runners. No fallback, no opt-out flag, no grace period extension. Any workflow still pinned to older action versions is broken right now — and the failure mode is cryptic enough that many teams have not connected the dots yet.
What Changed on September 23
GitHub Actions runners now use Node 24 exclusively for JavaScript actions. This has been the default since June 16, but the temporary escape hatch — the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION environment variable — is also gone as of September 23. If you were relying on that to buy time, the time is up.
Node 20 was deprecated from runners back in September 2025, giving teams a full year to migrate. Most did not, or did so only partially. The result is a wave of broken pipelines hitting teams now — including popular open source tools like Digger, which had four unresolved Node 20 action pins causing every run to fail on removal day.
Which GitHub Actions Are Broken
This is not about your application’s Node.js version. It is about which version of Node the action itself runs on internally. An action that declares runs.using: node20 in its action.yml now has nothing to run on. The most common offenders are pinned first-party actions:
| Action | Broken version | Working version (Node 24) |
|---|---|---|
| actions/checkout | @v4 and earlier | @v5 |
| actions/setup-node | @v4 and earlier | @v5 |
| actions/cache | @v4 and earlier | @v5 |
| actions/upload-artifact | @v4 and earlier | @v5 |
| actions/download-artifact | @v4 and earlier | @v5 |
| actions/setup-python | @v5 and earlier | @v6 |
| actions/setup-go | @v5 and earlier | @v6 |
| actions/github-script | @v7 and earlier | @v9 |
Third-party actions are trickier. Search the action repository’s action.yml for runs.using: node20. If the maintainer has not shipped a Node 24 release, you are waiting on them — or need to fork.
The Misunderstanding That Costs Teams Hours
Do not remove node-version: 20 from your actions/setup-node step. That setting controls which Node.js version your application installs and tests against. It has nothing to do with the runtime the action itself uses. The action runs internally on Node 24 while still installing Node 20 for your project. Your test matrix stays intact.
How to Fix Your GitHub Actions Node 20 Workflows
First, audit your workflows:
grep -RIn "uses:" .github/workflows .github/actions
Look for @v4 or lower on the first-party actions listed above. Then bump the versions:
# Before — broken after September 23
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: actions/upload-artifact@v4
# After — works on Node 24 runners
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: 20 # keep this — it controls your app's Node, not the runner
- uses: actions/upload-artifact@v5
If you maintain a JavaScript action yourself, update action.yml:
runs:
using: node24 # was: node20
main: dist/index.js
The Self-Hosted Runner Problem
Node 24 is incompatible with macOS Ventura 13.4 and earlier. It also has no official ARM32 support. Teams running self-hosted runners on older Macs or Raspberry Pi-class machines are in a difficult position: getting back online requires an OS or hardware upgrade, not just a version bump. Check your runner versions under Repository Settings › Actions › Runners — you need v2.327.1 or later for Node 24 compatibility.
Prevent the Next Node Version Migration From Breaking You
Add a Dependabot configuration for GitHub Actions to get automated pull requests whenever action versions are updated:
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
GitHub also shipped a new runner deprecation API in early September. GET /actions/runners/deprecations/{version} returns the exact support end dates for any runner version, so future Node upgrades will not catch you off-guard.
Node 20 follows Node 16, which followed Node 12. The pattern is clear and GitHub is not stopping. Build the Dependabot habit now and you will not need an emergency patch session next year.













