Cloud & DevOpsDeveloper Tools

GitHub Actions Dropped Node 20 — Fix Your Workflows Now

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:

ActionBroken versionWorking 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.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *