Remarque
GitHub Code Quality est actuellement dans préversion publique et peut être modifié. Pendant préversion publique, Code Quality ne sera pas facturé, bien que les analyses Code Quality consomment GitHub Actions minutes.
Dans les procédures suivantes, vous allez générer un rapport de couverture XML Cobertura à partir de votre suite de tests, le téléverser vers GitHub, puis consulter les résultats de couverture sur vos pull requests.
Prerequisites
- Code Quality est activé pour votre référentiel.
- Votre référentiel a une suite de tests qui s’exécute dans GitHub Actions.
- Votre infrastructure de test peut produire un rapport de couverture au format XML Cobertura .
Étape 1 : Générer un rapport de couverture XML Cobertura
Configurez votre infrastructure de test pour générer un rapport de couverture au format XML Cobertura. La couverture du code fonctionne avec n’importe quel langage de programmation qui peut produire ce format.
- Identifiez l’outil de couverture de votre langue dans le tableau ci-dessous.
- Ajoutez la commande ou la configuration appropriée à votre flux de travail CI afin qu’un fichier XML Cobertura soit généré chaque fois que vos tests s’exécutent.
| Langage | Framework / Outil | Comment générer le XML Cobertura |
|---|---|---|
| Python | pytest + pytest-cov | pytest --cov=. --cov-report=xml |
| Java | JaCoCo | Utiliser le cover2cover.py script ou le plug-in JaCoCo-to-Cobertura Gradle/Maven |
| JavaScript/TypeScript | Istanbul/ nyc | nyc report --reporter=cobertura |
| Ruby | SimpleCov | Ajouter SimpleCov::Formatter::CoberturaFormatter |
| Go | go test + gocover-cobertura | go test -coverprofile=cover.out && gocover-cobertura < cover.out > coverage.xml |
Conseil
Si votre framework n’est pas répertorié ci-dessus, consultez sa documentation pour vérifier la prise en charge du format de sortie Cobertura. De nombreux outils le prennent en charge directement ou peuvent être convertis en Xml Cobertura à partir d’autres formats.
Étape 2 : Charger le rapport de couverture
Une fois que vos tests ont généré un rapport XML Cobertura, téléversez-le sur GitHub afin que les résultats de couverture s’affichent sur les demandes de fusion.
-
Ouvrez le fichier de flux de travail CI de votre référentiel (par exemple).
.github/workflows/ci.yml -
Ajoutez l’étape suivante après l’étape qui exécute vos tests et génère le rapport de couverture :
YAML - name: Upload coverage report if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository uses: actions/upload-code-coverage@v1 with: file: COVERAGE-FILE-PATH.xml language: LANGUAGE label: LABEL- name: Upload coverage report if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository uses: actions/upload-code-coverage@v1 with: file: COVERAGE-FILE-PATH.xml language: LANGUAGE label: LABEL -
Remplacez les valeurs suivantes :
COVERAGE-FILE-PATH.xml: chemin d’accès à votre rapport XML Cobertura (par exemple,coverage.xmloutarget/site/jacoco/cobertura.xml).LANGUAGE: langage principal du code couvert (par exemple,Python,Java,JavaScript).LABEL: étiquette facultative pour identifier ce rapport de couverture (par exemple,code-coverage/pytest).
-
Effectuez un commit et poussez la modification du flux de travail.
Exemple de flux de travail complet
Cet exemple exécute Python tests avec pytest-cov et charge le rapport de couverture :
# This workflow runs your test suite, generates a Cobertura XML coverage report, and uploads it to GitHub. Once this workflow is committed, coverage results appear automatically on every pull request.
name: Code Coverage
# Run on pushes to the default branch (to establish the baseline) and on pull requests (to compare against it). Code Quality compares PR branch coverage to the default branch, so both triggers are needed.
on:
push:
branches: [main]
pull_request:
branches: [main]
# The `code-quality: write` permission is required to upload coverage data. No other elevated permissions are needed.
permissions:
contents: read
code-quality: write
jobs:
test:
runs-on: ubuntu-latest
steps:
# Check out the PR head commit (not the merge commit) so coverage line numbers map correctly to the diff.
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
# Replace this step with whatever language setup your project uses (Node.js, Java, Go, etc.). The upload action works with any language that produces a Cobertura XML report.
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov
# Adapt this step for your test framework. The key requirement is producing a Cobertura XML file. For other languages, see the framework table earlier in this article.
- name: Run tests with coverage
run: pytest --cov=. --cov-report=xml
# This step replaces any third-party coverage upload (Codecov, Coveralls, etc.). After this runs, the `github-code-quality[bot]` bot posts a coverage summary directly on the pull request.
- name: Upload coverage report
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-code-coverage@v1
with:
file: coverage.xml
language: Python
label: code-coverage/pytest
name: Code CoverageThis workflow runs your test suite, generates a Cobertura XML coverage report, and uploads it to GitHub. Once this workflow is committed, coverage results appear automatically on every pull request.
on:
push:
branches: [main]
pull_request:
branches: [main]Run on pushes to the default branch (to establish the baseline) and on pull requests (to compare against it). Code Quality compares PR branch coverage to the default branch, so both triggers are needed.
permissions:
contents: read
code-quality: write
jobs:
test:
runs-on: ubuntu-latest
steps:The code-quality: write permission is required to upload coverage data. No other elevated permissions are needed.
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}Check out the PR head commit (not the merge commit) so coverage line numbers map correctly to the diff.
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-covReplace this step with whatever language setup your project uses (Node.js, Java, Go, etc.). The upload action works with any language that produces a Cobertura XML report.
- name: Run tests with coverage
run: pytest --cov=. --cov-report=xmlAdapt this step for your test framework. The key requirement is producing a Cobertura XML file. For other languages, see the framework table earlier in this article.
- name: Upload coverage report
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-code-coverage@v1
with:
file: coverage.xml
language: Python
label: code-coverage/pytestThis step replaces any third-party coverage upload (Codecov, Coveralls, etc.). After this runs, the github-code-quality[bot] bot posts a coverage summary directly on the pull request.
# This workflow runs your test suite, generates a Cobertura XML coverage report, and uploads it to GitHub. Once this workflow is committed, coverage results appear automatically on every pull request.
name: Code Coverage
# Run on pushes to the default branch (to establish the baseline) and on pull requests (to compare against it). Code Quality compares PR branch coverage to the default branch, so both triggers are needed.
on:
push:
branches: [main]
pull_request:
branches: [main]
# The `code-quality: write` permission is required to upload coverage data. No other elevated permissions are needed.
permissions:
contents: read
code-quality: write
jobs:
test:
runs-on: ubuntu-latest
steps:
# Check out the PR head commit (not the merge commit) so coverage line numbers map correctly to the diff.
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
# Replace this step with whatever language setup your project uses (Node.js, Java, Go, etc.). The upload action works with any language that produces a Cobertura XML report.
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov
# Adapt this step for your test framework. The key requirement is producing a Cobertura XML file. For other languages, see the framework table earlier in this article.
- name: Run tests with coverage
run: pytest --cov=. --cov-report=xml
# This step replaces any third-party coverage upload (Codecov, Coveralls, etc.). After this runs, the `github-code-quality[bot]` bot posts a coverage summary directly on the pull request.
- name: Upload coverage report
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-code-coverage@v1
with:
file: coverage.xml
language: Python
label: code-coverage/pytest
Étape 3 : Afficher les résultats de couverture sur les pull requests
- Ouvrez une pull request (ou ajoutez des commits à une pull request existante) qui déclenche le workflow que vous avez configuré.
- Une fois le workflow terminé, recherchez un commentaire de
github-code-quality[bot]sur la pull request. Le commentaire comprend :- Le pourcentage de couverture agrégé de la branche de la pull request par rapport à la branche par défaut.
- Répartition par fichier montrant quels fichiers ont gagné ou perdu la couverture.
Étapes suivantes
- Interprétez les résultats : Comprenez les indicateurs de couverture et le détail fichier par fichier dans vos pull requests. Consultez « Interprétation des résultats de qualité du code pour votre référentiel ».