SBT plugin that uploads scala code coverage to coveralls and integrates with Travis CI and GitHub Actions. This plugin uses scoverage to generate the code coverage metrics.
Please take a look at the samples project to see some sample output.
project/build.sbt
fileaddSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.8.2") addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.3.1")
Setup coveralls configuration options (such as Specifying Your Repo Token)
Register on coveralls
Follow the instructions for either Travis CI or Manual Usage
sbt-coveralls
can be run by Travis CI by following these instructions:
Add the following to your travis.yml
script: "sbt clean coverage test" after_success: "sbt coverageReport coveralls"
If you have a multi-module project, perform coverageAggregate
as a separate command.
script: - sbt clean coverage test coverageReport && sbt coverageAggregate after_success: - sbt coveralls
Job done! Commit these changes to travis.yml
to kick off your Travis build and you should see coverage reports appear on coveralls.
sbt-coveralls
can be run by GitHub Actions by following these instructions:
Add the following to your .github/workflows/ci.yml
- name: Git checkout (merge) uses: actions/checkout@v3 if: github.event_name != 'pull_request' with: fetch-depth: 0 - name: Git checkout (PR) uses: actions/checkout@v3 if: github.event_name == 'pull_request' with: fetch-depth: 0 # see: https://frontside.com/blog/2020-05-26-github-actions-pull_request/#how-does-pull_request-affect-actionscheckout ref: ${{ github.event.pull_request.head.sha }} - name: Run tests run: sbt clean coverage test - name: Upload coverage data to Coveralls run: sbt coverageReport coveralls env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} COVERALLS_FLAG_NAME: Scala ${{ matrix.scala }}
Note the separate checkout step for pull requests. It is needed because of the way pull_request affects actions checkout, so correct commit info could be sent to coveralls.io
If you have a multi-module project, perform coverageAggregate
as a separate command.
- name: Upload coverage data to Coveralls run: sbt coverageAggregate coveralls env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} COVERALLS_FLAG_NAME: Scala ${{ matrix.scala }}
Job done! Commit these changes to kick off your GitHub Actions build and you should see coverage reports appear on coveralls.
Enable CircleCI support in your build.sbt
:
import org.scoverage.coveralls.Imports.CoverallsKeys._ import org.scoverage.coveralls.CircleCI coverallsService := Some(CircleCI)
Add the following step to your config.yml
right after your test step:
- run: name: Generate and upload coverage report when: always command: sbt ";coverageReport ;coverageAggregate ;coveralls"
Get the repo token for your repo from coveralls.
Let sbt-coveralls
know what your coveralls repo token is. See Specifying Your Repo Token
In the SBT console, run coverage
then your tests finishing with coveralls
. After running the command, you should see output similar to the following:
Uploading to coveralls.io succeeded: Job #17.1
https://coveralls.io/jobs/12207
There are several ways to tell sbt-coveralls
your repo token to support different use cases:
Add the following to your build.sbt
. The path can be absolute and point to somewhere outside the project or relative and point somewhere inside the project (such as src/main/resources/token.txt
).
Just remember: Do not store repo tokens inside your project if it is in a public git repository!
import org.scoverage.coveralls.Imports.CoverallsKeys._ coverallsTokenFile := "/path/to/my/repo/token.txt"Put your repo token directly in your
build.sbt
Do not store repo tokens inside your project if it is in a public git repository!
import org.scoverage.coveralls.Imports.CoverallsKeys._ coverallsToken := Some("my-token")Add an environment variable
Add an environment variable COVERALLS_REPO_TOKEN
, for example:
export COVERALLS_REPO_TOKEN=my-token
Specifying Your Coveralls Endpoint
If you're using coveralls as your endpoint, then you don't need to set this option. If you're using a hosted (enterprise) instance of coveralls, you will need to specify your endpoint in one of two ways.
Put your endpoint directly in yourbuild.sbt
import org.scoverage.coveralls.Imports.CoverallsKeys._ coverallsEndpoint := Some("http://my-instance.com")Add an environment variable
Add an environment variable COVERALLS_ENDPOINT
, for example:
export COVERALLS_ENDPOINT=http://my-instance.com
Overriding the current branch
By default sbt-coveralls
uses the currently checked-out branch for reporting. To override the branch name add the CI_BRANCH
variable, for example:
export CI_BRANCH=my-branch-name
Specifying Source File Encoding
sbt-coveralls
finds the encoding in scalacOptions
setting value. If not defined it assumes source files are encoded using platform-specific encoding. To specify encoding, add the following to your build.sbt
scalacOptions += Seq("-encoding", "UTF-8")
It is important to set the correct service
when using Travis-Pro. The default is to use travis-ci
. To override this value, add the following to your build.sbt
import org.scoverage.coveralls.Imports.CoverallsKeys._ import org.scoverage.coveralls.TravisPro coverallsService := Some(TravisPro)Uploading coverage from parallel CI builds
Coveralls supports merging reports from multiple CI builds. Each report must be flagged as coming from a parallel job, then a webhook must be called after all jobs have completed to merge the reports together.
To mark uploaded reports as parallel, either:
Put the flag directly inbuild.sbt
import org.scoverage.coveralls.Imports.CoverallsKeys._ coverallsParallel := trueSet an environment variable
export COVERALLS_PARALLEL=true
sbt-coveralls
is open source software released under the Apache 2 License.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4