/codeclimate-action

GitHub Action to send your code coverage to CodeClimate

Primary LanguageTypeScriptMIT LicenseMIT

codeclimate-action

Build Status MIT License

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 yarn coverage The actual command that should be executed to run your tests and capture coverage.
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>. See examples below.
prefix undefined See --prefix

Example

steps:
  - name: Test & publish code coverage
    uses: paambaati/codeclimate-action@v2.6.0
    env:
      CC_TEST_REPORTER_ID: <code_climate_reporter_id>
    with:
      coverageCommand: npm run coverage
      debug: true

Example with multiple coverage locations

steps:
  - name: Test & publish code coverage
    uses: paambaati/codeclimate-action@v2.6.0
    env:
      CC_TEST_REPORTER_ID: <code_climate_reporter_id>
    with:
      coverageCommand: yarn coverage
      coverageLocations: |
        ${{github.workspace}}/some-directory/coverage/lcov.info:lcov
        ${{github.workspace}}/some-other/coverage/lcov.info:lcov

Example with Jacoco

steps:
  - name: Test & publish code coverage
    uses: paambaati/codeclimate-action@v2.6.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@v2.6.0
    env:
      CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
    with:
      coverageCommand: yarn coverage
      coverageLocations: |
        ${{github.workspace}}/client/coverage/lcov.info:lcov
        ${{github.workspace}}/server/coverage/lcov.info:lcov

Example projects

  1. paambaati/websight

  2. MartinNuc/coverage-ga-test