name: CI

on:
  push:
    branches:
    - master
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Set up Python 3.6
        uses: actions/setup-python@v2
        with:
          python-version: "3.6"
      - uses: pre-commit/action@v2.0.2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

  tests:
    name: Python ${{ matrix.python-version }} (${{ matrix.toxenv }})
    runs-on: ubuntu-latest
    needs: lint

    strategy:
      matrix:
        python-version: ["3.6", "3.7", "3.8", "3.9"]
        experimental: [false]
        toxenv: ["py"]
        include:
          - python-version: "3.x"
            toxenv: "packaging"
            experimental: false
          - python-version: "3.x"
            toxenv: "djangomain"
            experimental: true
          - python-version: "pypy3"
            toxenv: "PyPy"
            experimental: false

    steps:
    - uses: actions/checkout@v2

    - uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip setuptools wheel
        python -m pip install --upgrade coveralls tox tox-py tox-venv

    - name: Run tox targets for Python ${{ matrix.python-version }}
      if: ${{ matrix.toxenv == 'py' }}
      continue-on-error: ${{ matrix.experimental }}
      run: tox --py current

    - name: Run '${{ matrix.toxenv }}' tox targets
      if: ${{ matrix.toxenv != 'py' && matrix.toxenv != 'PyPy' }}
      continue-on-error: ${{ matrix.experimental }}
      run: tox -e ${{ matrix.toxenv }}

    - name: Run tox targets for Python ${{ matrix.python-version }}
      if: ${{ matrix.toxenv == 'PyPy' }}
      continue-on-error: ${{ matrix.experimental }}
      run: tox -e pypy3-django22,pypy3-django30,pypy3-django31,pypy3-django32

    - name: Upload coverage data to coveralls.io
      env:
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         COVERALLS_FLAG_NAME: run-${{ matrix.python-version }}
         COVERALLS_PARALLEL: true
      run: coveralls --service=github

  finish:
    name: Indicate completion to coveralls.io
    needs: tests
    runs-on: ubuntu-latest
    steps:
    - name: Finalize publishing to coveralls.io
      uses: coverallsapp/github-action@master
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        parallel-finished: true
