name: CI

on: [push, pull_request]

jobs:
  Windows:
    name: 'Windows (${{ matrix.python }})'
    runs-on: 'windows-latest'
    strategy:
      fail-fast: false
      matrix:
        python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']

    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python }}
          allow-prereleases: true
          cache: pip
          cache-dependency-path: test-requirements.txt
      - name: Run tests
        run: ./ci.sh
        shell: bash
        env:
          # Should match 'name:' up above
          JOB_NAME: 'Windows (${{ matrix.python }})'

  Ubuntu:
    name: 'Ubuntu (${{ matrix.python }}${{ matrix.extra_name }})'
    timeout-minutes: 10
    runs-on: 'ubuntu-latest'
    strategy:
      fail-fast: false
      matrix:
        python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12-dev']
        check_formatting: ['0']
        extra_name: ['']
        include:
          - python: '3.10'
            check_formatting: '1'
            extra_name: ', check formatting'
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup python
        uses: actions/setup-python@v4
        if: "!endsWith(matrix.python, '-dev')"
        with:
          python-version: ${{ matrix.python }}
          cache: pip
          cache-dependency-path: test-requirements.txt
      - name: Setup python (dev)
        uses: deadsnakes/action@v3.0.1
        if: endsWith(matrix.python, '-dev')
        with:
          python-version: '${{ matrix.python }}'
      - name: Run tests
        run: ./ci.sh
        env:
          CHECK_FORMATTING: '${{ matrix.check_formatting }}'
          # Should match 'name:' up above
          JOB_NAME: 'Ubuntu (${{ matrix.python }}${{ matrix.extra_name }})'

  macOS:
    name: 'macOS (${{ matrix.python }})'
    timeout-minutes: 10
    runs-on: 'macos-latest'
    strategy:
      fail-fast: false
      matrix:
        python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python }}
          allow-prereleases: true
          cache: pip
          cache-dependency-path: test-requirements.txt
      - name: Run tests
        run: ./ci.sh
        env:
          # Should match 'name:' up above
          JOB_NAME: 'macOS (${{ matrix.python }})'
