# GitHub Action to check our dictionary, this should only be used by the codespell project itself
# For general usage in your repo, see the example in codespell.yml
# https://github.com/codespell-project/codespell
# Concurrency cancels an action on a given PR once a new commit is pushed
name: Pytest
concurrency:
  group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
  cancel-in-progress: true
on: [push, pull_request]
permissions: {}
jobs:
  test:
    env:
      REQUIRE_ASPELL: ${{ startsWith(matrix.os, 'ubuntu') }}
      RUFF_OUTPUT_FORMAT: github
    # Make sure we're using the latest aspell dictionary
    runs-on: ${{ matrix.os }}
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        python-version:
          - "3.9"
          - "3.10"
          - "3.11"
          - "3.12"
          - "3.13"
          - "3.14"
        kind:
          - "standard"
        os:
          - "ubuntu-24.04-arm"
        include:
          - python-version: "3.10"
            kind: "old"
            os: "ubuntu-24.04-arm"
          - python-version: "3.10"
            kind: "no-toml"
            os: "ubuntu-24.04-arm"
          - python-version: "3.13"
            kind: "standard"
            os: "windows-latest"
    name: "${{ matrix.python-version }} ${{ matrix.kind }} ${{ matrix.os }}"
    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false
      - name: Setup python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
      - run: sudo apt-get install libaspell-dev aspell-en
        if: startsWith(matrix.os, 'ubuntu')
      - name: Install dependencies
        shell: bash -e {0}
        run: |
          python --version  # just to check
          python -m pip install --upgrade pip wheel # upgrade to latest pip find 3.5 wheels; wheel to avoid errors
          pip install --upgrade "setuptools!=47.2.0" docutils setuptools_scm[toml] twine
          pip install -e ".[dev]" # install the codespell dev packages
      - run: pip install aspell-python-py3
        if: startsWith(matrix.os, 'ubuntu')
      - run: pip install "chardet<7"
        if: ${{ matrix.kind == 'old' }}
      - run: codespell --help
      - run: codespell --version
      - run: make check
        if: startsWith(matrix.os, 'ubuntu')
      - run: pytest codespell_lib
        if: startsWith(matrix.os, 'windows')
      - uses: codecov/codecov-action@v6
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
      # tomli should not be required for the next two steps (and make sure it's not)
      - run: pip uninstall -yq tomli
        if: ${{ matrix.kind == 'no-toml' }}
      - run: codespell --check-filenames --skip="./.*,./build/*,./codespell_lib/data/*,./codespell_lib/tests/test_basic.py,./example/code.c,./junit-results.xml,*.egg-info/*,*.pyc,*.sig,pyproject-codespell.precommit-toml,README.rst,"
      # this file has an error
      - run: "! codespell codespell_lib/tests/test_basic.py"
        shell: bash -e {0}

  make-check-dictionaries:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: 3.x
      - uses: actions/checkout@v6
        with:
          persist-credentials: false
      - name: Install general dependencies
        run: pip install --upgrade pip wheel # upgrade to latest pip find 3.5 wheels; wheel to avoid errors
      - name: Install codespell dependencies
        run: pip install -e ".[dev]"
      - uses: codespell-project/sort-problem-matcher@v1
      - run: make check-dictionaries
