# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl

# This workflow contains tests that operate on documentation files only. Some
# checks modify the source so they cannot be combined into a single job.

name: 'Docs'

'on':
  push:
    branches:
      - master
      - '*/ci'
    paths:
      - '.github/workflows/checkdocs.yml'
      - '.github/scripts/**'
      - 'scripts/**'
      - '**.md'
      - 'docs/*'
  pull_request:
    branches:
      - master
    paths:
      - '.github/workflows/checkdocs.yml'
      - '.github/scripts/**'
      - 'scripts/**'
      - '**.md'
      - 'docs/*'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

permissions: {}

jobs:
  # config file help: https://github.com/amperser/proselint/
  proselint:
    name: 'proselint'
    runs-on: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false

      - name: 'install prereqs'
        run: |
          python3 -m venv ~/venv
          ~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary -r .github/scripts/requirements-proselint.txt

      - name: 'trim headers off all *.md files'
        run: git ls-files '*.md' -z | xargs -0 -n1 .github/scripts/trimmarkdownheader.pl

      - name: 'check prose'
        run: |
          cat <<JSON > ~/.proselintrc.json
          {
            "checks": {
              "annotations.misc": false,
              "lexical_illusions": false,
              "misc.annotations": false,
              "redundancy.misc.garner": false,
              "security.password": false,
              "spelling.ve_of": false,
              "typography.diacritical_marks": false,
              "typography.symbols": false
            }
          }
          JSON
          source ~/venv/bin/activate
          git ls-files README '*.md' -z | grep -Evz '(CHECKSRC|DISTROS|CURLOPT_INTERFACE|interface)\.md' | xargs -0 proselint check --

      - name: 'check special prose'  # For CHECKSRC and files with aggressive exclamation mark needs
        run: |
          cat <<JSON > ~/.proselintrc.json
          {
            "checks": {
              "annotations.misc": false,
              "lexical_illusions": false,
              "typography.diacritical_marks": false,
              "typography.punctuation.exclamation": false,
              "typography.symbols": false
            }
          }
          JSON
          source ~/venv/bin/activate
          proselint check docs/internals/CHECKSRC.md docs/libcurl/opts/CURLOPT_INTERFACE.md docs/cmdline-opts/interface.md

  pyspelling:
    name: 'pyspelling'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false

      - name: 'trim all *.md files in docs/'
        run: .github/scripts/cleancmd.pl 'docs/*.md'

      - name: 'install'
        run: |
          sudo rm -f /etc/apt/sources.list.d/{azure-cli.sources,microsoft-prod.list,ondrej-ubuntu-php-noble.sources}
          sudo apt-get -o Dpkg::Use-Pty=0 update
          sudo apt-get -o Dpkg::Use-Pty=0 install aspell aspell-en
          python3 -m venv ~/venv
          ~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary -r .github/scripts/requirements-docs.txt

      - name: 'check spelling'
        run: |
          source ~/venv/bin/activate
          # setup the custom wordlist
          grep -v '^#' .github/scripts/pyspelling.words > wordlist.txt
          aspell --version
          pyspelling --version
          pyspelling --verbose --jobs 5 --config .github/scripts/pyspelling.yaml

  badwords-synopsis:
    name: 'badwords, synopsis'
    runs-on: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false

      - name: 'badwords'
        run: .github/scripts/badwords.pl -w .github/scripts/badwords.ok '**.md' projects/OS400/README.OS400 < .github/scripts/badwords.txt

      - name: 'verify synopsis'
        run: .github/scripts/verify-synopsis.pl docs/libcurl/curl*.md

  man-examples:
    name: 'man-examples'
    runs-on: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false

      - name: 'verify examples'
        run: .github/scripts/verify-examples.pl docs/libcurl/curl*.md docs/libcurl/opts/*.md
