/coverage-reporter

Self-contained, universal coverage uploader binary. Under development.

Primary LanguageCrystalMIT LicenseMIT

⠀⠀⠀⠀⠀⠀⣿
⠀⠀⠀⠀⠀⣼⣿⣧⠀⠀⠀⠀⠀⠀⠀ ⣠⣶⣾⣿⡇⢀⣴⣾⣿⣷⣆ ⣿⣿⠀⣰⣿⡟⢸⣿⣿⣿⡇ ⣿⣿⣿⣷⣦⠀⠀⢠⣿⣿⣿⠀⠀⣿⣿⠁⠀⣼⣿⡇⠀⢀⣴⣾⣿⡷
⠶⣶⣶⣶⣾⣿⣿⣿⣷⣶⣶⣶⠶  ⣸⣿⡟ ⠀⢠⣿⣿⠃⠈⣿⣿⠀⣿⣿⢠⣿⡿⠀⣿⣿⣧⣤⠀⢸⣿⡇⣠⣿⡿⠀⢠⣿⡟⣿⣿⠀⢸⣿⡿⠀⠀⣿⣿⠃⠀⢸⣿⣧⣄
⠀⠀⠙⢻⣿⣿⣿⣿⣿⡟⠋⠁⠀⠀ ⣿⣿⡇⠀ ⢸⣿⣿⠀⣸⣿⡟⠀⣿⣿⣾⡿⠁ ⣿⣿⠛⠛⠀⣿⣿⢿⣿⣏⠀⢀⣿⣿⣁⣿⣿⠀⣾⣿⡇⠀⢸⣿⡿⠀⠀⡀⠙⣿⣿⡆
⠀⠀⢠⣿⣿⣿⠿⣿⣿⣿⡄⠀⠀⠀ ⠙⢿⣿⣿⠇⠈⠿⣿⣿⡿⠋⠀⠀⢿⣿⡿⠁⠀⢸⣿⣿⣿⡇⢸⣿⣿⠀⣿⣿⣄⣾⣿⠛⠛⣿⣿⢠⣿⣿⣿ ⣼⣿⣿⣿ ⣿⣿⡿⠋⠀
⠀⢀⣾⠟⠋⠀⠀⠀⠙⠻⣷⡀⠀⠀

Universal Coverage Reporter GitHub Action Coverage Status

Auto-detects your coverage artifact files and CI environment to post to Coveralls.io.

Install

Linux

# You can omit '-C /usr/local/bin' argument to keep it in current directory
curl -L https://coveralls.io/coveralls-linux.tar.gz | tar -xz -C /usr/local/bin

MacOS

brew tap coverallsapp/coveralls
brew install coveralls

Windows

Bash:

curl -L https://github.com/coverallsapp/coverage-reporter/releases/latest/download/coveralls-windows.exe -o coveralls.exe

PowerShell:

Invoke-WebRequest -Uri "https://github.com/coverallsapp/coverage-reporter/releases/latest/download/coveralls-windows.exe" -OutFile "coveralls.exe"

Usage

See also environment variables list and YAML config that control the utility behavior.

Examples

# Automatic lookup for supported reports and sending them to https://coveralls.io
coveralls

# Provide explicit repo token
coveralls --repo-token=rg8ZznwNq05g3HDfknodmueeRciuiiPDE

# Use concrete report file
coveralls --file coverage/lcov.info

# Use parallel reports
coveralls --file project1/coverage/lcov.info --parallel
coveralls --file project2/coverage/lcov.info --parallel
# ...
coveralls --done

# Provide a job flag and use carry-forwarding
coveralls --job-flag "unit-tests" --parallel
coveralls --job-flag "integration-tests" --parallel
coveralls --done --carryforward "unit-tests,integration-tests"

# Testing options: no real reporting, print payload
coveralls --debug --dry-run
For more options see coveralls -h/--help
$ coveralls -h
Coveralls Coverage Reporter v0.3.3
Usage: coveralls [options]
    -rTOKEN, --repo-token=TOKEN      Sets coveralls repo token, overrides settings in yaml or environment variable
    -cPATH, --config-path=PATH       Set the coveralls yaml config file location, will default to check '.coveralls.yml'
    -bPATH, --base-path=PATH         Path to the root folder of the project the coverage was collected in
    -fFILENAME, --file=FILENAME      Coverage artifact file to be reported, e.g. coverage/lcov.info (detected by default)
    -jFLAG, --job-flag=FLAG          Coverage job flag name, e.g. Unit Tests
    -p, --parallel                   Set the parallel flag. Requires webhook for completion (coveralls --done)
    -d, --done                       Call webhook after all parallel jobs (-p) done
    -n, --no-logo                    Do not show Coveralls logo in logs
    -q, --quiet                      Suppress all output
    --format=FORMAT                  Force coverage file format, supported formats: lcov, simplecov, cobertura, jacoco, gcov, golang, python
    --allow-empty                    Allow empty coverage results and exit 0
    --compare-ref=REF                Git branch name to compare the coverage with
    --compare-sha=SHA                Git commit SHA to compare the coverage with
    --carryforward=FLAGS             Comma-separated list of parallel job flags
    --service-name=NAME              Build service name override
    --service-job-id=ID              Build job override
    --service-build-url=URL          Build URL override
    --service-job-url=URL            Build job URL override
    --service-branch=NAME            Branch name override
    --service-pull-request=NUMBER    PR number override
    --debug                          Debug mode: data being sent to Coveralls will be printed to console
    --dry-run                        Dry run (no request sent)
    -v, --version                    Show version
    -h, --help                       Show this help

CI Examples

Built-In Support

Supported Coverage Report Formats

With values used for --format option:

  • Lcov - lcov
  • SimpleCov - simplecov
  • Cobertura - cobertura
  • Jacoco - jacoco
  • Gcov - gcov
  • Golang coverage format - golang
  • Pytest-Cov (🧪 beta) - python

You can add a report parser to this project by following these instructions.

Bounty: One or more months of free service at Coveralls.io. Contact us to learn more.

Pytest-Cov (:test_tube: beta)

Since .coverage stores only covered lines coverage-reporter needs to parse Python code to get uncovered lines. Parsing is done in a pretty naive way, so the results might be different from actual especially for complicated and non-trivial code.

If coverage results are incorrect consider exporting .coverage to XML:

coverage xml # creates coverage.xml
coveralls -f coverage.xml

Supported CI Services

  • CircleCI
  • Github Actions
  • Travis
  • Jenkins
  • GitLab
  • Semaphore
  • Wercker
  • Codeship
  • Drone
  • Buildkite

Docs on environment variables for other CI support.

Extending Support

New CI Services

Supporting your CI service

How to use the Reporter with an officially-unsupported CI service. See instructions.

Adding Support for a New CI Service

See development instructions to add support for a new CI service.

New Coverage Report Formats

Supporting Your Coverage Report Format

If your coverage report format is not one of the ones above (in Supported Coverage Report Formats), you could try finding a library to convert your format into one of the supported formats.

Otherwise, if you want to use the Reporter, you could add support for your coverage report format.

Adding Support for New Coverage Report Formats

See development instructions to add support for a new coverage report format.

Coveralls Enterprise

Set this environment variable to your instance's host:

COVERALLS_ENDPOINT=https://coveralls-enterprise.example.com

SSL check will be automatically disabled to allow self-signed certificates.

More info: https://enterprise.coveralls.io


Development

To get started you will need crystal installed on your machine and then you can run:

shards install
make # dist/coverals will be created

Run specs:

make test

Deployment

Cutting new releases.

Auto (prefered)

$ make new_release
New version: 1.2.3
Brief description: new coverage report support

$ git push origin master --follow-tags

Manual

  1. Bump version in src/coverage_reporter.cr and shard.yml
  2. Commit with a message git commit --message "X.X.X: <short changes description>"
  3. Create a tag git tag --annotate vX.X.X with the same annotation as commit message
  4. Push with a tag git push origin master --follow-tags

Github release will be created automatically.