Merge coverage report
This commit is contained in:
parent
ef30678f1b
commit
647da42af9
|
@ -61,6 +61,15 @@ update-knapsack:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
|
update-coverage:
|
||||||
|
<<: *knapsack-state
|
||||||
|
stage: post-test
|
||||||
|
script:
|
||||||
|
- bundle exec rake ci:simplecov:merge
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- coverage/
|
||||||
|
|
||||||
# Execute all testing suites
|
# Execute all testing suites
|
||||||
|
|
||||||
.use-db: &use-db
|
.use-db: &use-db
|
||||||
|
@ -83,6 +92,7 @@ update-knapsack:
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- knapsack/
|
- knapsack/
|
||||||
|
- coverage/
|
||||||
|
|
||||||
.spinach-knapsack: &spinach-knapsack
|
.spinach-knapsack: &spinach-knapsack
|
||||||
stage: test
|
stage: test
|
||||||
|
@ -99,6 +109,7 @@ update-knapsack:
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- knapsack/
|
- knapsack/
|
||||||
|
- coverage/
|
||||||
|
|
||||||
rspec 0 20: *rspec-knapsack
|
rspec 0 20: *rspec-knapsack
|
||||||
rspec 1 20: *rspec-knapsack
|
rspec 1 20: *rspec-knapsack
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
# .simplecov
|
|
||||||
SimpleCov.start 'rails' do
|
|
||||||
merge_timeout 3600
|
|
||||||
end
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
require 'simplecov'
|
||||||
|
|
||||||
|
namespace :ci do
|
||||||
|
namespace :simplecov do
|
||||||
|
desc 'GitLab CI | Merge all coverage results and generate report'
|
||||||
|
task merge: :environment do
|
||||||
|
merged_result.format!
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def read(file)
|
||||||
|
return unless File.exist?(file)
|
||||||
|
data = File.read(file)
|
||||||
|
return if data.nil? || data.length < 2
|
||||||
|
data
|
||||||
|
end
|
||||||
|
|
||||||
|
def load(file)
|
||||||
|
begin
|
||||||
|
JSON.parse(read(file))
|
||||||
|
rescue
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def files
|
||||||
|
Dir.glob(File.join(SimpleCov.coverage_path, '*/.resultset.json'))
|
||||||
|
end
|
||||||
|
|
||||||
|
def resultsfiles
|
||||||
|
files.map { |file| load(file) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def resultsets
|
||||||
|
resultsfiles.reduce({}, :merge)
|
||||||
|
end
|
||||||
|
|
||||||
|
def all_results
|
||||||
|
results = []
|
||||||
|
resultsets.each do |command_name, data|
|
||||||
|
result = SimpleCov::Result.from_hash(command_name => data)
|
||||||
|
# Only add result if the timeout is above the configured threshold
|
||||||
|
if (Time.now - result.created_at) < SimpleCov.merge_timeout
|
||||||
|
results << result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
results
|
||||||
|
end
|
||||||
|
|
||||||
|
def merged_result
|
||||||
|
merged = {}
|
||||||
|
results = all_results
|
||||||
|
results.each do |result|
|
||||||
|
merged = result.original_result.merge_resultset(merged)
|
||||||
|
end
|
||||||
|
result = SimpleCov::Result.new(merged)
|
||||||
|
# Specify the command name
|
||||||
|
result.command_name = results.map(&:command_name).sort.join(", ")
|
||||||
|
result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,14 @@
|
||||||
if ENV['SIMPLECOV']
|
if ENV['SIMPLECOV']
|
||||||
require 'simplecov'
|
require 'simplecov'
|
||||||
SimpleCov.start :rails
|
require 'simplecov-rcov'
|
||||||
|
|
||||||
|
SimpleCov.start :rails do
|
||||||
|
if ENV['CI_BUILD_NAME']
|
||||||
|
coverage_dir "coverage/#{ENV['CI_BUILD_NAME']}"
|
||||||
|
command_name ENV['CI_BUILD_NAME']
|
||||||
|
merge_timeout 7200
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ENV["RAILS_ENV"] ||= 'test'
|
ENV["RAILS_ENV"] ||= 'test'
|
||||||
|
|
Loading…
Reference in New Issue