summaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/tests.yaml90
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..63f25cf
--- /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 package and test deps
+ run: |
+ pip install . coverage
+
+ - name: Test with unittest
+ run: |
+ coverage run -m unittest
+ coverage report --fail-under=100
+
+ - name: Report coverage
+ if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.10'
+ uses: codecov/codecov-action@v2
+
+ 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 }}