Awesome
codeclimate-action
A GitHub action that publishes your code coverage to Code Climate.
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.<br>Each line should be of the form <location>:<type> .<br>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 |
verifyEnvironment | true | Verifies the current runtime environment (operating system and CPU architecture) is supported by the Code Climate reporter. See list of supported platforms |
batchSize | Batch size for source files (cc-test-reporter upload-coverage uses 500 by default) |
Note If you are a Ruby developer using SimpleCov, other users have recommended installing an additional gem –
gem "simplecov_json_formatter"
– this gem fixesjson
error from the defaultcoverage/.resultset.json
output from SimpleCov.
Example
steps:
- name: Test & publish code coverage
uses: paambaati/codeclimate-action@v9.0.0
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/codeclimate-action@v9.0.0
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/codeclimate-action@v9.0.0
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/codeclimate-action@v9.0.0
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/codeclimate-action@v9.0.0
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