| name: Build |
| |
| on: |
| push: |
| branches: [master] |
| tags: ['v*'] |
| pull_request: |
| branches: [master] |
| workflow_dispatch: |
| env: |
| LATEST_PY_VERSION: '3.10' |
| |
| 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'] |
| fail-fast: false |
| services: |
| nginx: |
| image: kennethreitz/httpbin |
| ports: |
| - 80:80 |
| |
| steps: |
| # Set up python + poetry |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| with: |
| python-version: ${{ matrix.python-version }} |
| - uses: snok/install-poetry@v1.3 |
| with: |
| version: 1.2.0b1 |
| virtualenvs-in-project: true |
| |
| # Start integration test databases |
| - uses: supercharge/mongodb-github-action@1.7.0 |
| with: |
| mongodb-version: 4.4 |
| - uses: supercharge/redis-github-action@1.4.0 |
| with: |
| redis-version: 6 |
| - uses: rrainn/dynamodb-action@v2.0.1 |
| |
| # 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 tests |
| run: | |
| source $VENV |
| nox -e cov -- xml |
| |
| # 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@v3 |
| with: |
| python-version: ${{ env.LATEST_PY_VERSION }} |
| - name: Run style checks & linting |
| uses: pre-commit/action@v2.0.3 |