Skip to content

ci: bump GitHub Actions to Node 24 runtimes - #144

Merged
SkyeAv merged 1 commit into
mainfrom
update-ci-node
Sep 8, 2026
Merged

ci: bump GitHub Actions to Node 24 runtimes#144
SkyeAv merged 1 commit into
mainfrom
update-ci-node

Conversation

@SkyeAv

@SkyeAv SkyeAv commented Sep 8, 2026

Copy link
Copy Markdown
Owner

GitHub deprecated the Node 20 action runtime, so every run of all four workflows now prints "The following actions uses node20 which is deprecated and will be forced to run on node24" — and Node 20 is being removed outright, after which node20 actions hard-fail. This bumps every offending action to its current Node 24 release line.

Design

  • v5 is not the answer for the artifact actions. upload-artifact@v5 and download-artifact@v5 and @v6 still declare runs.using: node20; v6 and v7 are the first Node 24 majors.
  • No input changes needed. Every with: key survives; upload-artifact@v7's new archive defaults to true (unchanged zip behavior); download-artifact@v8 still defaults merge-multiple to false, which pipy.yml sets explicitly. checkout v7's fork-PR refusal is scoped to pull_request_target/workflow_run; ci.yml triggers on plain pull_request.
  • One behavior change pinned back: setup-uv v10's enable-cache: "auto" → true here (v4 = false), adding a post: save-cache step that can fail sdist after a good build and leave a tagged release with nothing on PyPI. Set to false.
  • Accepted: download-artifact@v8 defaults digest-mismatch to error (was warn) — fails closed before anything reaches PyPI.
  • Deferred: if-no-files-found still defaults to warn on both upload steps, so a wheels leg producing zero files only warns and skip-existing: true makes a partial release sticky (pre-existing). No dependabot.yml for the github-actions ecosystem — which is why this sweep was manual.

Testing

  • nix-shell -p actionlint shellcheck --run "actionlint -no-color" → exit 0, no findings.

  • YAML parse of all four workflows → OK.

  • runs.using per pinned tag → all node24/composite; grep -rn 'node20|node16|node12' .github/ → nothing.

  • CI on this PR (run 34266961019) → all green: python-lint 7s, python-test 2m26s, python-type 5m51s, rust 1m30s.

  • The warning is empirically gone. The five preceding CI runs each emitted one warning annotation per job — Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. Querying check-runs/{job}/annotations for this PR's run returns no annotation matching node20|deprecated. (Only ci.yml is exercised here since it is the sole pull_request workflow; pipy.yml/tag-version.yml/docs.yml run on push to main, so their setup-python/upload-artifact/download-artifact/setup-uv bumps were verified statically by reading runs.using from each pinned tag's action.yml.)

GitHub deprecated the Node 20 action runtime, so every run of all four
workflows now prints "The following actions uses node20 which is
deprecated and will be forced to run on node24". Node 20 is being removed
outright, after which node20 actions hard-fail instead of merely warning.

Bumped each offender to its current Node 24 release line:

- actions/checkout        v4 -> v7   (9 steps)
- actions/setup-python    v5 -> v7   (3 steps)
- actions/upload-artifact v4 -> v7   (2 steps)
- actions/download-artifact v4 -> v8 (1 step)
- astral-sh/setup-uv      v4 -> v10.0.0 (pipy.yml sdist job, which lagged
  the v10.0.0 already pinned in ci.yml and docs.yml)

upload-artifact v5 and download-artifact v5/v6 are NOT Node 24 -- they
still declare `using: node20` -- so v6 and v7 respectively were the first
valid targets, and the latest majors are used instead.
peaceiris/actions-gh-pages v4, PyO3/maturin-action v1,
astral-sh/ruff-action v4.1.0 and Swatinem/rust-cache v2 were already
Node 24; dtolnay/rust-toolchain and pypa/gh-action-pypi-publish are
composite and need no bump.

No workflow input changes were required: every `with:` key still exists
in the new majors, upload-artifact v7's new `archive` input defaults to
true (unchanged zip behavior), and download-artifact v8 still defaults
`merge-multiple` to false, which pipy.yml sets explicitly. checkout v7's
fork-PR refusal is scoped to pull_request_target/workflow_run, while
ci.yml triggers on plain pull_request.

One behavior change is pinned back explicitly. setup-uv v10 defaults
`enable-cache` to "auto", which resolves to true for pipy.yml's
push-to-main and workflow_dispatch triggers (v4 defaulted to false). That
would add a `post: save-cache` step to the sdist job, and that step can
fail the job after a successful build -- skipping `publish` while
tag-version.yml still pushes the tag, leaving a tagged release with
nothing on PyPI. The job only runs `uv build --sdist` and never syncs
dependencies, so a cache buys nothing there; it is set to false to
preserve the v4 behavior.

download-artifact v8 defaults `digest-mismatch` to error (was warn). This
is kept: it fails closed in the first step of `publish`, before anything
reaches PyPI, which is the right behavior for a release pipeline.

Verified: `actionlint` clean on all four workflows; all YAML parses; every
referenced action's action.yml at its pinned tag now reads `using: node24`
(or composite); `grep -rn 'node20|node16|node12' .github/` finds nothing.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: c57801f3-1d84-4fb2-845f-730faa09ed59


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@SkyeAv
SkyeAv merged commit 36a3ad1 into main Sep 8, 2026
5 checks passed
SkyeAv added a commit that referenced this pull request Sep 9, 2026
Cut 17.0.1 and bump the package version in pyproject.toml, CITATION.cff,
and uv.lock.

Patch: the fullmap resolver now retains every CURIE tied on a term's best
ranking tier (#145) — `distinct` used to keep one arbitrary sort-first row
per term, silently discarding distinct CURIEs tied across the entire
ranking tuple; tied CURIEs now propagate through `resolve`,
`resolve_batch`, and `join_matches` as separate output rows, collapsed
only by `(term, CURIE)`. Also on main since 17.0.0: a CI-only GitHub
Actions runtime bump (#144), no user-facing change.

Changelog:
- Versioned the release as 17.0.1 - 2026-09-09 with one Fixed entry for
  the tied-CURIE retention (#145); no Unreleased section existed to
  rename, and the CI-only bump (#144) gets no entry per repo convention.

Docs: none needed here — #145 shipped its docs updates
(docs/api/fullmap.md) with the fix.

Testing:
- make lint -> "All checks passed!" (ruff check)
- make fmt-check -> 84 files already formatted; cargo fmt clean
- make typecheck -> 0 errors, 0 warnings, 0 informations (pyright)
- make test -> 1246 passed, 3 skipped in 37.52s (pytest, 96% coverage)
- make test-rust -> all test binaries ok (cargo test)
- cargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warnings
  -> clean
- uv lock --check -> in sync pre-bump; re-locked post-bump, self-entry only
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