name: Tests and linters

on: [push, pull_request, workflow_dispatch]

jobs:

  tests-on-legacy-versions:
    name: Run tests on legacy versions
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        python-version: [3.7]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install tox
      - run: tox
        env:
          TOXENV: ${{ matrix.python-version }}

  test-on-different-versions:
    name: Run tests
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.8, 3.9, "3.10", 3.11, 3.12, 3.13]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install tox
      - run: tox
        env:
          TOXENV: ${{ matrix.python-version }}

  test-different-pydantic-versions:
    name: Run tests with different pydantic versions
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.12"
      - run: pip install tox
      - run: tox -e pydantic-v1,pydantic-v2

  test-coverage:
    name: Run tests with coverage
    runs-on: ubuntu-latest
    env:
      DEPENDENCY_INJECTOR_DEBUG_MODE: 1
      PIP_VERBOSE: 1
      COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: 3.12
      - run: pip install tox 'cython>=3,<4'
      - run: tox -vv
        env:
          TOXENV: coveralls

  linters:
    name: Run linters
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toxenv: [flake8, pydocstyle, mypy, pylint]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: 3.13
      - run: pip install tox
      - run: tox
        env:
          TOXENV: ${{ matrix.toxenv }}
