Integrating Coveralls with Codeship

Integrations

Reading Time: 3 minutes

At Codeship, we’re pleased to be able to integrate with several third-party products across a variety of areas to ensure your CI/CD workflows are that much smoother. For example, Coveralls is an automated code-coverage service, and getting started with Coveralls and Codeship is fast and easy.

Of course, their documentation does a great job of providing more information for the wide variety of languages it supports, but this post will walk you through setting up Coveralls with Codeship. Let’s start with the setup for Codeship Pro.

Coveralls and Codeship Pro

To begin, you’ll need to add your Coveralls repo token to the encrypted environment variables that you encrypt and include in your codeship-services.yml file.

Coveralls gem

Next, you’ll want to either manually install the Coveralls gem in your Dockerfile or add it to the Gemfile that you install your dependencies from in your Docker image build.

gem 'coveralls', require: false

Note that this will require you to build an image that contains both Ruby and Rubygems. If the image does not contain both of these, you will be unable to install the necessary coveralls gem.

Project configuration

Now, you’ll need to put the Coveralls initializers into your spec_helper.rb or env.rb file, depending on which framework you use.

require 'coveralls'
Coveralls.wear!

If you want to combine the coverage data from different frameworks, add the following to your spec_helper.rb or env.rb.

# Coveralls with Rspec and Cucumber
require 'coveralls'
Coveralls.wear_merged!
SimpleCov.merge_timeout 3600

# MAKING SURE SIMPLECOV WORKS WITH THE PARALLEL_TESTS GEM
SimpleCov.command_name "RSpec/Cucumber:#{Process.pid.to_s}#{ENV['TEST_ENV_NUMBER']}"

Finally, you’ll you need to add a rake task that pushes your coverage report as soon as your build is finished.

require 'coveralls/rake/task'
Coveralls::RakeTask.new

Pushing data

The last thing you’ll need to be sure to do is actually push your data out to Coveralls. This will happen with a command either run directly or inside of a script in your codeship-steps.yml file:

- name: coveralls_push
  service: your_service
  command: bundle exec rake coveralls:push

Coveralls and Codeship Basic

To begin, add your Coveralls repo token to a .coveralls.yml file to your codebase that contains your Coveralls key:

repo_token: YOUR_COVERALLS_TOKEN

It is also possible to set this in the environment variables for your project. You can do this by navigating to Project Settings and then clicking on the Environment tab.

Coveralls gem

Next, you’ll need to require the gem in your Gemfile.

gem 'coveralls', require: false

Project configuration

Now, you’ll need to put the Coveralls initializers into your spec_helper.rb or env.rb file, depending on which framework you use.

# Coveralls with Rspec and Cucumber
require 'coveralls'
Coveralls.wear_merged!
SimpleCov.merge_timeout 3600

# MAKING SURE SIMPLECOV WORKS WITH THE PARALLEL_TESTS GEM
SimpleCov.command_name "RSpec/Cucumber:#{Process.pid.to_s}#{ENV['TEST_ENV_NUMBER']}"

Then you need to add a rake task that pushes your coverage report as soon as your build is finished.

require 'coveralls/rake/task'
Coveralls::RakeTask.new

Pushing data

To push the data to Coveralls, add the following after your test commands on Codeship:

bundle exec rake coveralls:push

Thanks to our partnership with Coveralls, we can provide a 25 percent discount for three months. Use the code coverallslovescodeship and get started right away.

Subscribe via Email

Over 60,000 people from companies like Netflix, Apple, Spotify and O'Reilly are reading our articles.
Subscribe to receive a weekly newsletter with articles around Continuous Integration, Docker, and software development best practices.



We promise that we won't spam you. You can unsubscribe any time.

Join the Discussion

Leave us some comments on what you think about this topic or if you like to add something.