name: Python Tests

on:
  push:
  pull_request:

concurrency:
  group: tests-${{ github.ref }}
  cancel-in-progress: true

defaults:
  run:
    shell: bash -eux {0}

jobs:

  build:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 10
    strategy:
      matrix:
        os: [ubuntu-latest]
        python-version: ["3.9", "3.12", "3.13"]
      fail-fast: false
    name: CPython ${{ matrix.python-version }}-${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: 'pip'
          cache-dependency-path: 'pyproject.toml'
          allow-prereleases: true
      - id: setup-mongodb
        uses: mongodb-labs/drivers-evergreen-tools@master
        with:
          version: "8.0"
          topology: replica_set
      - name: Install Python dependencies
        run: |
          python -m pip install -U pip tox
      - name: Run tests
        run: |
          tox -m test

  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-python@v5
        with:
          python-version: 3.9
          cache: 'pip'
          cache-dependency-path: 'pyproject.toml'
      - name: Install Python dependencies
        run: |
          python -m pip install -U pip tox
      - name: Run linters
        run: |
          tox -m lint-manual

  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-python@v5
        with:
          python-version: 3.9
          cache: 'pip'
          cache-dependency-path: 'pyproject.toml'
      - name: Install Python dependencies
        run: |
          python -m pip install -U pip tox
      - name: Run docs
        run: tox -m docs
      - name: Run linkcheck
        run: tox -m linkcheck
      - name: Start MongoDB
        uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0
        with:
          mongodb-version: 5.0
      - name: Run doctest
        run: tox -m doctest

  release:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-python@v5
        with:
          python-version: 3.9
          cache: 'pip'
          cache-dependency-path: 'pyproject.toml'
      - name: Install Python dependencies
        run: |
          python -m pip install -U pip
      - name: Run the release script
        run: |
          bash release.sh

  typing:
    name: Typing Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"
          cache: 'pip'
          cache-dependency-path: 'pyproject.toml'
          allow-prereleases: true
      - name: Install dependencies
        run: |
          python -m pip install -U pip tox
      - name: Run mypy
        run: |
          tox -m typecheck-mypy
