Dans le projet de printemps, j'utilise le plugin jacoco pour mesurer la couverture des tests.
Je vois le rapport html comme ci-dessous:
Maintenant, je voudrais ajouter un badge au projet github avec ce pourcentage, quelque chose comme ceci:
Une idée comment puis-je combiner jacoco avec des actions github?
3 Réponses :
Vous devrez publier vos statistiques de couverture sur un service tel que Combinaisons dans le cadre de votre intégration continue. Les serveurs CI tels que CircleCI et TravisCI ont intégré la prise en charge de Github et des combinaisons
Votre projet est-il open source? Les combinaisons, Travis et CircleCI sont tous gratuits pour l'open source. Une fois que vous avez github déclenchant CI et publier sur des combinaisons, vous pouvez intégrer une balise d'image dans votre readme.md
Vous pouvez utiliser codecov car ils prennent en charge tous les fournisseurs CI .
Vous aurez besoin de deux choses:
Après avoir créé votre compte et avoir accès à un jeton, stockez le jeton en tant que secret dans les actions github. Appelez-le CODECOV_TOKEN
.
Dans votre flux de travail, créez une étape qui ressemble à ceci et configurez selon vos besoins:
[![codecov](https://codecov.io/gh/<your-name>/<project-name>/branch/master/graph/badge.svg)](https://codecov.io/gh/<your-name>/<project-name>)
Dans votre README, créez le badge de statut au format:
- name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }}
Maintenant, avec GitHub Actions semble encore plus facile mais je suis coincé sur une erreur en me plaignant d'un fichier lcov.info qui manque ... Comment puis-je le générer?
Vous pouvez utiliser les actions GitHub pour générer un badge à l'aide de GitHub Workflow (pas besoin d'autres serveurs). Vous pouvez écrire vos propres tâches / étapes ou utiliser l'action que je viens de publier: https://github.com/marketplace/actions/badge-action .
Tout d'abord, vous devez analyser le fichier de résultats de couverture et extraire la valeur ( 81
dans votre exemple). Ici, j'ai utilisé parse-coverage-report
comme exemple de commande (vous devrez le créer vous-même). Enfin, enregistrez cette valeur en tant que sortie de flux de travail GitHub:
# Use the output from the `coverage` step - name: Generate the badge SVG image uses: emibcn/badge-action@v1 id: badge with: label: 'Coverage' status: ${{ steps.coverage.outputs.coverage }} path: ./badges/test-coverage.svg color: ${{ steps.coverage.outputs.coverage > 90 && 'green' || steps.coverage.outputs.coverage > 80 && 'yellow,green' || steps.coverage.outputs.coverage > 70 && 'yellow' || steps.coverage.outputs.coverage > 60 && 'orange,yellow' || steps.coverage.outputs.coverage > 50 && 'orange' || steps.coverage.outputs.coverage > 40 && 'red,orange' || steps.coverage.outputs.coverage > 30 && 'red,red,orange' || steps.coverage.outputs.coverage > 20 && 'red,red,red,orange' || 'red' }}
Cela enregistre le badge sous le nom de fichier badge.svg
. Maintenant, vous décidez de télécharger ce badge dans le même référentiel, sur un S3 ou ce que vous préférez. Étant donné qu'il s'agit d'un rapport de couverture, je suppose que vous aimerez le télécharger dans le même repo 1) la même branche dont il a été extrait ou 2) les badges
branche dédiés:
- name: Check test coverage uses: johanvanhelden/gha-clover-test-coverage-check@v1 id: coverage with: percentage: "50" filename: "coverage.xml" # Use the output from the `coverage` step - name: Generate the badge SVG image uses: emibcn/badge-action@v1 id: badge with: label: 'Coverage' status: ${{ steps.coverage.outputs.coverage }} path: ./badges/test-coverage.svg color: ${{ steps.coverage.outputs.coveragelines > 75 && 'green' || 'red' }}
L'étape extract_branch
de https://stackoverflow.com/a/58035262/2928168 .
badges
succursale dédiés Tout d'abord, créez et transférez les badges
branche dédiés avec (extrait de StackOverflow ):
- name: Extract branch name shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch - uses: actions/checkout@v1 with: ref: 'badges' - name: Commit badge env: BRANCH: ${{ steps.extract_branch.outputs.branch }} run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" mkdir -p "${BRANCH}" mv badge.svg "${BRANCH}" git add "${BRANCH}/badge.svg" git commit -m "Add/Update badge" - name: Push badge commit uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: badges
git checkout master # Use a fresh start git checkout --orphan badges # Unstage all the files in your working tree. git rm --cached $(git ls-files) # Create a dedicated README file, so it's clear what's going on here echo '# Badges branch' > README.md git add README.md git commit -m 'Add dedicated README' git push origin badges
Si votre rapport de couverture est un fichier de coverage.xml
trèfle coverage.xml
, vous pouvez utiliser cette action pour analyser et générer la valeur de couverture. Par exemple:
- name: Extract branch name shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch - uses: actions/checkout@v1 with: ref: ${{ steps.extract_branch.outputs.branch }} - name: Commit badge run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add badge.svg git commit -m "Add/Update badge" - name: Push badge commit uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: ${{ steps.extract_branch.outputs.branch }}
Vous pouvez faire en sorte que votre badge change sa couleur d'arrière-plan en fonction de la valeur de couverture, même en utilisant des dégradés:
on: [push] jobs: coverage: runs-on: ubuntu-latest name: Generate test coverage badge steps: - name: Generate a coverage value id: coverage # Generates a GitHub Workflow output named `lines` run: | COVERAGE="$( parse-covergae-report )" echo "##[set-output name=lines;]${COVERAGE}%" # Use the output from the `coverage` step - name: Generate the badge SVG image uses: emibcn/badge-action@v1 with: label: 'Test coverage' status: ${{ steps.coverage.outputs.lines }} color: 'blue,555,daf' path: badge.svg
Je pense que si vous voulez utiliser JaCoCo mais que vous ne parvenez pas à trouver une action Github capable d'analyser et d'exposer la valeur que vous souhaitez, cela pourrait être un bon début pour voir ce que fait
codecov/codecov-action@v1
et le répliquer pour vous-même puis utilisez-le dans votre projet. Je verrai si je peux le faire mais je ne peux malheureusement pas le promettre!