Skip to content

Upgrade all GitHub Actions to Node 24-native releases (eliminate Node 20 deprecation warnings) #2648

Description

@acoliver

Summary

GitHub Actions continues to emit Node.js 20 deprecation warnings on our workflow runs. The warning explicitly names actions that are pinned to SHAs built against the Node 20 runtime:

Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02, oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76.

This is separate from (but related to) issue #2015, which tracks the project's own Node runtime baseline. The project runtime is already on Node 24 (.nvmrc = 24, package.json engines >= 24, Dockerfile node:24-slim). The remaining problem is that third-party GitHub Actions are still pinned to versions compiled against Node 20.

Issue #2316 attempted this for milestone 0.10.0 but was closed incomplete — the deprecation warnings are still firing.

Reference: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Root Cause

The ratchet pinning system freezes each action to a specific SHA. Several of those SHAs point to action releases whose action.yml declares node20 as the runtime. GitHub now force-runs them on Node 24 but emits a deprecation warning each time. The fix is to re-pin every action to a release that ships node24 (or node24 wrapper) natively.

Complete Catalog of Actions Needing Upgrade

Explicitly Called Out in the Deprecation Warning

Action Pinned SHA Ratchet Tag Latest Release Affected Workflows
actions/upload-artifact ea165f8d v4 v7.0.1 ci.yml (3 uses), _evals-run.yml, interactive-ui.yml, luther.yml, nightly.yml (2 uses), ocr-review.yml
oven-sh/setup-bun 735343b6 v2 v2.2.0 ci.yml (7 uses), e2e.yml (2 uses), _evals-run.yml, build-sandbox.yml, interactive-ui.yml, luther.yml, nightly.yml (3 uses), release.yml, smoke-test.yml

Other Actions Behind Latest (Need Re-pinning via Ratchet)

Action Current Pinned Tag Latest Release Affected Workflows Notes
actions/checkout v5 (SHA 08c6903c), v5 (SHA 08eba0b2 in e2e), v4 (SHA 11bd7190 in release/pr-triage), v4.3.0 (SHA 08eba0b1 in upstream-sync) v7.0.1 all workflows 3+ different SHAs for the same action across workflows — must be unified
actions/download-artifact v5 (SHA 634f93cb) in ci/evals, v4 (SHA d3f86a10) in ocr-review v8.0.1 ci.yml, evals-nightly.yml, ocr-review.yml Version inconsistency between workflows
actions/setup-node v6 (SHA 48b55a0) v7.0.0 17 uses across all workflows
actions/cache v4 (SHA 0057852b) v6.1.0 ci.yml (3 uses)
actions/setup-python v5 (SHA a26af69) v7.0.0 ci.yml
actions/create-github-app-token v2.0.6 (SHA df432cee) v3.2.0 luther.yml (commented out)
github/codeql-action v3.29.9 (SHA df559355) codeql-bundle-v2.26.1 (v3 line) ci.yml (init + analyze)
docker/setup-buildx-action v3 (SHA e468171) v4.2.0 build-sandbox.yml, e2e.yml
docker/login-action v3.3.0 (SHA 9780b0c) v4.4.0 build-sandbox.yml
docker/metadata-action v5.5.1 (SHA 8e5442c) v6.2.0 build-sandbox.yml
docker/build-push-action v6.9.0 (SHA 4f58ea7) v7.3.0 build-sandbox.yml
dorny/test-reporter v2.1.1 (SHA dc3a926) v3.0.0 ci.yml Major version bump — verify breaking changes
fkirc/skip-duplicate-actions v5.3.1 (SHA f75f66c) v5.3.2 ci.yml, e2e.yml Minor patch
sethvargo/ratchet v0.11.4 (SHA 8b4ca25) v0.12.0 ci.yml Used by the pinning system itself
actions/github-script SHA f28e40c (v9.x) v9.0.0 (check usage) Verify if already current

Already Current

Action Pinned Latest Status
thollander/actions-comment-pull-request v3.0.1 v3.0.1 OK

Additional Inconsistencies Found

  1. actions/checkout has 4 different pinned SHAs across workflows:

    • 08c6903c (v5) — most workflows
    • 08eba0b2 (v5, different commit!) — e2e.yml
    • 11bd7190 (v4) — release.yml, llxprt-scheduled-pr-triage.yml
    • 08eba0b1 (v4.3.0, invalid SHA?) — upstream-sync.yml
  2. actions/download-artifact has 2 different major versions (v4 and v5) across workflows.

  3. Some workflows lack ratchet comments entirely:

    • smoke-test.yml — no ratchet comment on checkout
    • release.yml — uses bare # v4 not ratchet format
    • upstream-sync.yml — uses # v4.3.0 not ratchet format
    • llxprt-scheduled-pr-triage.yml — uses bare # v4 not ratchet format

Proposed Work

  1. Run ratchet to re-pin all actions to their latest Node-24-native releases:

    • ratchet pin .github/workflows/*.yml .github/actions/**/*.yml
    • This will update all SHAs to the latest tag for each ratcheted action
    • For actions without ratchet comments, add them first
  2. Fix the checkout version inconsistencies — unify all workflows to the same SHA/tag.

  3. Fix the download-artifact version split — upgrade ocr-review.yml from v4 to match the rest.

  4. Add ratchet comments to workflows missing them (smoke-test.yml, release.yml, upstream-sync.yml, llxprt-scheduled-pr-triage.yml).

  5. Verify major-version upgrade breaking changes:

    • actions/upload-artifact v4 to v7 (v5 changed artifact IDs, v6/v7 may have further changes)
    • actions/download-artifact v4/v5 to v8
    • dorny/test-reporter v2 to v3
    • docker/* v3/v5/v6 to v4/v6/v7
  6. Test all workflows after re-pinning to confirm:

    • No Node 20 deprecation warnings
    • All CI jobs still pass (test, lint, typecheck, format, build)
    • E2E tests pass
    • Nightly/smoke/release workflows function correctly

Acceptance Criteria

  • All GitHub Actions workflows run without Node.js 20 deprecation warnings
  • Every action is pinned (via ratchet) to a release that uses the Node 24 runtime natively
  • No action has inconsistent SHAs across workflows (same action = same SHA everywhere)
  • All workflows have proper ratchet comments
  • Full CI suite passes: test, lint, typecheck, format, build, e2e
  • Nightly and release smoke workflows verified

Context

Metadata

Metadata

Assignees

Labels

ci/cdIssues with github and the workflow scripts and CI CD environment.

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions