如何在 github 上创建具有测试覆盖率 (jacoco) 的徽章(操作)

tos*_*tao 12 github gradle badge jacoco github-actions

在 spring 项目中,我使用 jacoco 插件来测量测试覆盖率。

我看到如下 html 报告:

在此处输入图片说明

现在我想用这个百分比向 github 项目添加一个徽章,如下所示:

在此处输入图片说明

知道如何将 jacoco 与 github 动作结合起来吗?

sma*_*c89 9

您可以使用 codecov see,因为它们支持每个 CI提供程序。

您将需要两件事:

创建帐户并有权访问令牌后,将令牌作为机密存储在 github 操作中。叫它CODECOV_TOKEN

在您的工作流程中,创建一个看起来像这样的步骤并根据需要进行配置

- name: Upload coverage to Codecov  
  uses: codecov/codecov-action@v1
    with:
      token: ${{ secrets.CODECOV_TOKEN }}
Run Code Online (Sandbox Code Playgroud)

查看示例工作流程

在您的自述文件中,使用以下格式创建状态标志:

[![codecov](https://codecov.io/gh/<your-name>/<project-name>/branch/master/graph/badge.svg)](https://codecov.io/gh/<your-name>/<project-name>)
Run Code Online (Sandbox Code Playgroud)

来源:将 Codecov 与 GitHub 项目集成


emi*_*emi 8

您可以使用 GitHub 操作使用 GitHub 工作流生成徽章(无需其他服务器)。您可以编写自己的工作/步骤或使用我刚刚发布的操作:https : //github.com/marketplace/actions/badge-action

首先,您需要解析覆盖结果文件并提取值(81在您的示例中)。在这里,我用作parse-coverage-report示例命令(您需要自己创建它)。最后,将此值保存为 GitHub 工作流输出:

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-coverage-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
Run Code Online (Sandbox Code Playgroud)

这会将徽章保存为 file badge.svg。现在,您决定是将此徽章上传到同一个存储库、S3 或任何您喜欢的存储库。作为一份覆盖率报告,我想您会喜欢将其上传到相同的存储库 1) 从中提取的同一分支或 2) 专用分支badges

1)推送到它从中提取的同一分支

    - name: Extract branch name
      shell: bash
      run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
      id: extract_branch
    - name: Create badges dir if necessary
      run: mkdir -p .github/badges
    - 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: .github/badges/badge.svg
    - name: Commit badge
      run: |
        git config --local user.email "action@github.com"
        git config --local user.name "GitHub Action"
        git add .github/badges/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 }}
Run Code Online (Sandbox Code Playgroud)

extract_branch步骤取自/sf/answers/4062468371/

2) 推送到专用分支 badges

首先,创建并推送专用分支badges(从StackOverflow 中提取):

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
Run Code Online (Sandbox Code Playgroud)
    - 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
        path: badges
    - name: Create badges dir if necessary
      env:
        BRANCH: ${{ steps.extract_branch.outputs.branch }}
      run: mkdir -p badges/${BRANCH}
    - 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: badges/${{ steps.extract_branch.outputs.branch }}/badge.svg
    - name: Commit badge
      env:
        BRANCH: ${{ steps.extract_branch.outputs.branch }}
      run: |
        pushd badges
            git config --local user.email "action@github.com"
            git config --local user.name "GitHub Action"
            git add "${BRANCH}/badge.svg"
            git commit -m "Add/Update badge"
        popd
    - name: Push badge commit
      uses: ad-m/github-push-action@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        branch: badges
        directory: badges
Run Code Online (Sandbox Code Playgroud)

更新

如果您的覆盖率报告是典型的三叶草coverage.xml文件,则可以使用此操作来解析并输出覆盖率值。例如:

- 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' }}
Run Code Online (Sandbox Code Playgroud)

更新 2

你可以让你的徽章根据覆盖值改变它的背景颜色,甚至使用渐变:

# 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' }}
Run Code Online (Sandbox Code Playgroud)

更新 3

更新了 2 个工作流程:

  • 同一分支:将徽章保存到 .github/badges/
  • 专用分支:使用工作流中的子目录来管理徽章,因此工作流环境仍可用于后续步骤(例如,保存一些缓存)。

更新 4:工作示例

您可以在一些存储库工作流程中看到工作示例(通过编辑答案或评论来添加您的):

  • 更新 2 个选项,提供更好的路径选择(更新 3)。 (2认同)
  • @JRichardsz Jacoco 可以将覆盖率报告输出到 XML 文件中,该文件稍后可供其他应用程序使用:https://www.eclemma.org/jacoco/trunk/doc/report-mojo.html (2认同)
  • @JRichardsz 另外,问题是关于如何使用 GitHub Actions 生成徽章,我认为答案中广泛涵盖了这一点。 (2认同)
  • @tribbloid 当然!查看 **更新 4:工作示例** 部​​分:https://github.com/emibcn/covid 和 https://github.com/emibcn/Rac1.js (2认同)