gitlab_quality-test_tooling 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69b4478a8c7af86d2dae63c79d0924037feb673486f1ae6f15d5617121a0b9f4
4
- data.tar.gz: 9a7f797d54687a515d834cfe0585bca7b87f5a28cd33000d5c06ebea292de56e
3
+ metadata.gz: 7437a045ff423ca3c6585be2aa13b11d97fd94abb5d8ffd95a14d11f48970b68
4
+ data.tar.gz: fd91b826d48c661a7b05f196857ec95c7fc59d478e8718ffa9ca5d534f38ffe5
5
5
  SHA512:
6
- metadata.gz: 50206a9f212b2d78ab38b8433ffb5f22864e8a322b6065b6492a9023104e2caf0097042c8935c913f7d16de982fd3fb04a8438d294865f61caac84eee60d943e
7
- data.tar.gz: 1267891667d8bf81617843d65ea6cd9bee2aef24007a2dc53ba92d970529f771dcbf8b8209aba7d59531f40ffac2e2c549444441dcae123c8e70bac1c0d417e7
6
+ metadata.gz: 4de31f3a187af7c92df5b015c631e5fa1278fa6a3d62f8111294ce07c245236b9e30e78a6760859eee4d024ee0de62dd544201e2d3e4beec73ef7be00f443def
7
+ data.tar.gz: 1d44821f07f2d61ac2d1b31b0837149bcf015070ffa1c4e6791d4685c3be322ab0991a28bf1551130eaf274045d58855a405b680948673f78aa208c9a34cab77
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab_quality-test_tooling (2.1.0)
4
+ gitlab_quality-test_tooling (2.2.0)
5
5
  activesupport (>= 7.0, < 7.2)
6
6
  amatch (~> 0.4.1)
7
7
  fog-google (~> 1.24, >= 1.24.1)
@@ -11,13 +11,15 @@ module GitlabQuality
11
11
  FAILED_JOB_DESCRIPTION_REGEX = /First happened in #{JOB_URL_REGEX}\./m
12
12
  REPORT_ITEM_REGEX = /^1\. (?<report_date>\d{4}-\d{2}-\d{2}): #{JOB_URL_REGEX} \((?<pipeline_url>\S+)\) ?(?<extra_content>.*)$/
13
13
  LATEST_REPORTS_TO_SHOW = 10
14
+ DISPLAYED_HISTORY_REPORTS_THRESHOLD = 510 # https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/587
14
15
  DAILY_REPORTS_THRESHOLDS = 10
15
16
 
16
17
  class ReportsList
17
- def initialize(preserved_content:, section_header:, reports:, extra_content:)
18
+ def initialize(preserved_content:, section_header:, reports:, total_reports_count:, extra_content:)
18
19
  @preserved_content = preserved_content
19
20
  @section_header = section_header
20
21
  @reports = reports
22
+ @total_reports_count = total_reports_count
21
23
  @extra_content = extra_content
22
24
  end
23
25
 
@@ -31,14 +33,14 @@ module GitlabQuality
31
33
  end
32
34
 
33
35
  def reports_count
34
- reports.size
36
+ total_reports_count
35
37
  end
36
38
 
37
39
  def to_s
38
40
  [
39
41
  preserved_content,
40
42
  "#{section_header} (#{reports_count})",
41
- reports_list,
43
+ reports_list(total_reports_count),
42
44
  extra_content
43
45
  ].reject(&:blank?).compact.join("\n\n")
44
46
  end
@@ -53,15 +55,16 @@ module GitlabQuality
53
55
 
54
56
  private
55
57
 
56
- attr_reader :preserved_content, :section_header, :reports, :extra_content
58
+ attr_reader :preserved_content, :section_header, :reports, :total_reports_count, :extra_content
57
59
 
58
- def reports_list
60
+ def reports_list(total_reports_count)
59
61
  if sorted_reports.size > LATEST_REPORTS_TO_SHOW
62
+ max_displayed_reports = DISPLAYED_HISTORY_REPORTS_THRESHOLD - LATEST_REPORTS_TO_SHOW
60
63
  [
61
64
  "Last #{LATEST_REPORTS_TO_SHOW} reports:",
62
- sorted_reports[...LATEST_REPORTS_TO_SHOW].join("\n"),
63
- "<details><summary>See #{sorted_reports.size - LATEST_REPORTS_TO_SHOW} more reports</summary>",
64
- sorted_reports[LATEST_REPORTS_TO_SHOW..].join("\n"),
65
+ displayed_reports[...LATEST_REPORTS_TO_SHOW].join("\n"),
66
+ "<details><summary>With #{total_reports_count - LATEST_REPORTS_TO_SHOW} more reports (displaying up to #{max_displayed_reports} reports) </summary>",
67
+ displayed_reports[LATEST_REPORTS_TO_SHOW..].join("\n"),
65
68
  "</details>"
66
69
  ].join("\n\n")
67
70
  else
@@ -70,7 +73,12 @@ module GitlabQuality
70
73
  end
71
74
 
72
75
  def sorted_reports
73
- @sorted_reports ||= reports.sort.reverse
76
+ @sorted_reports ||=
77
+ reports.sort_by { |report| [report.report_date, report.job_id, report.to_s] }.reverse
78
+ end
79
+
80
+ def displayed_reports
81
+ sorted_reports[0...DISPLAYED_HISTORY_REPORTS_THRESHOLD]
74
82
  end
75
83
  end
76
84
 
@@ -88,8 +96,8 @@ module GitlabQuality
88
96
  "1. #{report_date}: #{job_url} (#{pipeline_url}) #{extra_content}".strip
89
97
  end
90
98
 
91
- def <=>(other)
92
- to_s <=> other.to_s
99
+ def job_id
100
+ job_url.split('/').last
93
101
  end
94
102
 
95
103
  private
@@ -122,14 +130,33 @@ module GitlabQuality
122
130
  preserved_content = current_reports_content.split(reports_section_header).first&.strip
123
131
  reports = report_lines(current_reports_content) + [ReportsList.report_list_item(test, item_extra_content: item_extra_content)]
124
132
 
133
+ total_reports_count = increment_total_reports_count(
134
+ reports_section_header: reports_section_header,
135
+ content: current_reports_content,
136
+ reports: reports
137
+ )
138
+
125
139
  ReportsList.new(
126
140
  preserved_content: preserved_content,
127
141
  section_header: reports_section_header,
128
142
  reports: reports,
143
+ total_reports_count: total_reports_count,
129
144
  extra_content: reports_extra_content
130
145
  )
131
146
  end
132
147
 
148
+ def increment_total_reports_count(reports_section_header:, content:, reports:)
149
+ reports_count = reports.count
150
+
151
+ return reports_count if reports_count < DISPLAYED_HISTORY_REPORTS_THRESHOLD
152
+
153
+ count_match = content.match(/#{Regexp.escape(reports_section_header)} \((\d+)\)/)
154
+
155
+ return reports_count unless count_match
156
+
157
+ count_match[1].to_i + 1
158
+ end
159
+
133
160
  def failed_issue_job_url(issue)
134
161
  job_urls_from_description(issue.description, REPORT_ITEM_REGEX).last ||
135
162
  # Legacy format
@@ -16,9 +16,14 @@ module GitlabQuality
16
16
 
17
17
  def parse
18
18
  JSON.parse(File.read(path))
19
+ rescue JSON::ParserError
20
+ Runtime::Logger.debug("#{self.class.name}##{__method__} attempted to parse invalid JSON at path: #{path}")
21
+ {}
19
22
  end
20
23
 
21
24
  def process
25
+ return [] if results.empty?
26
+
22
27
  results['examples'].map do |test|
23
28
  GitlabQuality::TestTooling::TestResult::JsonTestResult.new(report: test, project: project, token: token)
24
29
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GitlabQuality
4
4
  module TestTooling
5
- VERSION = "2.1.0"
5
+ VERSION = "2.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_quality-test_tooling
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-22 00:00:00.000000000 Z
11
+ date: 2024-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control