# Reusable workflow: Meta / Docs / Tool (Cat 5 per ADR-0025) # Markdown lint + internal link check name: Docs CI on: workflow_call: inputs: lint_paths: description: "Glob of paths to lint" type: string default: "**/*.md" ignore_paths: description: "Glob of paths to skip (e.g. archive)" type: string default: "**/archive/**" jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install Node + markdownlint-cli2 run: | sudo apt-get update -qq sudo apt-get install -y nodejs npm sudo npm install -g markdownlint-cli2 - name: Run markdownlint run: | markdownlint-cli2 "${{ inputs.lint_paths }}" "!${{ inputs.ignore_paths }}" || \ (echo "::warning::markdown lint warnings (non-blocking)" && true) - name: Internal link check (lychee) uses: lycheeverse/lychee-action@v2 with: args: --offline --no-progress --include-fragments "**/*.md" --exclude-path "**/archive/**" fail: true - name: README presence (root) run: | test -s README.md || (echo "::warning::no README.md at repo root" && true)