diff options
Diffstat (limited to '.github/workflows/tests.yaml')
-rw-r--r-- | .github/workflows/tests.yaml | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..d88b88e --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,90 @@ +name: Tests + +on: + push: + branches: [ master ] + tags: [ '[0-9]+.[0-9]+.[0-9]+*' ] + pull_request: + branches: [ master ] + +jobs: + + linters: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install pre-commit + run: | + pip install pre-commit + + - name: run linters + # pre-commit also runs in pre-commit.ci, but let's have it here too + # to block `pypi-publish` job from triggering if pre-commit fails + run: | + pre-commit run -a + + tests: + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: ['pypy-3.7', '3.7', '3.8', '3.9', '3.10', '3.11-dev'] + os: [ubuntu-latest, macos-latest, windows-latest] + continue-on-error: ${{ matrix.python-version == '3.11-dev' }} + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install test deps + run: | + pip install . -r tests/requirements.txt + + - name: Test with pytest + run: | + # TODO: bump coverage % up to 100 + pytest --cov --cov-fail-under=75 + + - name: Report coverage + if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.10' + uses: codecov/codecov-action@v1 + + allgood: + runs-on: ubuntu-latest + needs: + - tests + - linters + steps: + - run: echo "Great success!" + + pypi-publish: + # Only publish if all other jobs succeed + needs: [ allgood ] + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install build and publish tools + run: | + pip install build twine + - name: Build and check + run: | + rm -rf dist/ && python -m build + twine check --strict dist/* + - name: Publish + run: | + twine upload dist/* + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} |