name: Test on: push: branches: - main pull_request: types: [opened, synchronize] workflow_dispatch: inputs: debug_enabled: description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' required: false default: false jobs: test: runs-on: ubuntu-20.04 strategy: matrix: python-version: ["3.6.15", "3.7", "3.8", "3.9", "3.10"] fail-fast: false steps: - uses: actions/checkout@v3.1.0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} # Allow debugging with tmate - name: Setup tmate session uses: mxschmitt/action-tmate@v3 if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled }} with: limit-access-to-actor: true - uses: actions/cache@v3 id: cache with: path: ${{ env.pythonLocation }} key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-root - name: Install poetry if: steps.cache.outputs.cache-hit != 'true' # TODO: remove python -m pip install --force git+https://github.com/python-poetry/poetry-core.git@ad33bc2 # once there's a release of Poetry 1.2.x including poetry-core > 1.1.0a6 # Ref: https://github.com/python-poetry/poetry-core/pull/188 run: | python -m pip install --upgrade pip python -m pip install --force git+https://github.com/python-poetry/poetry-core.git@ad33bc2 python -m pip install "poetry==1.2.0a2" python -m poetry plugin add poetry-version-plugin - name: Configure poetry run: python -m poetry config virtualenvs.create false - name: Install Dependencies if: steps.cache.outputs.cache-hit != 'true' run: python -m poetry install - name: Lint if: ${{ matrix.python-version != '3.6.15' }} run: python -m poetry run bash scripts/lint.sh - run: mkdir coverage - name: Test run: python -m poetry run bash scripts/test.sh env: COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }} CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }} - name: Store coverage files uses: actions/upload-artifact@v3 with: name: coverage path: coverage coverage-combine: needs: [test] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.8' - name: Get coverage files uses: actions/download-artifact@v3 with: name: coverage path: coverage - run: pip install coverage[toml] - run: ls -la coverage - run: coverage combine coverage - run: coverage report - run: coverage html --show-contexts --title "Coverage for ${{ github.sha }}" - name: Store coverage HTML uses: actions/upload-artifact@v3 with: name: coverage-html path: htmlcov