codeclimate-action
A GitHub action that publishes your code coverage to Code Climate.
Warning
Please upgrade to v3.1.1 (or higher) immediately. v3.1.0 was recently broken inadverdently, and the only fix is to upgrade your action to v3.1.1 or higher. Please see #626 for more details.
Usage
This action requires that you set the CC_TEST_REPORTER_ID
environment variable. You can find it under Repo Settings in your Code Climate project.
Inputs
Input | Default | Description |
---|---|---|
coverageCommand |
The actual command that should be executed to run your tests and capture coverage. | |
workingDirectory |
Specify a custom working directory where the coverage command should be executed. | |
debug |
false |
Enable Code Coverage debug output when set to true . |
coverageLocations |
Locations to find code coverage as a multiline string. Each line should be of the form <location>:<type> .type can be any one of clover, cobertura, coverage.py, excoveralls, gcov, gocov, jacoco, lcov, lcov-json, simplecov, xccov . See examples below. |
|
prefix |
undefined |
See --prefix |
verifyDownload |
true |
Verifies the downloaded Code Climate reporter binary's checksum and GPG signature. See Verifying binaries |
Example
steps:
- name: Test & publish code coverage
uses: paambaati/[email protected]
env:
CC_TEST_REPORTER_ID: <code_climate_reporter_id>
with:
coverageCommand: npm run coverage
debug: true
Example with only upload
When you've already generated the coverage report in a previous step and wish to just upload the coverage data to Code Climate, you can leave out the coverageCommand
option.
steps:
- name: Test & publish code coverage
uses: paambaati/[email protected]
env:
CC_TEST_REPORTER_ID: <code_climate_reporter_id>
Example with wildcard (glob) pattern
This action supports basic glob patterns to search for files matching given patterns. It uses @actions/glob
to expand the glob patterns.
steps:
- name: Test & publish code coverage
uses: paambaati/[email protected]
env:
CC_TEST_REPORTER_ID: <code_climate_reporter_id>
with:
coverageCommand: yarn run coverage
coverageLocations: |
${{github.workspace}}/*.lcov:lcov
Example with Jacoco
steps:
- name: Test & publish code coverage
uses: paambaati/[email protected]
env:
# Set CC_TEST_REPORTER_ID as secret of your repo
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
JACOCO_SOURCE_PATH: "${{github.workspace}}/src/main/java"
with:
# The report file must be there, otherwise Code Climate won't find it
coverageCommand: mvn test
coverageLocations: ${{github.workspace}}/target/site/jacoco/jacoco.xml:jacoco
Example of multiple test coverages for monorepo with Jest
Let's say you have a monorepo with two folders βclient
and server
, both with their own coverage folders and a yarn coverage
script which runs Jest within both folders.
"scripts": {
"coverage": "yarn client coverage && yarn server coverage"
}
First be sure that paths in your coverage/lcov.info
are correct; they should be either absolute or relative to the root of the monorepo. Open lcov.info
and search for any path. For example β
SF:src/server.ts
If you find a relative path like this (happens for Jest 25+), it's incorrect as it is relative to the sub-package. This can be fixed by configuring Jest to set the root of your monorepo β
// server/jest.config.js
module.exports = {
...
coverageReporters: [['lcov', { projectRoot: '..' }]]
...
};
steps:
- name: Test & publish code coverage
uses: paambaati/[email protected]
env:
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
with:
coverageCommand: yarn run coverage
coverageLocations: |
${{github.workspace}}/client/coverage/lcov.info:lcov
${{github.workspace}}/server/coverage/lcov.info:lcov
Example projects