Determines the test coverage of a Python module using coverage.py.
Generates a badge for the determined coverage when triggered by a push event.
When triggered by a pull_request event, the determined coverage is added as a comment to the corresponding pull request.
Example badge generated using this action:
- The main workflow should be given an expressive name, such as:
name: Report test coverage
- The main workflow should be triggered by
pushandpull_requestevents. Forpushevents, make sure that the workflow is only triggered on the main branch, or whichever branch you want to be associated with the value reported by the generated badge:on: pull_request: push: branches: ['master']
- Create a Gist which will be used to store the values for the badge. To do that, simply create an empty Gist. You will need the ID of the Gist. If
https://gist.github.com/kostrykin/d152375a04f7ab9ee9b247de41245b24is the URL of your Gist, thend152375a04f7ab9ee9b247de41245b24is the ID. - Create a PAT with Gist permission, and add it as your
GIST_SECRETby going to your repository Settings > Secrets and variables > Actions > New repository secret. - Add the action to the workflow and replace
d152375a04f7ab9ee9b247de41245b24by your Gist ID:When embedded into a matrix strategy (e.g., for testing multiple Python versions), the reporting should be restricted to a single step. This can be achieved, for example, by adding:- uses: kostrykin/report-test-coverage-action@v1.1.0 with: gist-id: d152375a04f7ab9ee9b247de41245b24 gist-auth: ${{ secrets.GIST_SECRET }}
You can also specify areport: ${{ strategy.job-index == 0 }}
working-directoryas a relative path to the root of the repository (e.g.,./example) if your Python module and the correspondingtestsdirectory are not direct descendents of the repository root.
For a full example, see the workflow file .github/workflows/test.yml and the example/ directory.
To report the test coverage as comments in pull requests, a second workflow must be set up. This is because the main workflow runs in the context of the base branch of the pull request (which potentially is a fork repository that has no permissions to post comments into the pull request of the upstream repository). The post-comment.yml workflow should look as follows:
name: Post pull request comment
on:
workflow_run:
workflows: [Report test coverage] # Replace this by EXACT NAME of the main workflow!
types: [completed]
jobs:
post_pr_comment:
runs-on: ubuntu-latest
permissions:
pull-requests: write
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: kostrykin/post-gh-comment-from-artifact-action@v1.0.0
with:
github-auth: ${{ secrets.GITHUB_TOKEN }}List of further examples: