class SimpleCov::Buildkite::AnnotationFormatter
Constants
- GIT_ANNOTATION_FORMAT_REGEX
Public Instance Methods
format(result)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 5 def format(result) git_results, general_results = filter_git_groups(ignore_empty_groups(result.groups)) .values_at(:git, :general) message = <<~MESSAGE #### Coverage <dl class="flex flex-wrap m1 mxn2"> MESSAGE git_results.to_a.reverse.each do |git_result| name, group = git_result matches = name.match GIT_ANNOTATION_FORMAT_REGEX type = if matches[:action] == 'added' 'New files' else 'Files changed' end changeset = if matches[:changeset].include?('...') 'branch' else 'commit' end message += format_as_metric "#{type} in #{changeset}", group, changeset: matches[:changeset] end message += format_as_metric 'All files', result message += <<~MESSAGE </dl> MESSAGE if general_results.any? message += <<~MESSAGE <details><summary>Coverage breakdown</summary> #{general_results.map do |name, group| "- **#{name}**: #{format_group(group)}" end.join("\n")} </details> MESSAGE end if ENV['BUILDKITE'] system 'buildkite-agent', 'annotate', '--context', 'simplecov', '--style', 'info', message else puts message end end
Private Instance Methods
filter_git_groups(groups)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 74 def filter_git_groups(groups) groups.each_with_object(git: {}, general: {}) do |unzipped_group, cats| name, group = unzipped_group if name.match? GIT_ANNOTATION_FORMAT_REGEX cats[:git][name] = group else cats[:general][name] = group end end end
format_as_metric(name, element, changeset: nil)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 94 def format_as_metric(name, element, changeset: nil) metric = <<~METRIC_HEADER <div class="m2"><dt#{changeset.nil? ? '' : " title=\"#{changeset}\""}>#{name}</dt><dd> METRIC_HEADER metric += <<~METRIC_VALUE **<span class="h2 regular">#{format_float(element.covered_percent)}</span>%** #{format_line_count(element)} METRIC_VALUE metric += <<~METRIC_FOOTER </dd></div> METRIC_FOOTER end
format_float(float)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 90 def format_float(float) Kernel.format('%<floored_float>g', floored_float: float.floor(2)) end
format_group(element)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 111 def format_group(element) "#{format_float(element.covered_percent)}% coverage: #{format_line_count(element)}" end
format_integer(integer)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 86 def format_integer(integer) Kernel.format('%<integer>d', integer: integer).gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,") end
format_line_count(element)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 115 def format_line_count(element) "#{format_integer(element.covered_lines)} of #{format_integer(element.covered_lines + element.missed_lines)} lines" end
ignore_empty_groups(groups)
click to toggle source
# File lib/simplecov/buildkite/annotation_formatter.rb, line 68 def ignore_empty_groups(groups) groups.select do |_name, group| (group.covered_lines + group.missed_lines).positive? end end