name: Test
on: [push, pull_request]

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ['3.6', '3.7', '3.8', '3.9', '3.10', pypy-3.7, pypy-3.8]
        exclude:
          - os: windows-latest
            python-version: pypy-3.7
          - os: windows-latest
            python-version: pypy-3.8
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install from source
        run: python -m pip install --editable .[test,bcrypt]
      - name: Run tests
        run: python setup.py test
      - name: Upload coverage to Coveralls
        if: github.event_name == 'push'
        env:
          COVERALLS_PARALLEL: true
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          python -m pip install coveralls
          python -m coveralls --service=github

  coveralls-finish:
    needs: test
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: 3.x
      - name: Finish Coveralls parallel builds
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          python -m pip install coveralls
          python -m coveralls --service=github --finish
