Report information about your CI builds to Code Climate.
For additional information, check out our docs on Configuring Test Coverage and Test Coverage Troubleshooting Tips.
Most CI systems allow configuration of commands to run as part of setup, before, and after a test build. Using Circle CI as an example:
machine:
environment:
CC_TEST_REPORTER_ID: ...
dependencies:
post:
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
- chmod +x ./cc-test-reporter
test:
pre:
- ./cc-test-reporter before-build
post:
- ./cc-test-reporter after-build --exit-code $EXIT_CODEWhere:
$EXIT_CODEshould be the exit code of your test suite process. Some CI system expose this as an environment variable; for others, you may need to manually capture $? to provide it to after-build later. Providing this will prevent sending test coverage results for failed tests.
To report coverage to your locally-hosted Code Climate: Enterprise instance,
export the CC_TEST_REPORTER_COVERAGE_ENDPOINT variable, or pass the
--coverage-endpoint option to after-build.
CC_TEST_REPORTER_COVERAGE_ENDPOINT=https://codeclimate.my-domain.com/api/v1/test_reportsIf you're using a self-signed certificate, export the SSL_CERT_FILE variable
indicating the location of the certificate file when using after-build or upload-coverage commands.
The test reporter is implemented as a composition of lower-level commands, which may themselves be useful. See the man-pages for details of these commands.
Code Climate supports parallel test setups using sub-commands provided by the test reporter. Specifically, the test reporter has sub-commands to:
- format partial results (
format-coverage) - sum partial results into a single result (
sum-coverage) and - upload the single result to Code Climate (
upload-coverage)
To make use of these commands, parallel test support requires:
- the ability to run commands after each batch of tests has completed (most CI systems support this)
- the ability to run commands after all tests have completed (most CI systems support this)
- uploading and downloading partial test coverage data to/from shared storage (using AWS S3, for example)
For example:
-
After each batch of tests:
./cc-test-reporter format-coverage --output "coverage/codeclimate.$N.json" aws s3 sync coverage/ "s3://my-bucket/coverage/$BUILD_NUMBER"
Where:
$Nshould be a unique identifier for that batch of tests$BUILD_NUMBERshould be the build number provided by your CI.
-
After all tests:
aws s3 sync "s3://my-bucket/coverage/$BUILD_NUMBER" coverage/ cc-test-reporter sum-coverage --output - --parts $PARTS coverage/codeclimate.*.json | \ cc-test-reporter upload-coverage --input -
Where:
$PARTSshould be the number of payloads to sum.
Coverage from multiple suites can be sent to Code Climate by aggregating each suite's results into one final report.
-
After each test suite, run:
./cc-test-reporter format-coverage --output coverage/codeclimate.$SUITE.jsonIf format-coverage is not capturing the ideal format, use
--input-typeflag. -
After all test suites, run:
./cc-test-reporter sum-coverage coverage/codeclimate.*.json ./cc-test-reporter upload-coverage
See the LICENSE.