name: Markdown link check

# Verify every internal markdown link in the repo resolves to an existing
# file (or anchor).
#
# Triggers:
#   - "/links" in commit message  (manual, on that exact commit)
#   - Weekly cron Mon 05:00 UTC   (catches link rot without any activity)
#   - workflow_dispatch            (manual run on any branch)
#
#   git commit -m "docs: rename section /links"

on:
  push:
    branches:
      - main
      - dev
      - "claude/**"
      - "feature/**"
      - "review/**"
  schedule:
    - cron: "0 5 * * 1"   # Monday 05:00 UTC weekly link-rot check
  workflow_dispatch: {}

jobs:
  check:
    if: |
      github.event_name == 'schedule' ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '/links') ||
      contains(github.event.head_commit.message, '/ci-all')
    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
