10
votes

Comment créer un badge avec couverture de test (jacoco) sur github (actions)

Dans le projet de printemps, j'utilise le plugin jacoco pour mesurer la couverture des tests.

Je vois le rapport html comme ci-dessous:

entrez la description de l'image ici

Maintenant, je voudrais ajouter un badge au projet github avec ce pourcentage, quelque chose comme ceci:

entrez la description de l'image ici

Une idée comment puis-je combiner jacoco avec des actions github?


1 commentaires

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!


3 Réponses :


1
votes

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


0 commentaires

8
votes

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>)

Voir un exemple de workflow

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 }}

Sources: intégration de Codecov à un projet GitHub


1 commentaires

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?



5
votes

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:

1) Poussez vers la même branche dont il a été extrait

- 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 .

2) Poussez vers les 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

MISE À JOUR

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 }}

MISE À JOUR 2

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


0 commentaires