tos*_*tao 12 github gradle badge jacoco github-actions
在 spring 项目中,我使用 jacoco 插件来测量测试覆盖率。
我看到如下 html 报告:
现在我想用这个百分比向 github 项目添加一个徽章,如下所示:
知道如何将 jacoco 与 github 动作结合起来吗?
您可以使用 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)
在您的自述文件中,使用以下格式创建状态标志:
[](https://codecov.io/gh/<your-name>/<project-name>)
Run Code Online (Sandbox Code Playgroud)
您可以使用 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:
- 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/。
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)
你可以让你的徽章根据覆盖值改变它的背景颜色,甚至使用渐变:
# 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)
更新了 2 个工作流程:
.github/badges/您可以在一些存储库工作流程中看到工作示例(通过编辑答案或评论来添加您的):
| 归档时间: |
|
| 查看次数: |
5564 次 |
| 最近记录: |