CI recipes

Snippets for CI providers other than GitHub Actions. All assume mdwright is on $PATH.

GitLab CI

mdwright:
  image: rust:1.91
  cache:
    paths:
      - .cargo/
  script:
    - cargo install --root .cargo mdwright --locked
    - ./.cargo/bin/mdwright check --check .
    - ./.cargo/bin/mdwright fmt-check .
  rules:
    - changes:
        - "**/*.md"

CircleCI

version: 2.1
jobs:
  mdwright:
    docker:
      - image: cimg/rust:1.91
    steps:
      - checkout
      - run: cargo install mdwright --locked
      - run: mdwright check --check .
      - run: mdwright fmt-check .
workflows:
  docs:
    jobs:
      - mdwright

Buildkite

steps:
  - label: ":memo: mdwright"
    command: |
      cargo install mdwright --locked
      mdwright check --check .
      mdwright fmt-check .
    plugins:
      - docker#v5.10.0:
          image: rust:1.91

Drone

kind: pipeline
name: mdwright

steps:
  - name: mdwright
    image: rust:1.91
    commands:
      - cargo install mdwright --locked
      - mdwright check --check .
      - mdwright fmt-check .

Bare-metal / cron

A nightly job that lints a docs corpus and posts a report:

#!/usr/bin/env bash
set -euo pipefail
cd "$DOCS_REPO"
git pull --quiet
mdwright check --format=json . > /tmp/mdwright-report.jsonl
jq -s 'length' /tmp/mdwright-report.jsonl | xargs -I {} \
  echo "mdwright: {} diagnostics in $DOCS_REPO"

The JSON v2 schema is stable; consume it programmatically (see Diagnostic schema).

See also