canvas-lms/spec/coverage_tool.rb

49 lines
1.6 KiB
Ruby

# frozen_string_literal: true
#
# Copyright (C) 2014 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
require "simplecov"
require_relative "canvas_simplecov"
class CoverageTool
def self.start(command_name)
# Make a unique index to avoid having duplicate rspec:{id} values at time of merge
parallel_index = ENV["CI_NODE_INDEX"] || "0"
rspec_command_index = (1_000_000_000 * parallel_index.to_i) + Process.pid
::SimpleCov.merge_timeout(3600)
::SimpleCov.command_name("#{command_name}:#{rspec_command_index}")
::SimpleCov.start "canvas_rails" do
formatter ::SimpleCov::Formatter::MultiFormatter.new(
[
::SimpleCov::Formatter::SimpleFormatter,
::SimpleCov::Formatter::HTMLFormatter
]
)
::SimpleCov.at_exit do
# generate an HTML report if this is running locally / not on jenkins:
::SimpleCov.result.format! unless ENV["RSPEC_PROCESSES"]
::SimpleCov.result
end
end
end
end