Repository navigation
fix(link-check): fail on broken links and never open issues - #77
Merged
Merged
Conversation
VitePress renders /specs as /specs.html while the build writes specs/index.html. The link works in production through a 308 redirect, but a local check of the built site reports it as a dead file. Point the nav, sidebar and hero action at /specs/ so the link resolves in both.
Deploying website with
|
| Latest commit: |
7b889ae
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://b74ed9d3.website-33l.pages.dev |
| Branch Preview URL: | https://fix-link-check.website-33l.pages.dev |
The workflow ran the checker with fail: false and gated the issue step on a non-zero exit code. When lychee could not start, the step exited 127 and the action still wrote a report, so every scheduled run opened an issue with no content. 63 runs produced 63 issues. Run lychee directly, fail the job when the tool is missing or the report is absent or empty, and never open an issue. Internal links run on every push and PR; external links run on the schedule. Harden the install and the run: bound the download with connect and total timeouts, locate the binary after extraction instead of hardcoding the tarball layout, and run the external check after a failure but not after cancellation.
mroderick
force-pushed
the
fix/link-check
branch
from
November 12, 2026 15:23
5f828e3 to
7b889ae
Compare
mroderick
marked this pull request as ready for review
November 12, 2026 16:10
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 Link Checker never checked links. 63 scheduled runs produced 63 issues, each with only a link to the run. The checker now fails the job instead of opening an issue.
Why it happened:
fail: falsekept the workflow green, and the issue step was gated onsteps.lychee.outputs.exit_code != 0, which is also true when lychee fails to start. A missing binary exits 127 and the action still writes a report line, so each run created an issue with no content.What changes:
/specslinks use/specs/, so the internal check resolves them.The 63 old issues are deleted. Issue #76 stays.
Evidence and what the checker covers
The 63 runs span 2026-04-27 to 2026-06-27. Each issue body is 117 bytes: the
[Full Github Actions output](...)line that lychee-action appends after the report. A working run writes a 430-byte report.Reproduction: run lychee-action's
entrypoint.shwith the same args andlycheeabsent from PATH. It writes the 117-byte line, setsexit_code=127, and leaves the step green.peter-evans/create-issue-from-filethen opens an issue.Run logs are gone: the last run was more than 90 days ago and
gh run view --logreturns HTTP 410. The action's changelog has a matching fix: #338 "Install into$RUNNER_TEMPinstead of$HOME" (2026-05-12), which addresses a PATH mismatch with the same symptom.GitHub disabled the workflow after 60 days without a push (the last push was 2026-04-27). That is why the flood stopped on 2026-06-27. GitHub sends scheduled-workflow notifications to the user who created the workflow, so a failing scheduled run is not silent.
The old arguments excluded all internal links:
--exclude "^file://"excluded 383 of 518 links. The check only saw external hosts. The new split checks internal links as file links and external links as http(s) links.Review notes
Note: the workflow is disabled. Re-enable it after merge with
gh workflow enable "Link Check".