| name: Build |
| |
| on: |
| push: |
| branches: [main] |
| tags: ['v*'] |
| pull_request: |
| branches: [main] |
| workflow_dispatch: |
| env: |
| LATEST_PY_VERSION: '3.11' |
| PYTEST_VERBOSE: 'true' |
| |
| jobs: |
| # Run tests for each supported python version |
| test: |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', 'pypy3.9'] |
| fail-fast: false |
| services: |
| nginx: |
| image: kennethreitz/httpbin |
| ports: |
| - 80:80 |
| |
| steps: |
| # Set up python + poetry |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v4 |
| with: |
| python-version: ${{ matrix.python-version }} |
| - uses: snok/install-poetry@v1.3 |
| with: |
| virtualenvs-in-project: true |
| |
| # Start integration test databases |
| - uses: supercharge/mongodb-github-action@1.9.0 |
| with: |
| mongodb-version: 5.0 |
| - uses: supercharge/redis-github-action@1.5.0 |
| with: |
| redis-version: 6 |
| - uses: rrainn/dynamodb-action@v3.0.0 |
| |
| # Cache packages per python version, and reuse until lockfile changes |
| - name: Cache python packages |
| id: cache |
| uses: actions/cache@v3 |
| with: |
| path: .venv |
| key: venv-${{ matrix.python-version }}-latest-${{ hashFiles('poetry.lock') }} |
| - name: Install dependencies |
| if: steps.cache.outputs.cache-hit != 'true' |
| run: poetry install -v -E all |
| |
| # Run tests with coverage report |
| - name: Run unit + integration tests |
| if: ${{ !contains(matrix.python-version, 'pypy') }} |
| run: | |
| source $VENV |
| nox -e cov -- xml |
| |
| # pypy tests aren't run in parallel, so too slow for integration tests |
| - name: Run unit tests only |
| if: ${{ contains(matrix.python-version, 'pypy') }} |
| run: | |
| source $VENV |
| pytest tests/unit |
| |
| # Latest python version: send coverage report to codecov |
| - name: "Upload coverage report to Codecov" |
| if: ${{ matrix.python-version == env.LATEST_PY_VERSION }} |
| uses: codecov/codecov-action@v3 |
| |
| # Run code analysis checks via pre-commit hooks |
| analyze: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v4 |
| with: |
| python-version: ${{ env.LATEST_PY_VERSION }} |
| - name: Run style checks & linting |
| uses: pre-commit/action@v3.0.0 |