# SPDX-FileCopyrightText: David Fritzsche
# SPDX-License-Identifier: CC0-1.0
name: Python package

on: [push]

jobs:
  test-py37:
    runs-on: ${{ matrix.os }}
    strategy:
      max-parallel: 4
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: |
          3.7
          3.11
    - name: Install dependencies
      run: |
        python -m pip install -c constraints.txt pip
        python -m pip install -c constraints.txt invoke tox
    - name: Run tox
      env:
        TOX_PARALLEL_NO_SPINNER: "1"
      run: |
        inv mkdir build/coverage-data
        inv tox -e "py37-*"

  test-py38-py39-py310-py311-py312:
    runs-on: ${{ matrix.os }}
    strategy:
      max-parallel: 8
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install -c constraints.txt pip
        python -m pip install -c constraints.txt invoke tox
    - name: Run tox
      env:
        TOX_PARALLEL_NO_SPINNER: "1"
      run: |
        inv mkdir build/coverage-data
        inv tox -e "py-*"


  lint:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: ["3.11"]

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install -c constraints.txt black flake8 flake8-isort mypy pytest
        pip list
    - name: Run black
      run: |
        black --check --diff .
    - name: Run mypy
      run: |
        mypy src tests
    - name: Run isort
      run: |
        isort . --check --diff
    - name: Run flake8
      run: |
        flake8 --help
        flake8 -v
