name: Markdown link check # Verify every internal markdown link in the repo resolves to an existing # file (or anchor). External http(s) links are also probed but with a # loose timeout — flaky third-party hosts must not break our CI. # # Trigger: PRs that touch any *.md file, plus a weekly cron so external # link rot is caught even when nobody is editing docs. on: pull_request: paths: - "**/*.md" - ".gitea/workflows/markdown-links.yml" push: branches: - main paths: - "**/*.md" - ".gitea/workflows/markdown-links.yml" schedule: - cron: "0 5 * * 1" # Monday 05:00 UTC weekly link-rot check workflow_dispatch: {} jobs: check: runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest steps: - uses: actions/checkout@v4 # ── Pure-python internal link check (no external network needed) ──── # We use the same logic that found the 2 broken links before the # reviewer meeting: parse every [text](path) link, check that the # target file exists relative to the source file's directory. Skips # http(s)://, mailto:, and pure-anchor (#fragment) links. - name: Internal link check (all *.md files) run: python3 scripts/check-markdown-links.py