If a workflow started failing after GitHub Actions moved JavaScript actions to Node 24, first identify the failing step and update the action release if it lacks Node 24 support. Changing the project’s Node version with actions/setup-node is a separate fix: it does not change the runtime that launches JavaScript actions. GitHub removed Node 20 from Actions runners on September 23, 2026; the specific cause of any one failure still depends on its logs, action version, runner, and platform.
What changed in GitHub Actions
On September 23, 2026, GitHub removed Node 20 from Actions runners for JavaScript actions. Runners now use Node 24 for those actions, and GitHub says the temporary ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION opt-out is no longer available. GitHub’s current direction for workflow users is to update action references to releases that support Node 24. GitHub’s removal announcement also directs action maintainers to update their metadata and publish a new release.
This change does not prove that every workflow failure occurring after an upgrade is caused by the JavaScript action runtime. A shell command, project dependency, runner software, operating system, or unrelated workflow condition can fail independently. Use the first failing step and its full log to establish what actually broke.
Distinguish the action runtime from your project’s Node version
A JavaScript action declares the runtime that executes it in its action metadata, usually action.yml, under runs.using. GitHub’s metadata reference documents node20 and node24 values. The runs metadata reference describes this as “The runtime used to execute the code specified in main.”
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems#1 Best Overall
By contrast, actions/setup-node installs or selects the Node version used by project commands in the workflow. GitHub’s runner documentation explains that JavaScript actions execute with a bundled runner Node binary selected from the action metadata, not the node executable on PATH. The runner documentation and setup-node’s manifest show the distinction; the manifest itself declares that setup-node runs as a JavaScript action using node24.
- If an old third-party JavaScript action fails, changing
node-version: 20tonode-version: 24in setup-node does not migrate that action. - If a project build or shell command fails because of its Node toolchain, upgrading an action’s runtime does not select the needed project version.
Diagnose the failure from the first failing step
- Open the workflow run and locate the earliest failed step. Read its full log and annotation. Note whether the step uses a JavaScript action through
uses:, runs a shell command, or is associated with runner setup. - For a JavaScript action, identify the exact reference. Record the action name and pinned tag or commit. Check that release’s documentation, release notes, or manifest for Node 24 support. GitHub confirms current Node 24 releases for its first-party actions, but that does not establish that every third-party action has been updated; verify each one. GitHub’s announcement provides the current guidance.
- For a shell command or build step, inspect the project’s Node selection. Check the
node-versionconfigured through setup-node and any version file such as.nvmrc, along with the project’spackage.jsonand dependency requirements. Setup-node can select a version specification or version file, but that setting is independent of a JavaScript action’s runtime metadata. The setup-node manifest documents its inputs. - For self-hosted runners, record runner software, operating system, and architecture. A Node 24-compatible action may still be unsuitable for the machine running it, and runner service updates have their own requirements.
- If the log does not point to runtime compatibility, troubleshoot the workflow itself. GitHub recommends checking run logs and enabling debug logging when normal logs are insufficient. Trigger conditions, networking, billing, runner availability, or another step-specific issue can also explain a failed run. GitHub’s workflow troubleshooting guide covers these checks.
Choose the fix that matches what failed
| What failed | What to change | Who controls the fix | What to verify |
|---|---|---|---|
| A JavaScript action still using an unsupported runtime | Update the workflow’s uses: reference to a maintained release supporting Node 24. |
Workflow maintainer | That specific release’s Node 24 compatibility and the action reference used by the run. |
| A JavaScript action you maintain | Set runs.using: node24, check its code and dependencies on Node 24, and publish a new release. |
Action maintainer | The updated release metadata and its behavior on Node 24. GitHub’s metadata reference documents runs.using. Read the reference. |
| A project build or shell command | Adjust the project’s Node version through setup-node or the version file used by the workflow, if the error indicates a toolchain mismatch. | Project or workflow maintainer | The build’s actual Node version and the supported versions of its dependencies. |
| A self-hosted runner or incompatible platform | Update runner software or move the job to a supported operating system and architecture. | Runner administrator | Runner version, OS release, and architecture; consult the platform and runner requirements below. |
| No runtime-specific evidence | Continue ordinary workflow troubleshooting rather than changing Node versions speculatively. | Workflow maintainer or administrator | Full logs, debug output if needed, and trigger, network, billing, or runner conditions. |
When updating an action reference, use a maintained release and follow your repository’s normal dependency and security policy for pinning actions. Do not assume that a first-party action’s update resolves an unrelated third-party action in the same workflow.
Check operating-system and architecture compatibility
GitHub specifically identifies macOS 13.4 and earlier as incompatible with Node 24, and says Node 24 has no official ARM32 support. Its announcement says self-hosted runners on those systems or architectures are no longer supported following Node 20 removal. Check the actual runner image before concluding that an action-only update is sufficient. See GitHub’s Node 20 removal notice and its earlier migration details at the JavaScript Actions migration notice.
The earlier notice described temporary testing and opt-out settings, including FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true. Those rollout settings are historical, not current fixes: the temporary opt-out expired when Node 20 was removed. Do not use the former Node 20 opt-out as a workaround.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallRank #3
Account for self-hosted runner updates separately
The Node runtime transition and runner software policy are distinct. GitHub’s June 2026 runner announcement says version 2.329.0 is the minimum to register or re-register on the affected GitHub.com services. It also warns that job execution requires continuing runner updates, so meeting the registration minimum does not guarantee that a runner remains current enough to execute jobs. If automatic updates are disabled, GitHub says updates must be installed within 30 days of release or jobs may no longer be queued. Read the runner update policy announcement and GitHub’s self-hosted runner management guide.
The June 2026 announcement covers GitHub.com, including Enterprise Cloud and Data Residency, and says GitHub Enterprise Server was not affected by that announcement when it was published. Verify the current policy for your GHES version rather than applying a GitHub.com timeline automatically.
Rank #4
When runtime changes do not explain the failure
A timing coincidence is not a diagnosis. If the first failing step is not a JavaScript action, or if the action already supports Node 24 and runs on a compatible platform, inspect the specific error and workflow context. GitHub’s guidance is to use the run logs first and enable debug logging when needed; also check whether the failure is tied to runner availability, networking, billing, or a trigger condition. The workflow troubleshooting guide offers general diagnostic steps.
No run log, action reference, project Node version, or runner details are available here to identify the cause of an individual failure. Diagnose those details before changing the project toolchain or replacing a runner.
Recommended Free Tools
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




