Generating coverage badges and pushing them to the repository.
😺 This action is replaced by coverage-badges-action
This github action generates testing coverage badges using jest and pushes them to the repo at ./badges
. There is five badges generated:
You can use them on a readme like so:
![Branches](./badges/coverage-branches.svg)
![Functions](./badges/coverage-functions.svg)
![Lines](./badges/coverage-lines.svg)
![Statements](./badges/coverage-statements.svg)
![Jest coverage](./badges/coverage-jest%20coverage.svg)
You will need to add json-summary to coverage reporters in jest config:
module.exports = {
coverageReporters: ["json-summary"];
};
You also need to run jest before calling this action in your ci workflow. See usage
for an example.
If set to true
, badges won't be committed by the github action.
Default value: false*
Branches on which the badges should be generated, separated by commas. Optionally, you can set the value as *
to specify generation should always happen.
Default value: master,main
The branch on which generated badges should be pushed. If unset, the current branch (on which the action is ran against) will be used.
Jest coverage summary path (json-summary). Defining this may be useful if you need to run this action on a monorepo.
Default value: ./coverage/coverage-summary.json
Commit message of the commit with generated badges.
Default value: Updating coverage badges
Customizing the name of the user committing generated badges (optional).
Default value: <context.actor>
Customizing the email of the user committing generated badges (optional).
Default value: <context.actor>@users.noreply.github.com
Where badges should be written (optional).
Default value: ./badges
Let's first define an npm script to run jest in package.json, specifying the coverage option to generate a coverage report:
{
"scripts": {
"test-ci": "jest --ci --coverage"
}
}
Let's then define our workflow:
name: My ci things
on: [push]
jobs:
bump:
runs-on: ubuntu-latest
steps:
# Necessary to push the generated badges to the repo
- name: Check out repository code
uses: actions/checkout@v3
# Necessary to generate the coverage report.
# Make sure to add 'json-summary' to the coverageReporters in jest options
- name: Tests
run: yarn test-ci
[...]
- name: Generating coverage badges
uses: jpb06/jest-badges-action@latest
with:
branches: master,preprod,staging
The badges will be generated when the action runs on the master, preprod or staging branch.
In case you need to define a custom path for the coverage summary file, you can use the coverage-summary-path
input like so:
[...]
- name: Generating coverage badges
uses: jpb06/jest-badges-action@latest
with:
coverage-summary-path: ./my-module/coverage/coverage-summary.json
Your perpetual branches should be protected to avoid some people from force pushing on them for example. Sadly there is no way to push badges to a protected branch 😿.
A workaround is to push them to a custom branch. Here is an example using a badges
branch:
name: Generate badges on custom branch
on:
push:
branches:
- master
jobs:
generate-badges-on-custom-branch:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: pnpm/action-setup@v2.2.4
with:
version: latest
- name: Setup node
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
- name: Installing dependencies
run: pnpm install --frozen-lockfile
- name: Delete remote badges branch
run: git push origin --delete badges
- name: Create badges branch
run: git checkout -b badges
- name: Tests
run: pnpm test-ci
- name: Generating coverage badges
uses: ./
with:
branches: '*'
target-branch: badges
- name: Push badges branch
run: git push origin badges