Skip to content

TINYDOC-3514 - Add scheduled link checking to CI - #4276

Closed
kemister85 wants to merge 3 commits into
mainfrom
TINYDOC-3514-link-checking
Closed

kemister85 wants to merge 3 commits into
mainfrom
TINYDOC-3514-link-checking

Conversation

@kemister85

@kemister85 kemister85 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Ticket: TINYDOC-3514

What this does

Adds a weekly scheduled link check (Mondays 06:00 UTC, plus manual dispatch). Builds the full production site — all four published versions — and runs lychee over the built HTML.

Findings go to a single rolling link-rot issue: the body is refreshed each run, and the issue closes automatically once a run comes back clean.

Layer 1 of 2 — the PR-time check is #4277.

Validation

  • Config parses under lychee 0.24.2.
  • Full local build crawled: tuning .lycheeignore took it from 446 errors to 9 (7 distinct), all genuine rot — archive.tinymce.com (×2), gsuite.google.com, dropbox.com/guide/business, ietf.org/rfc/bcp/bcp47.txt, addons.mozilla.org, and mysite.com/tinymce.html (a placeholder rendered as a live link, so it needs a content fix rather than an ignore entry). Content follow-up, not blockers here.
  • Three hosts confirmed reachable in a browser but refusing automated checkers are now ignored: stackoverflow.com (403), graylog.org (403), tinymcedocs.mcp.kapa.ai (405 — an MCP endpoint, not a page).
  • exit_code confirmed as a declared output of lychee-action@v2, so the reporting conditions fire.
  • link-rot label created.

Not yet verified: the rolling-issue logic cannot run until this is on main, because workflow_dispatch only fires from the default branch. Dispatch it manually straight after merge to confirm the first real run.

Add a weekly scheduled workflow that builds the full published site (all
versions) and runs lychee to detect dead external links, opening a
link-rot issue when any are found.

- .github/workflows/link-check.yml: weekly cron + manual dispatch
- .lychee.toml: checker config (resolves root-relative links via base_url,
  excludes the tiny.cloud family and localhost, accepts redirects and 429)
- .lycheeignore: curated hosts that block automated checkers but resolve
  in a browser
- package.json: check-links script for local use
- .gitignore: ignore the local lychee cache and report output
@kemister85
kemister85 force-pushed the TINYDOC-3514-link-checking branch from 5858085 to eee30cf Compare August 20, 2026 02:18
…sion

The cache settings in .lychee.toml had no effect because each scheduled run
starts on a clean runner. Most entries will have aged past max_cache_age at the
weekly cadence, which is intended; the saving lands on back-to-back manual
dispatches.

lychee-action@v2 is a floating major tag, so pin the checker version explicitly
to keep results reproducible.
@kemister85

Copy link
Copy Markdown
Contributor Author

Closing for now. PR-time link checking in #4277 covers the need, and a weekly full-site scan is not required alongside it. The .lychee.toml and .lycheeignore configuration this PR introduced is carried by #4277, so nothing is lost. Reopen if a scheduled full-site scan is wanted later — the rolling-issue logic here is untested, since workflow_dispatch only fires from the default branch.

@kemister85 kemister85 closed this Aug 30, 2026
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