Skip to content

ci: Add new top-level orchestrator and upload coverage once #14137

ci: Add new top-level orchestrator and upload coverage once

ci: Add new top-level orchestrator and upload coverage once #14137

# Do not edit this YAML file. This file is generated automatically by executing
# python scripts/split_tox_gh_actions/split_tox_gh_actions.py
# The template responsible for it is in
# scripts/split_tox_gh_actions/templates/base.jinja
name: Test GraphQL
on:
push:
branches:
- master
- release/**
- major/**
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
actions: read
pull-requests: write
statuses: write
jobs:
test-graphql:
name: GraphQL
timeout-minutes: 30
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version: ["3.6","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.14t"]
os: [ubuntu-22.04]
env:
# 3.6/3.7 run in the python:X.Y container; tell uv to use that system Python.
TOX_UV_PYTHON_PREFERENCE: ${{ (matrix.python-version == '3.6' || matrix.python-version == '3.7') && 'only-system' || 'managed' }}
container: ${{ (matrix.python-version == '3.6' || matrix.python-version == '3.7') && format('python:{0}', matrix.python-version) || null }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
cache-suffix: ${{ github.workflow }}-${{ matrix.python-version }}
- name: Mark workspace safe for git (3.6/3.7 container)
# needed to make git rev-parse work in the containers
# subprocesses (e.g. sentry_sdk.utils.get_git_revision) can run git.
if: ${{ matrix.python-version == '3.6' || matrix.python-version == '3.7' }}
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Setup Test Env
run: |
uv sync
- name: Test ariadne
run: |
set -x # print commands that are executed
./scripts/runtox.sh "py${{ matrix.python-version }}-ariadne"
- name: Test gql
run: |
set -x # print commands that are executed
./scripts/runtox.sh "py${{ matrix.python-version }}-gql"
- name: Test graphene
run: |
set -x # print commands that are executed
./scripts/runtox.sh "py${{ matrix.python-version }}-graphene"
- name: Test strawberry
run: |
set -x # print commands that are executed
./scripts/runtox.sh "py${{ matrix.python-version }}-strawberry"
- name: Upload coverage data
if: ${{ !cancelled() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-graphql-${{ matrix.python-version }}
# .coverage-* / .junitxml-* are dotfiles, excluded by default
include-hidden-files: true
path: |
.coverage-sentry-*
.junitxml-*
if-no-files-found: 'ignore'
retention-days: 1
upload-coverage-graphql:
name: Upload GraphQL coverage
needs: test-graphql
# Run even if some test jobs failed, to report partial coverage
if: ${{ !cancelled() }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
- name: Download coverage data
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
pattern: coverage-graphql-*
merge-multiple: true
- name: Combine coverage and generate XML
run: |
uv sync
uv run coverage combine .coverage-sentry-*
uv run coverage xml
- name: Parse and Upload Coverage
uses: getsentry/codecov-action@d90e69cdf071dfbb0430159125321dc09c424d4c # main
with:
token: ${{ secrets.GITHUB_TOKEN }}
files: coverage.xml
flags: graphql
junit-xml-pattern: .junitxml-*
base-branch: master
verbose: true
check_required_tests:
name: All GraphQL tests passed
needs: test-graphql
# Always run this, even if a dependent job failed
if: always()
runs-on: ubuntu-22.04
steps:
- name: Check for failures
if: needs.test-graphql.result != 'success'
run: |
echo "One of the dependent jobs has failed. You may need to re-run it." && exit 1