GitHub Action to Publish JaCoCo Format Code Coverage XML and attach it to the Workflow Run as a Check Run. You can even set threshold coverage percentage and fail the action.
- The scope of this project is limited to Report and Quality Gate. Any ideas are welcome.
- I wrote this action as opensource during my vacation time.
- This actions is used by hundreds of repos in my organization and many other prviate org repos.
This Action allows you to specify your JaCoCo Code Coverage XML Path, and then generate a markdown report from the test results and then it attaches it to the Workflow Run as a Check Run. You can even set threshold coverage percentage and fail the action.
Here's a quick example of how to use this action in your own GitHub Workflows.
jobs:
test:
runs-on: ubuntu-latest
steps:
# generates coverage-report.md and publishes as checkrun
- name: JaCoCo Code Coverage Report
id: jacoco_reporter
uses: PavanMudigonda/jacoco-reporter@v5.0
with:
coverage_results_path: jacoco-report/test.xml
coverage_report_name: Coverage
coverage_report_title: JaCoCo
github_token: ${{ secrets.GITHUB_TOKEN }}
skip_check_run: false
minimum_coverage: 80
fail_below_threshold: false
publish_only_summary: false
# Publish Coverage Job Summary # Optional
- name: Add Jacocoo report to workflow run summary
run: |
echo "| Outcome | Value |" >> $GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
echo "| Code Coverage % | ${{ steps.jacoco_reporter.outputs.coverage_percentage }} |" >> $GITHUB_STEP_SUMMARY
echo "| :heavy_check_mark: Number of Lines Covered | ${{ steps.jacoco_reporter.outputs.covered_lines }} |" >> $GITHUB_STEP_SUMMARY
echo "| :x: Number of Lines Missed | ${{ steps.jacoco_reporter.outputs.missed_lines }} |" >> $GITHUB_STEP_SUMMARY
echo "| Total Number of Lines | ${{ steps.jacoco_reporter.outputs.total_lines }} |" >> $GITHUB_STEP_SUMMARY
# uploads the coverage-report.md artifact # Optional
- name: Upload Code Coverage Artifacts
uses: actions/upload-artifact@v4
with:
name: code-coverage-report-markdown
path: */coverage-results.md
retention-days: 1
This Action defines the following formal inputs.
Name | Req | Description |
---|---|---|
coverage_results_path |
true | Path to the JaCoCo Code Coverage XML format file which will be used to generate a report. |
coverage_report_name |
false | The name of the code coverage report object that will be attached to the Workflow Run. Defaults to the name COVERAGE_RESULTS_<datetime> where <datetime> is in the form yyyyMMdd_hhmmss . |
coverage_report_title |
false | The title of the code coverage report that will be embedded in the report itself, which defaults to the same as the coverage_report_name input. |
github_token |
false | Input the GITHUB TOKEN Or Personal Access Token you would like to use. Defaults to the auto generated token. Recommended to use GitHub auto generated token ${{ secrets.GITHUB_TOKEN }}. |
minimum_coverage |
false | Input the minimum code coverage recommended. |
fail_below_threshold |
false | Set True to fail the action and False to let it pass. |
skip_check_run |
false | If true, will skip attaching the Coverage Result report to the Workflow Run using a Check Run. Useful if your report has 65k characters that is not accepted by Github REST and GraphQL APIs |
publish_only_summary |
false | If true, will publish only a summary table of the Coverage Result report to the Workflow Run using a Check Run. Useful if your full coverage report has 65k characters that is not accepted by Github REST and GraphQL APIs |
This Action defines the following formal outputs.
Name | Description |
---|---|
coverage_percentage |
Coverage Percentage. Rounded to two decimals. |
coveragePercentage |
Coverage Percentage. Rounded to two decimals. |
coveragePercentageString |
Coverage Percentage. Rounded to two decimals with % symbol attached. |
covered_lines |
Total Covered Lines |
missed_lines |
Total missed Lines |
total_lines |
Total Code Lines |
- When action is run in a pull request by dependabot or a forked repo (e.g. when bumping up a version in a pull request) this step will fail with the default github token ${{ secrets.GITHUB_TOKEN }} due to a lack of permissions. Resolution: on consumer side of workflow please add below
Possible fix
The workflow needs check: write
permissions.
permissions:
checks: write
- Or Alternatively use Personal Authorization Token from GitHub.
https://github.com/PavanMudigonda/jacoco-playground
https://github.com/PavanMudigonda/jacoco-playground/blob/main/.github/workflows/coverage.yml
https://github.com/PavanMudigonda/java-maven-playground/
https://github.com/PavanMudigonda/java-maven-playground/blob/master/.github/workflows/ci.yml
This Action is implemented as a PowerShell GitHub Action.
https://github.com/PavanMudigonda/lines-of-code-reporter/