Skip to content

Commit

Permalink
Renovate simplecov setup
Browse files Browse the repository at this point in the history
A lot of the functionality we created ourselves is supported by simplecov in
the latest versions

- Merging reports SimpleCov.collate
- Shared configuration with a .simplcov file

And now that uploading will be separated from simplecov, we can just always
generate coverage reports instead of doing it only in CI.
  • Loading branch information
hennevogel committed Apr 14, 2023
1 parent a6496ef commit 10c4bbd
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 90 deletions.
14 changes: 10 additions & 4 deletions .circleci/conditional_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ jobs:
root: .
paths:
- .

linters:
docker:
- <<: *frontend_base
Expand Down Expand Up @@ -368,16 +369,21 @@ jobs:
- attach_workspace:
at: .
- run:
name: Merge and check coverage
name: Merge coverage
working_directory: src/api
command: bundle exec rake ci:simplecov_ci_merge
- run:
name: Upload coverage to codecov
working_directory: src/api
command: |
export COVERALLS_REPO_TOKEN=HWLJwfiFsKPGEOzfgllO3pP3rqV540Qt3
bundle exec rake ci:simplecov_ci_merge
curl -Os https://uploader.codecov.io/latest/linux/codecov
chmod +x codecov
codecov -v -f coverage/coverage.xml
- run:
name: Compress coverage results
working_directory: src/api
command: |
tar cvJf coverage_results.tar.xz coverage/codecov-result.json coverage_results/*
tar cvJf coverage_results.tar.xz coverage_results/*
- store_artifacts:
path: src/api/coverage_results.tar.xz

Expand Down
15 changes: 15 additions & 0 deletions src/api/.simplecov
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
SimpleCov.start 'rails' do
add_filter '/app/indices/'
add_filter '/lib/templates/'
add_filter '/lib/memory_debugger.rb'
add_filter '/lib/memory_dumper.rb'
merge_timeout 3600
add_group 'Components', 'app/components'
add_group 'Datatables', 'app/datatables'
add_group 'Instrumentations', 'app/instrumentations'
add_group 'Mixins', 'app/mixins'
add_group 'Policies', 'app/policies'
add_group 'Queries', 'app/queries'
add_group 'Services', 'app/services'
add_group 'Validators', 'app/validators'
end
52 changes: 4 additions & 48 deletions src/api/lib/tasks/coverage.rake
Original file line number Diff line number Diff line change
@@ -1,56 +1,12 @@
namespace :ci do
def merged_results(glob)
coverage_results = []
base_dir = Rails.root.join('coverage_results')
Dir["#{base_dir}/" + glob].each do |file|
# load json results from coverage folder
file_results = JSON.parse(File.read(file))

# parse results from coverage file to array
file_results.each do |command, data|
result = SimpleCov::Result.from_hash(command => data)
coverage_results << result
end
end

# merge results from array to results object
SimpleCov::ResultMerger.merge_results(*coverage_results)
end

desc 'Generate merged coverage report'
task :simplecov_ci_merge do
require 'simplecov'
require 'codecov'
require 'coveralls'
require 'simplecov-cobertura'

# initialize data members
# and configure simplecov
SimpleCov.filters.clear
SimpleCov.merge_timeout 100_000

SimpleCov.configure do
add_group('WebUI') { |file| file.filename =~ /webui/ }
add_group('Jobs') { |file| file.filename =~ %r{jobs/} }
add_group('Models') { |file| file.filename =~ %r{models/} }
add_group('Helpers') { |file| file.filename =~ %r{helpers/} && file.filename !~ /webui/ }
add_group('API Controllers') { |file| file.filename =~ %r{controllers/} && file.filename !~ /webui/ }
SimpleCov.collate(Dir['coverage_results/*.json'], 'rails') do
formatter SimpleCov::Formatter::MultiFormatter.new([SimpleCov::Formatter::CoberturaFormatter,
SimpleCov::Formatter::HTMLFormatter])
end

# upload the result for all
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
Coveralls::SimpleCov::Formatter,
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::Codecov
])
merged_results('resultset*.json').format!

# render subsets
SimpleCov.coverage_dir('coverage/rspec')
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
merged_results('resultset-rspec*.json').format!

SimpleCov.coverage_dir('coverage/minitest')
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
merged_results('resultset-minitest*.json').format!
end
end
5 changes: 0 additions & 5 deletions src/api/spec/rails_helper.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
# for generating test coverage
require 'simplecov'
# Avoid codecov failures outside of CI
if ENV['CIRCLECI']
# support test coverage
require 'support/coverage'
end
# to clean old unused cassettes
require 'cassette_rewinder' if ENV['CLEAN_UNUSED_CASSETTES']

Expand Down
15 changes: 0 additions & 15 deletions src/api/spec/support/coverage.rb

This file was deleted.

17 changes: 0 additions & 17 deletions src/api/test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,6 @@

Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)

if ENV['DO_COVERAGE']
ENV['CODECOV_FLAG'] = ENV.fetch('CIRCLE_STAGE', nil)
SimpleCov.start 'rails' do
# NOTE: Keep filters in sync with spec/support/coverage.rb
add_filter '/app/indices/'
add_filter '/lib/templates/'
add_filter '/lib/memory_debugger.rb'
add_filter '/lib/memory_dumper.rb'
merge_timeout 3600
end

SimpleCov.at_exit do
puts 'Coverage done'
SimpleCov.result.format!
end
end

require File.expand_path('../config/environment', __dir__)
require_relative 'test_consistency_helper'

Expand Down
2 changes: 1 addition & 1 deletion src/api/test/unit/package_test.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require File.expand_path(File.dirname(__FILE__) + '/..') + '/test_helper'

SimpleCov.command_name('test:api')
SimpleCov.command_name('minitest')

class PackageTest < ActiveSupport::TestCase
fixtures :all
Expand Down

0 comments on commit 10c4bbd

Please sign in to comment.