name: Test Suite

on:
  workflow_dispatch: {}
  workflow_call: {}

jobs:
  lint:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        python-version: ["3.11"]
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60

    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 --upgrade pip setuptools wheel
          python -m pip install tox tox-gh-actions

      - name: isort
        run: tox -e isort

      - name: black
        run: tox -e black

      - name: flake8
        run: tox -e flake8

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ["3.8", "3.11"]
    timeout-minutes: 360

    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 --upgrade pip setuptools wheel
        python -m pip install tox tox-gh-actions

    - name: safety
      run: tox -e safety

    - name: Test with tox
      run: tox -- --benchmark-skip
      timeout-minutes: 60

    - name: Report coverage
      shell: bash
      run: bash <(curl -s https://codecov.io/bash)

