name: Continuous Integration
permissions: read-all

on:
  pull_request:
    branches:
      - main

concurrency:
  # yamllint disable-line rule:line-length
  group: "${{ github.workflow }}-${{ github.head_ref || github.run_id }}"
  cancel-in-progress: true

jobs:
  test:
    timeout-minutes: 20
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        include:
          - python: "3.9"
            tox: py39
          - python: "3.10"
            tox: py310
          - python: "3.11"
            tox: py311
          - python: "3.12"
            tox: py312
          - python: "3.13"
            tox: py313
          - python: "3.14"
            tox: py314,py314-trio
          - python: "3.14"
            tox: pep8
          - python: "3.14"
            tox: mypy
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@v4.2.2
        with:
          fetch-depth: 0

      - name: Setup Python 🔧
        uses: actions/setup-python@v5.5.0
        with:
          python-version: ${{ matrix.python }}
          allow-prereleases: true

      - name: Build 🔧 & Test 🔍
        run: |
          pip install tox
          tox -e ${{ matrix.tox }}
