Skip to content

ci: pin GitHub Actions to Node 24 runtimes#6

Merged
henriquebastos merged 3 commits into
mainfrom
ci/node24-action-pins
Jun 13, 2026
Merged

ci: pin GitHub Actions to Node 24 runtimes#6
henriquebastos merged 3 commits into
mainfrom
ci/node24-action-pins

Conversation

@henriquebastos

Copy link
Copy Markdown
Owner

Why

GitHub Actions removes the Node 20 runtime on 2026-09-16, and from 2026-06-16 the runner defaults to Node 24. The currently-pinned actions (checkout@v4, setup-python@v5, setup-uv@v5) all run on Node 20.

What

Bumped each action to the newest version whose action.yml declares runs.using: node24 (verified live via the GitHub API):

Action Before After Node
actions/checkout v4 v6 24
actions/setup-python v5 v6 24
astral-sh/setup-uv v5 v7 24

checkout@v6 is applied across all 5 workflows; setup-python/setup-uv across lint, test, and publish.

setup-uv stays on v7, not v8 — v8 stopped publishing major/minor tags (@v8 no longer resolves), which would force full-tag pinning and forfeit automatic patch updates. v7 keeps this repo's pin-by-major convention while still running on Node 24. Revisit if the repo adopts SHA-pinning + Dependabot.

A breaking-change scan against this repo's actual usage found no impact (checkout v6's credential-persistence change, setup-uv v6's activate-environment default flip, and v7's removed server-url input none of which this repo relies on).

Drive-by fix (separate commit)

publish.yml passed the project file to python-version (expects a version spec) instead of python-version-file, so the publish job would fail to resolve Python. Latent because publish only runs on release and the pipeline has been red since 2025-07.

Validation

  • ✅ All six workflows parse as YAML; actionlint clean; no stale @v4/@v5 pins remain.
  • ⏳ CI (push.yml: lint + test matrix py3.10–3.13) runs on this push — must be green before merge.
  • ⚠️ publish.yml only triggers on a GitHub Release, so it is not exercised by this PR. Confidence rests on its pins being identical to the validated lint/test jobs plus the python-version-file correctness fix.

GitHub Actions removes the Node 20 runtime on 2026-09-16, and from
2026-06-16 the runner defaults to Node 24. Bump to the newest versions
whose action.yml declares runs.using: node24:

- actions/checkout v4 -> v6 (5 workflows)
- actions/setup-python v5 -> v6 (lint, test, publish)
- astral-sh/setup-uv v5 -> v7 (lint, test, publish)

setup-uv stays on v7 rather than v8 to preserve this repo's
pin-by-major convention: v8 stopped publishing major/minor tags, which
would force full-tag pinning and forfeit automatic patch updates.
No breaking change in these versions affects this repo's usage.
The publish job passed the project file to `python-version`, which
expects a version spec, so setup-python fails to resolve it. Use
`python-version-file`, matching the lint job. Latent until now because
publish only runs on release and the pipeline has been red since
2025-07.
Same-cycle coherence for the Node 24 pin change (PR #6): a decisions.md
entry capturing the v7-over-v8 setup-uv trade-off, a roadmap Done row,
and a radar note to revisit setup-uv v8 / SHA-pinning under Dependabot.
@henriquebastos henriquebastos merged commit a0d093d into main Jun 13, 2026
5 of 6 checks passed
@henriquebastos henriquebastos deleted the ci/node24-action-pins branch June 13, 2026 15:43
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