diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7084b0a03e..b447c5e5e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -408,3 +408,7 @@ jobs: retention-days: 7 if-no-files-found: ignore include-hidden-files: true + - name: Compare SimpleCov results with Undercover + run: | + git fetch --no-tags origin master:master + bundle exec undercover diff --git a/.undercover b/.undercover new file mode 100644 index 0000000000..95a9fe08c9 --- /dev/null +++ b/.undercover @@ -0,0 +1,5 @@ +#!/bin/env ruby +# frozen_string_literal: true + +-l coverage/lcov/openfoodnetwork.lcov +-c master \ No newline at end of file diff --git a/Gemfile b/Gemfile index 3eb9efa049..342f6ec61e 100644 --- a/Gemfile +++ b/Gemfile @@ -173,6 +173,8 @@ group :test do gem 'pdf-reader' gem 'rails-controller-testing' gem 'simplecov', require: false + gem 'simplecov-lcov', require: false + gem 'undercover', require: false gem 'vcr', require: false gem 'webmock', require: false # See spec/spec_helper.rb for instructions diff --git a/Gemfile.lock b/Gemfile.lock index 37547b0258..d391606055 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -364,6 +364,8 @@ GEM image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) + imagen (0.2.0) + parser (>= 2.5, != 2.5.1.1) immigrant (0.3.6) activerecord (>= 3.0) invisible_captcha (2.3.0) @@ -715,6 +717,7 @@ GEM rubyzip (2.3.2) rufus-scheduler (3.8.2) fugit (~> 1.1, >= 1.1.6) + rugged (1.7.2) sanitize (6.1.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) @@ -743,6 +746,7 @@ GEM simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) + simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) spreadsheet_architect (5.0.0) caxlsx (>= 3.3.0, < 4) @@ -804,6 +808,11 @@ GEM turbo-rails (>= 1.3.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) + undercover (0.6.3) + bigdecimal + imagen (>= 0.2.0) + rainbow (>= 2.1, < 4.0) + rugged (>= 0.27, < 1.8) unicode-display_width (2.5.0) uniform_notifier (1.16.0) uri (0.13.0) @@ -980,6 +989,7 @@ DEPENDENCIES sidekiq sidekiq-scheduler simplecov + simplecov-lcov spreadsheet_architect spring spring-commands-rspec @@ -992,6 +1002,7 @@ DEPENDENCIES timecop turbo-rails turbo_power + undercover valid_email2 validates_lengths_from_database vcr diff --git a/lib/tasks/simplecov.rake b/lib/tasks/simplecov.rake index b0c896ecb7..d5bc344f06 100644 --- a/lib/tasks/simplecov.rake +++ b/lib/tasks/simplecov.rake @@ -5,6 +5,7 @@ namespace :simplecov do task :collate_results, # rubocop:disable Rails/RakeEnvironment doesn't need the full env [:path_to_results, :coverage_dir] do |_t, args| require "simplecov" + require "simplecov-lcov" path_to_results = args[:path_to_results].presence || "tmp/simplecov" output_path = args[:coverage_dir].presence || "coverage" @@ -13,5 +14,11 @@ namespace :simplecov do formatter(SimpleCov::Formatter::HTMLFormatter) coverage_dir(output_path) end + + SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true + SimpleCov.collate Dir[File.join(path_to_results, "**", ".resultset.json")], "rails" do + formatter(SimpleCov::Formatter::LcovFormatter) + coverage_dir(output_path) + end end end