name: Docs CI

### Run on *EVERY* .v or .md related commit.
### The documentation *SHOULD* stay valid, and the developers should receive
### early warning, if they break it.

on:
  push:
    paths-ignore:
      - '**.yml'
      - '!**/docs_ci.yml'
      - 'cmd/tools/vrepl.v'
  pull_request:
    paths-ignore:
      - '**.yml'
      - '!**/docs_ci.yml'
      - 'cmd/tools/vrepl.v'

concurrency:
  group: docs-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
  cancel-in-progress: true

jobs:
  check-markdown:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - name: Build V
        run: make
      - name: Install dependencies (some examples show how to use sqlite and the x11 clipboard)
        run: ./v retry -- sudo apt install --quiet -y libx11-dev libssl-dev sqlite3 libsqlite3-dev
      - name: Check markdown line length & code examples
        run: ./v check-md -hide-warnings .
        ## NB: -hide-warnings is used here, so that the output is less noisy,
        ## thus real errors are easier to spot.

  report-missing-fn-doc:
    runs-on: ubuntu-24.04
    timeout-minutes: 5
    env:
      MOPTIONS: --diff --deprecated --relative-paths --exclude /vlib/v/ --exclude /builtin/linux_bare/ --exclude /testdata/ --exclude /tests/
    steps:
      - uses: actions/checkout@v4
      - name: Build V
        run: make

      - name: Checkout previous v
        uses: actions/checkout@v4
        with:
          repository: vlang/v
          ref: master # important
          path: pv

      - name: Check against parent commit
        run: |
          # shellcheck disable=SC2086
          ./v missdoc $MOPTIONS pv/vlib vlib

  report-missing-dots-in-doc-comments:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - name: Build V
        run: make
      - name: Check doc comment dots for some key modules
        run: ./v run cmd/tools/find_doc_comments_with_no_dots.v vlib/builtin/ vlib/arrays/ vlib/flag/ vlib/bitfield/
