Skip to content

Commit

Permalink
Implement consecutive test regressions report format
Browse files Browse the repository at this point in the history
Signed-off-by: Crola1702 <[email protected]>
  • Loading branch information
Crola1702 committed Jul 5, 2024
1 parent 2da6607 commit c67c1d3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 11 deletions.
2 changes: 1 addition & 1 deletion database/scripts/format_report.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
report = JSON.load_file(report_name)

report['urgent']['build_regressions'] = ReportFormatter::build_regressions(report['urgent']['build_regressions'])
report['urgent']['test_regressions_consecutive'] = ReportFormatter::test_regressions_consecutive(report['urgent']['test_regressions_consecutive'])

# These are not implemented yet!!!
report['urgent']['test_regressions_consecutive'] = []
report['urgent']['test_regressions_flaky'] = []

# Sample output:
Expand Down
40 changes: 30 additions & 10 deletions database/scripts/lib/report_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ module ReportFormatter
/^nightly_|^packaging_/ => 'https://ci.ros2.org/job/',
}

def self.get_build_url(job_name, build_number)
def self.format_reference_build(issue_hash)
job_name = issue_hash['job_name']
build_number = issue_hash['build_number']
base_url = ""

JOB_URL_PATTERN.each_pair do |pattern, url|
Expand All @@ -19,7 +21,7 @@ def self.get_build_url(job_name, build_number)
end
end

"#{base_url}#{job_name}/#{build_number}"
"[#{job_name}##{build_number}](#{base_url}#{job_name}/#{build_number})"
end

def self.format_datetime(datetime)
Expand All @@ -32,27 +34,45 @@ def self.build_regressions(br_array)
return "" if br_array.empty?
table = "| Reference Build | Failure DateTime | Failure Reason |\n| -- | -- | -- |\n"
br_array.each do |br_hash|
reference_build = "[#{br_hash['job_name']}##{br_hash['build_number']}](#{get_build_url(br_hash['job_name'], br_hash['build_number'])})"
reference_build = format_reference_build(br_hash)
table += "| #{reference_build} | #{format_datetime(br_hash['build_datetime'])} | #{br_hash['failure_reason']} |\n"
end
table
end

def self.test_regressions_consecutive(tr_array)
return "" if tr_array.empty?
table = "| Reference build | Age | Failure DateTime | Errors |\n| -- | -- | -- | -- |\n"
tr_array.each do |tr_issue|
reference_build = format_reference_build(tr_issue[0])
age = tr_issue[0]['age']
failure_datetime = tr_issue[0]['build_datetime']
errors = ""
tr_issue.each do |e|
errors += "<li>#{e['error_name']}</li>"
end
errors = "<ul>#{errors}</ul>"

# If output is too long, wrap it in a <details>
errors = "<details><summary>#{tr_issue.size} errors</summary>#{errors}</details>" if tr_issue.size >= 10

table += "| #{reference_build} | #{age} | #{failure_datetime} | #{errors} |\n"
end
table
end

def self.format_report(report_hash)
# Use <details> and <summary> tags to prevent long reports
output_report = ""

report_hash.each_pair do |category, subcategory_hash|
output_report += "<h1>#{category.gsub('_', ' ').capitalize}</h1>"
output_report += "<h1>#{category.gsub('_', ' ').capitalize}</h1>\n"
subcategory_hash.each_pair do |subcategory, subcategory_report| # Assume that we're traversing a hash of hashes
next if subcategory_report.empty?

subcategory_report_title = "<h2>#{subcategory.gsub('_', ' ').capitalize}</h2>"
if category = 'urgent'
subcategory_report_str = "#{subcategory_report_title}\n#{subcategory_report}"
else
subcategory_report_str = "<details><summary>#{subcategory_report_title}</summary>\n#{subcategory_report}<details>"
end
subcategory_report_title = "<h2>#{subcategory.gsub('_', ' ').capitalize}</h2>\n"
subcategory_report_str = "#{subcategory_report_title}\n#{subcategory_report}\n"
subcategory_report_str = "<details><summary>#{subcategory_report_title}</summary>\n#{subcategory_report}<details>\n" unless category == 'urgent'
output_report += subcategory_report_str
end
end
Expand Down

0 comments on commit c67c1d3

Please sign in to comment.