name: Test {{ framework }}

on:
  push:
    branches:
      - master
      - release/**

  pull_request:

# Cancel in progress workflows on pull_requests.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

permissions:
  contents: read

env:
  BUILD_CACHE_KEY: ${{ github.sha }}
  CACHED_BUILD_PATHS: |
    ${{ github.workspace }}/dist-serverless

jobs:
  test:
    name: {{ framework }}, python ${{ matrix.python-version }}, ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    timeout-minutes: 45
{{ strategy_matrix }}
{{ services }}

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}

      - name: Setup Test Env
        run: |
          pip install codecov "tox>=3,<4"

      - name: Test {{ framework }}
        timeout-minutes: 45
        shell: bash
        run: |
          set -x # print commands that are executed
          coverage erase

          ./scripts/runtox.sh "py${{ matrix.python-version }}-{{ framework }}" --cov=tests --cov=sentry_sdk --cov-report= --cov-branch
          coverage combine .coverage*
          coverage xml -i
          codecov --file coverage.xml

  check_required_tests:
    name: All {{ framework }} tests passed or skipped
    needs: test
    # Always run this, even if a dependent job failed
    if: always()
    runs-on: ubuntu-20.04
    steps:
      - name: Check for failures
        if: contains(needs.test.result, 'failure')
        run: |
          echo "One of the dependent jobs have failed. You may need to re-run it." && exit 1
