Skip to content

chore(ci): bump artifact + release actions off the Node 20 runtime - #673

Merged
padak merged 1 commit into
mainfrom
chore/ci-node24-actions
Aug 23, 2026
Merged

chore(ci): bump artifact + release actions off the Node 20 runtime#673
padak merged 1 commit into
mainfrom
chore/ci-node24-actions

Conversation

@padak

@padak padak commented Aug 23, 2026

Copy link
Copy Markdown
Member

Why

The v0.90.0 release-kbagent.yml run annotated the gate, package-linux and homebrew jobs with:

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@v4, actions/download-artifact@v4

Rather than fix only the two actions GitHub named, every uses: in .github/ was audited by resolving runs.using from each pinned tag's own action.yml (release notes are less reliable than the field the runner actually reads).

What changed

Only release-kbagent.yml contained node20 actions:

action before after why this major
actions/upload-artifact v4 v7 v5 still declares using: node20 (its Node 24 support was "preliminary"); v6 was the real switch. v7 is current.
actions/download-artifact v4 v8 v5 and v6 still declare using: node20; v7 was the switch. v8 is current.
softprops/action-gh-release v2 v3 v2.x is node20; v3.0.0 moved the runtime to Node 24.

A naive v4 → v5 bump on either artifact action would have kept emitting the same deprecation annotation — that non-obvious fact is now recorded as a comment at the first use of each.

Breaking changes, checked against actual usage

  • download-artifact v5 changed the output path for single-artifact-by-ID downloads. Not applicable: this repo downloads by pattern: or whole-run, never with artifact-ids:.
  • download-artifact v8 turns a download digest mismatch into a hard error instead of a warning. Kept as-is — the correct default for a pipeline that GPG-signs and ships these exact bytes.
  • download-artifact v8 skips decompression for non-zipped downloads. Not applicable: artifacts here are always service-zipped (the inner dist/*.zip files are just members of that archive).
  • upload-artifact v7 direct/unzipped uploads only engage with archive: false, which is not used.
  • action-gh-release v3 keeps tag_name / files / prerelease — verified against v3's action.yml inputs.

Already clean (no change needed)

actions/checkout@v5, actions/setup-node@v6, actions/setup-python@v6, astral-sh/setup-uv@v7, aws-actions/configure-aws-credentials@v6 all already run on node24. cpina/github-action-push-to-another-repository is a docker action (stays SHA-pinned — it receives the tap PAT). pypa/gh-action-pypi-publish@release/v1 is composite over node24 steps.

Note: the node-version: "20" in .github/actions/setup-build is the Node used to build the React SPA, not an action runtime — untouched here, since bumping the build toolchain is a separate decision.

Verification

  • Every workflow + the composite action parses under yaml.safe_load.
  • Post-change sweep over all uses: in .github/ resolves to node24 / docker / composite — no node20 remains.
  • All jobs run on GitHub-hosted runners, so the node24 minimum runner version (2.327.1) is satisfied; there is no self-hosted fleet to update first.

Per repo rules: no version bump, no changelog.py entry (CI-only change).


Open in Devin Review

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

The v0.90.0 release-kbagent.yml run annotated every gate / package-linux /
homebrew job with "actions target Node.js 20 but are being forced to run on
Node.js 24". Three actions were still on a node20 runtime.

Chosen majors are the first ones that actually declare `runs.using: node24`,
verified against each tag's action.yml rather than its release notes:

- actions/upload-artifact   v4 -> v7  (v5 is still node20; v6 was the switch)
- actions/download-artifact v4 -> v8  (v5 AND v6 are still node20; v7 switched)
- softprops/action-gh-release v2 -> v3

Breaking changes reviewed against actual usage:
- download-artifact v5 changed the output path for single-artifact-by-ID
  downloads; this repo downloads by pattern or whole-run, never by ID.
- download-artifact v8 makes a digest mismatch a hard error instead of a
  warning — the right default for a pipeline that signs and ships these bytes.
- upload-artifact v7 direct (unzipped) uploads only apply with `archive: false`,
  which is not used here.
- action-gh-release v3 keeps tag_name / files / prerelease unchanged.

Every remaining action in .github/ was audited and already runs on node24
(checkout v5, setup-node v6, setup-python v6, setup-uv v7,
configure-aws-credentials v6); cpina/...-push-to-another-repository is a
docker action and pypa/gh-action-pypi-publish is composite over node24 steps.

All GitHub-hosted runners, so the node24 minimum runner version (2.327.1) is
satisfied; no self-hosted fleet to update.
@padak
padak force-pushed the chore/ci-node24-actions branch from 99f4bf4 to 084bb6b Compare August 23, 2026 22:16
@padak
padak merged commit b5fd101 into main Aug 23, 2026
4 checks passed
@padak
padak deleted the chore/ci-node24-actions branch August 23, 2026 22:23
@padak padak mentioned this pull request Aug 23, 2026
13 tasks
padak added a commit that referenced this pull request Aug 23, 2026
Batches the nine PRs merged since v0.90.0 (#670, #671, #672, #673, #674, #675, #676, #677, #678) into one version bump and one changelog entry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant