Repository navigation
Move check-links off Node.js 20 and show Lychee's report on the run page - #825
Merged
Merged
Conversation
GitHub deprecates the Node.js 20 runtime for actions, and the job warned about the three that still used it or older: - `actions/setup-node` v4 (node20) -> v7 (node24). v5 enables npm caching from `packageManager`, and v7 drops the dummy `NODE_AUTH_TOKEN`. The job sets `cache: 'npm'` and no `registry-url`, so neither change applies. - `actions/cache` v4 (node20) -> v6 (node24). v5 moves to node24 and v6 migrates to ESM; the inputs and `cache-hit` stay the same. - `robinraju/release-downloader` v1.7 (node16) -> v1.13 (node24). It deletes the archive only with `extract: true`, which the job leaves off, so the checksum and `tar` steps still find the tarball. The setup-node comment drops its version numbers so it no longer goes stale with each bump. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When links break, the run page showed only "Process completed with exit code 2"; the broken URLs were in the raw `Check links` log. `tee` now keeps Lychee's report in the log and saves a copy. A new `Publish link report` step adds it to the job summary, and it runs after a failed check as well. `set -o pipefail` keeps Lychee's exit code: the default `bash -e` shell would take `tee`'s 0 and pass. Lychee's own `--output` would not do. In 0.24.2 it moves the report from stdout to the file, so the log would lose the broken links. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Contributor
There was a problem hiding this comment.
🟢 Approved
No active review issues are recorded for the workflow action upgrades and Lychee report-summary changes.
No open issues 🎉
What changed in this PR
Updates the shared Hugo link-checking workflow to use Node.js 24-based actions and display Lychee’s report on the workflow run page.
Changes:
- Upgrades
setup-node,cache, andrelease-downloaderto newer action versions. - Saves Lychee’s output while preserving step logs and failure status.
- Adds the saved report to the job summary, including after failed link checks.
| File | Description |
|---|---|
.github/workflows/check-links.yml |
Updates action versions and publishes Lychee’s report to the job summary. |
Review effort: Balanced
alexander-yevsyukov
added a commit
to SpineEventEngine/SpineEventEngine.github.io
that referenced
this pull request
Nov 2, 2026
Brings in SpineEventEngine/config#825: `check-links` moves its actions off Node.js 20 and shows Lychee's report on the run page. The workflow keeps the `.lycheeignore` trigger added here, which `config` doesn't have yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
The
Check Linksjob warned that Node.js 20 is deprecated foractions/cache@v4,actions/setup-node@v4, androbinraju/release-downloader@v1.7(seen on SpineEventEngine/documentation#96). When links broke, the run page also showed only "Process completed with exit code 2", and the broken URLs were only in the raw step log. This PR fixes both in.github/workflows/check-links.yml.Action versions
The runtimes come from
runs.usingin each tag'saction.yml.actions/setup-nodepackage.jsonhaspackageManager. v6 limits that automatic caching to npm. v7 moves to ESM and drops the dummyNODE_AUTH_TOKEN, which matters only withregistry-url. The job setscache: 'npm'and noregistry-url, so none of these apply.actions/cache(×3)path,key,restore-keys).cache-hitstill means an exact key match, which the comment on the Lychee download step relies on.robinraju/release-downloaderrepository,tag,fileNameandout-file-pathwork as before. v1.13 deletes the archive after extraction, but only whenextract: trueis set (src/main.ts), and this job doesn't set it. So the checksum andtarsteps still find the tarball.actions/checkoutpeaceiris/actions-hugoLychee report on the run page
Lychee's report now also goes to the job summary, and the step log keeps it as before.
Check linkspipes Lychee throughtee lychee-report.txt. The log is unchanged: locally, with Lychee 0.24.2, the output matched the current invocation apart from the timing figure.set -o pipefailkeeps Lychee's exit code (2 on broken links). The defaultrun:shell isbash -ewithoutpipefail. Without it, the step would taketee's 0 and the job would pass despite broken links. I checked that locally too.Publish link reportstep (if: ${{ !cancelled() && hashFiles('lychee-report.txt') != '' }}) runs after a failed check too. It appends the report, in atextblock, to$GITHUB_STEP_SUMMARY.Why not
--format markdown --output: in Lychee 0.24.2,--outputmoves the report from stdout to the file instead of copying it. Both stdout and stderr came out empty in a local run, so the log would lose the broken links. Lychee has no option for writing two formats in one run. Neitherlychee.tomlin documentation or spine.io setsformatoroutput.Consumers
./config/pullrunsmigrate, which copiescheck-links.ymlinto every repo with a Hugo site underdocs/orsite/, unless that repo has a# config:replaces check-links.ymloverride. Neither has one, so documentation and spine.io get this change on their next./config/pull.Verification
actionlint1.7.12 with shellcheck reports nothing forcheck-links.yml.Check linksexited 2,Publish link reportexited 0, and the summary showed the per-page errors and the totals line.docs/**after./config/pull.Out of scope: other distributed workflows still on node20 or older
These are in
.github-workflows/, which only JVM repos receive. Config's own CI never runs them, so bumping them needs a check on a real JVM build. They are left for a follow-up:mikepenz/action-junit-reportbuild-on-ubuntu.yml,build-on-windows.ymlal-cheb/configure-pagefile-actionbuild-on-windows.ymlactions/delete-package-versionsremove-obsolete-artifacts-from-packages.yamlmainis still node20.All other actions in
.github/workflows/and.github-workflows/already run on node24, or are composite actions whose nested actions do.actionlint also flags issues in files this PR doesn't touch, which are already on
master:concurrency: queue: maxinpublishing.ymlandpublish-api-docs.yml(a key actionlint 1.7.12 doesn't recognize yet), and two SC2086 info notes inremove-obsolete-artifacts-from-packages.yaml.🤖 Generated with Claude Code