A GitHub action that reports about your code coverage in every pull request.
This action uses Jest to extract code coverage, and comments it on pull request. Inspired by Size-limit action. Features:
- Reporting code coverage on each pull request. π
- Rejecting pull request, if coverage is under threshold. β
- Comparing coverage with base branch. π
- Showing spoiler in the comment for all new covered files. π
- Showing spoiler in the comment for all files, in which coverage was reduced. π»
- Failed tests & uncovered line annotations π’
- Install and configure Jest.
- Create new action inside
.github/workflows
:
Minimal configuration
name: 'coverage'
on:
pull_request:
branches:
- master
- main
jobs:
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: ArtiomTr/jest-coverage-report-action@v2
- Pay attention to the action parameters. You can specify custom threshold or test script
- That's it!
By default, this action takes github.token
variable to publish reports on your PR. You can overwrite this property by specifying:
with:
github-token: ${{ secrets.SECRET_TOKEN }}
This action automatically suports jest's coverageThreshold
property.
Just add into your jest.config.js
file:
module.exports = {
coverageThreshold: {
global: {
lines: 80,
},
},
};
If you want to run this action in custom directory, specify working-directory
:
with:
working-directory: <dir>
This action automatically adds necessary flags to your test script. The default script is:
npx jest
So you don't need to specify additional flags - action will handle them automatically. So, after adding necessary flags, action will run this command:
npx jest --ci --json --coverage --testLocationInResults --outputFile=report.json
But you do not need to specify these flags manually. Also, you can use different package manager, yarn
for example:
with:
test-script: yarn jest
Or, if you would like to run a script from your package.json
:
with:
test-script: npm test
By default, this action will install your dependencies using npm
. If you are using yarn
or pnpm
, you can specify it in the package-manager
option:
with:
package-manager: yarn
or
with:
package-manager: pnpm
To bypass running unit tests, you can pass the filepath to the current report.json
with:
coverage-file: ./coverage/report.json
base-coverage-file: ./coverage/master/report.json
coverage-file
is the filepath to the JSON coverage report for the current pull request.base-coverage-file
is the filepath to the JSON coverage report from the branch your pull request is merging into.
For example, you can save every test run to an artifact and then download and reference them here.
You can opt-out coverage comparison features to speed-up action. To achieve this, firstly, manually collect coverage to report.json
file. Then, specify these options for the action:
with:
coverage-file: report.json
base-coverage-file: report.json
Note: this option affects only coverage for the "head" branch. For skipping steps of "base" branch, see
base-coverage-file
option.
By default, this action will install dependencies and run the tests for you, generating the coverage report. Alternatively, you can skip these steps using the skip-step
option.
with:
skip-step: all
Accepted values are:
none
(default) - all steps will be runinstall
- skip installing dependenciesall
- skip installing dependencies and running the test script
To change annotations, you have to set the annotations option as shown below:
with:
annotations: none
Accepted values are:
all
(default) - Will annotate sections of your code that failed tests or test did not covernone
- Turns off annotationscoverage
- Will annotate those sections of your code that test did not coverfailed-tests
- Will annotate those sections of your code that failed test
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
Jest Coverage Report action is made with <3 thanks to these wonderful people (emoji key β¨):
MIT Β© Artiom Tretjakovas