在spring项目中,我使用jacoco插件来测量测试覆盖率。我看到HTML报告如下:
现在我想用这个百分比为github项目添加一个徽章,如下所示:
我如何将jacoco与github操作结合起来?
taor4pac1#
您可以使用codecov,因为它们支持每个CI提供程序。你需要两样东西:
创建帐户并访问令牌后,将令牌存储为github action中的secret。称之为CODECOV_TOKEN。在您的工作流中,创建一个类似于以下内容的步骤,并根据需要进行配置:
CODECOV_TOKEN
- name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }}
在您的自述文件中,使用以下格式创建状态标记:
[![codecov](https://codecov.io/gh/<your-name>/<project-name>/branch/master/graph/badge.svg)](https://codecov.io/gh/<your-name>/<project-name>)
来源:Integrating Codecov with a GitHub project
ffdz8vbo2#
作为持续集成构建的一部分,您需要将覆盖统计数据发布到诸如Coveralls之类的服务。CircleCI和TravisCI等CI服务器内置了对Github和Coveralls的支持你的项目是开源的吗?Coveralls、Travis和CircleCI都是免费的开源软件。一旦你在github上触发了CI并发布到工作服上,你就可以在你的www.example中嵌入一个图像标签 www.example.com
m1m5dgzv3#
您可以使用GitHub操作来使用GitHub Workflow生成徽章(不需要其他服务器)。您可以编写自己的作业/步骤或使用我刚刚发布的操作:https://github.com/marketplace/actions/badge-action。首先,您需要解析coverage结果文件并提取值(在示例中为81)。这里,我使用parse-coverage-report作为示例命令(您需要自己创建它)。最后,将此值保存为GitHub工作流输出:
81
parse-coverage-report
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
这将徽章另存为文件badge.svg。现在,您决定是否将此徽章上传到同一个存储库,S3或任何您喜欢的存储库。由于这是一个覆盖率报告,我想你会喜欢上传到same的repo 1)它被提取的相同分支或2)专用分支badges:
badge.svg
badges
- 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 }}
extract_branch步骤取自https://stackoverflow.com/a/58035262/2928168。
extract_branch
首先,创建并推送专用分支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
- 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
如果你的覆盖率报告是一个典型的三叶草coverage.xml文件,你可以使用this action来解析和输出覆盖率值。例如:
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' }}
您可以根据覆盖率值更改徽章的背景颜色,甚至可以使用渐变:
# 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' }}
更新了2个工作流:
.github/badges/
您可以在一些存储库工作流中看到工作示例(通过编辑答案或评论来添加您的答案):
3条答案
按热度按时间taor4pac1#
您可以使用codecov,因为它们支持每个CI提供程序。
你需要两样东西:
创建帐户并访问令牌后,将令牌存储为github action中的secret。称之为
CODECOV_TOKEN
。在您的工作流中,创建一个类似于以下内容的步骤,并根据需要进行配置:
在您的自述文件中,使用以下格式创建状态标记:
来源:Integrating Codecov with a GitHub project
ffdz8vbo2#
作为持续集成构建的一部分,您需要将覆盖统计数据发布到诸如Coveralls之类的服务。CircleCI和TravisCI等CI服务器内置了对Github和Coveralls的支持
你的项目是开源的吗?Coveralls、Travis和CircleCI都是免费的开源软件。一旦你在github上触发了CI并发布到工作服上,你就可以在你的www.example中嵌入一个图像标签 www.example.com
m1m5dgzv3#
您可以使用GitHub操作来使用GitHub Workflow生成徽章(不需要其他服务器)。您可以编写自己的作业/步骤或使用我刚刚发布的操作:https://github.com/marketplace/actions/badge-action。
首先,您需要解析coverage结果文件并提取值(在示例中为
81
)。这里,我使用parse-coverage-report
作为示例命令(您需要自己创建它)。最后,将此值保存为GitHub工作流输出:这将徽章另存为文件
badge.svg
。现在,您决定是否将此徽章上传到同一个存储库,S3或任何您喜欢的存储库。由于这是一个覆盖率报告,我想你会喜欢上传到same的repo 1)它被提取的相同分支或2)专用分支badges
:1)推送到解压缩分支
extract_branch
步骤取自https://stackoverflow.com/a/58035262/2928168。2)推流到专用分支
badges
首先,创建并推送专用分支
badges
(从StackOverflow中提取):更新
如果你的覆盖率报告是一个典型的三叶草
coverage.xml
文件,你可以使用this action来解析和输出覆盖率值。例如:更新2
您可以根据覆盖率值更改徽章的背景颜色,甚至可以使用渐变:
更新3
更新了2个工作流:
.github/badges/
中更新4:工作示例
您可以在一些存储库工作流中看到工作示例(通过编辑答案或评论来添加您的答案):