CI: off Node 20, and pin the link checker's own binary - #29
Merged
Conversation
Every run on both workflows is annotated "Node.js 20 is deprecated … being forced to run on Node.js 24". Bumped: checkout v4→v7, setup-node v4→v7, setup-python v5→v7, deploy-pages v4→v5, upload-pages-artifact v3→v5. One non-obvious point worth recording so nobody re-derives it: the annotation names actions/upload-artifact@v4 — the *inner* action — not upload-pages-artifact, which is why bumping the outer one to v4 looks like it should fix it and does not. v4 still pins upload-artifact 4.6.2, which is node20; only v5 moves to a node24 build. checkout v7 keeps fetch-depth: 0 behaving identically, which matters because scripts/check-version-bump.py needs refs/remotes/origin/main to exist and exits 2 rather than passing blind when it does not. Also pins lychee's checker binary. The action is pinned at v2, but the binary it downloads moves underneath that tag — v0.16.1 when v2.0.0 shipped, v0.24.2 now. That is the same exposure the mystmd pin two lines above already closes, and it is the version the action defaults to today, so this changes nothing now and stops the next silent bump reddening an unrelated PR.
There was a problem hiding this comment.
Pull request overview
Updates GitHub Actions workflow dependencies to eliminate Node.js 20 deprecation warnings and makes the docs link-check tooling fully deterministic by pinning the Lychee binary version (independent of the action tag), aligning CI behavior with the repo’s existing “pin the toolchain” rationale.
Changes:
- Bump key GitHub Actions dependencies to newer major versions to move off Node.js 20-based action runtimes.
- Upgrade Pages artifact upload/deploy actions (
upload-pages-artifact@v5,deploy-pages@v5) to ensure the underlying artifact action is Node.js 24-compatible. - Pin
lycheeverse/lychee-action’s downloaded checker binary vialycheeVersion: v0.24.2to prevent silent upstream drift.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| .github/workflows/validate.yml | Updates checkout/setup-python/setup-node action majors to clear Node 20 deprecation warnings in validation workflows. |
| .github/workflows/docs.yml | Updates checkout/setup-node/pages actions and pins the Lychee checker binary version for deterministic link checking. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
15 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every run on both workflows currently carries
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24. This clears it, and pins one more thing that was quietly floating.The bumps
actions/checkoutactions/setup-nodeactions/setup-pythonpip installinput, unused hereactions/deploy-pagesactions/upload-pages-artifactThe one non-obvious point, recorded so nobody re-derives it: the deprecation annotation names
actions/upload-artifact@v4— the inner action — notupload-pages-artifact. That makes bumping the outer one to v4 look like the fix when it is not: v4 still pinsupload-artifact4.6.2, which is node20. Only v5 moves to a node24 build.checkoutv7 keepsfetch-depth: 0behaving identically, which matters here becausescripts/check-version-bump.pyneedsrefs/remotes/origin/mainto exist and exits 2 rather than passing blind when it does not. The comment explaining that is preserved verbatim.And a pin the repo was missing
lycheeverse/lychee-actionis pinned at@v2, but the checker binary it downloads is a separate thing that moves underneath that tag — the default wasv0.16.1when v2.0.0 shipped and isv0.24.2today. That is exactly the exposure themystmd@1.10.1pin two lines above already closes, and the repo states that reasoning three times while leaving this one to an upstream default. Now set tov0.24.2, which is the current default, so it changes nothing today and only stops the next silent bump reddening an unrelated PR.Risk
Three majors in one hop invites the question. There is no dependabot here, so the only bump cadence is someone noticing a warning. Each intervening major was checked inert for this repo: no
package.json, so setup-node's packageManager auto-cache never fires; the fork-checkout gate added in checkout v6/v7 applies only topull_request_targetandworkflow_run, and neither workflow uses them.The narrower real risk: by
docs.yml's own design a PR uploads but never deploys, so theupload-pages-artifactv5 +deploy-pagesv5 pairing first executes on the merge commit. Mitigating it — the build-and-upload half does run on the PR, thepermissionsblock already matches deploy-pages v5's stated requirement, and recovery is a one-line revert.No version bumps:
.github/workflows/is repo-level and ships to nobody. The guard agrees —no plugin directory touched. Both files re-parse, and all versions were confirmed against the releases API rather than assumed.