name: Tests

on:
  push:
    branches:
      - main
      - current-release
      - "*LTS"
    tags:
      - "!*"
  pull_request:
    branches:
      - main
      - current-release
      - "*LTS"
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  run_tests:
    name: "${{ matrix.config.platform == 'windows-latest' && 'Windows' || 'Linux' }} / Python ${{ matrix.config.python-version }} / tox -e ${{ matrix.config.tox-env }}"
    if: github.event.pull_request.draft == false
    runs-on: ${{ matrix.config.platform || 'ubuntu-latest' }}
    strategy:
      fail-fast: true
      matrix:
        config:
          - { python-version: "3.8",  tox-env: security }
          - { python-version: "3.9",  tox-env: security }
          - { python-version: "3.10", tox-env: security }
          - { python-version: "3.11", tox-env: security }
          - { python-version: "3.10", tox-env: lint }
          # - { python-version: "3.10", tox-env: docs }
          - { python-version: "3.8",  tox-env: type-checking }
          - { python-version: "3.9",  tox-env: type-checking }
          - { python-version: "3.10", tox-env: type-checking }
          - { python-version: "3.11", tox-env: type-checking }
          - { python-version: "3.8",  tox-env: py38,          max-attempts: 3 }
          - { python-version: "3.8",  tox-env: py38-no-ext,   max-attempts: 3 }
          - { python-version: "3.9",  tox-env: py39,          max-attempts: 3 }
          - { python-version: "3.9",  tox-env: py39-no-ext,   max-attempts: 3 }
          - { python-version: "3.10", tox-env: py310,         max-attempts: 3 }
          - { python-version: "3.10", tox-env: py310-no-ext,  max-attempts: 3 }
          - { python-version: "3.11", tox-env: py311,         max-attempts: 3 }
          - { python-version: "3.11", tox-env: py311-no-ext,  max-attempts: 3 }
          - { python-version: "3.8",  tox-env: py38-no-ext,   platform: windows-latest, ignore-errors: true }
          - { python-version: "3.9",  tox-env: py39-no-ext,   platform: windows-latest, ignore-errors: true }
          - { python-version: "3.10", tox-env: py310-no-ext,  platform: windows-latest, ignore-errors: true }
          - { python-version: "3.11", tox-env: py310-no-ext,  platform: windows-latest, ignore-errors: true }
    steps:
      - name: Run tests
        uses: sanic-org/simple-tox-action@v1
        with:
          python-version: ${{ matrix.config.python-version }}
          tox-env: ${{ matrix.config.tox-env }}
          max-attempts: ${{ matrix.config.max-attempts || 1 }}
          ignore-errors: ${{ matrix.config.ignore-errors || false }}