Add the Ruby script to your repo, and add this snippet into your new circle.yml:
- deploy:
name: Merge and copy coverage data
command: bundle exec path/to/circle.rbIt will only work if the tests pass.
| #!/usr/bin/env ruby | |
| # originally based on https://gist.github.com/evanwhalen/f74879e0549b67eb17bb | |
| require 'codeclimate-test-reporter' | |
| require 'open-uri' | |
| # ENV['PROJECT_NAME'] => 'github/github' | |
| api_url = "https://circleci.com/api/v1.1/project/github/#{ENV['CIRCLE_PROJECT_USERNAME']}/#{ENV['CIRCLE_PROJECT_REPONAME']}/#{ENV['CIRCLE_BUILD_NUM']}/artifacts?circle-token=#{ENV['CIRCLE_TOKEN']}" | |
| artifacts = open(api_url) | |
| coverage_dir = '/tmp/coverage' | |
| SimpleCov.coverage_dir(coverage_dir) | |
| JSON.load(artifacts) | |
| .map { |artifact| JSON.load(open("#{artifact['url']}?circle-token=#{ENV['CIRCLE_TOKEN']}")) } | |
| .each_with_index do |resultset, i| | |
| resultset.each do |_, data| | |
| result = SimpleCov::Result.from_hash(['command', i].join => data) | |
| SimpleCov::ResultMerger.store_result(result) | |
| end | |
| end | |
| merged_result = SimpleCov::ResultMerger.merged_result | |
| merged_result.command_name = 'RSpec' | |
| CodeClimate::TestReporter.run(merged_result.to_hash) |
Here is an updated gist covering this technique and another technique(using workflows) to generate coverage reports locally. It also generates html report.
Happy coding!
I am trying to use this technique to merge and store builds locally instead of code-climate. Any help will be appreciated.