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: Installation (deps and package) run: | pip install . -r tests/requirements.txt - name: Test with pytest run: | # Test the built package pytest --import-mode=append # Test and get coverage against unpackaged source pytest --cov --cov-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 }}