gitlab_quality-test_tooling 1.38.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +50 -11
- data/.ruby-version +1 -1
- data/.tool-versions +1 -1
- data/Gemfile.lock +121 -116
- data/lib/gitlab_quality/test_tooling/report/failed_test_issue.rb +85 -7
- data/lib/gitlab_quality/test_tooling/report/flaky_test_issue.rb +2 -2
- data/lib/gitlab_quality/test_tooling/report/generate_test_session.rb +1 -1
- data/lib/gitlab_quality/test_tooling/report/health_problem_reporter.rb +27 -77
- data/lib/gitlab_quality/test_tooling/report/knapsack_report_issue.rb +4 -1
- data/lib/gitlab_quality/test_tooling/report/relate_failure_issue.rb +1 -1
- data/lib/gitlab_quality/test_tooling/report/slow_test_issue.rb +3 -3
- data/lib/gitlab_quality/test_tooling/test_result/base_test_result.rb +7 -2
- data/lib/gitlab_quality/test_tooling/version.rb +1 -1
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a5b20eb9951ec812418e3b1f5774674419d29961fabf4710f32e71d7a7f6c73
|
4
|
+
data.tar.gz: 7ec895c4672772ef7801cf1fa864c87d1f76b59f2834434658f13e7c64cc0615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f013d08976015caf80341b6aa86ecbb1b7198adeac56911dc89a9e3958a78a8001c065cb7a777ed8248109fd72d5b2109a577692c494ad785a3f55e0296c2be3
|
7
|
+
data.tar.gz: 66be21506f82e4cbf566216f546308df9e1607aaa709792f35c9053c117da2a2845abb376fe88ff743790a0d5006a6d71e2ee2b9365f109b50772367a6c2bf8a
|
data/.rubocop_todo.yml
CHANGED
@@ -1,17 +1,11 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2024-10-10 06:12:01 UTC using RuboCop version 1.62.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
# This cop supports safe autocorrection (--autocorrect).
|
11
|
-
Cop/CustomErrorClass:
|
12
|
-
Exclude:
|
13
|
-
- 'lib/gitlab_quality/test_tooling.rb'
|
14
|
-
|
15
9
|
# Offense count: 1
|
16
10
|
# This cop supports safe autocorrection (--autocorrect).
|
17
11
|
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
|
@@ -20,9 +14,54 @@ Gemspec/OrderedDependencies:
|
|
20
14
|
Exclude:
|
21
15
|
- 'gitlab_quality-test_tooling.gemspec'
|
22
16
|
|
17
|
+
# Offense count: 3
|
18
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
19
|
+
# Configuration parameters: Categories, ExpectedOrder.
|
20
|
+
# ExpectedOrder: module_inclusion, constants, public_class_methods, initializer, public_methods, protected_methods, private_methods
|
21
|
+
Layout/ClassStructure:
|
22
|
+
Exclude:
|
23
|
+
- 'lib/gitlab_quality/test_tooling/labels_inference.rb'
|
24
|
+
- 'lib/gitlab_quality/test_tooling/report/concerns/issue_reports.rb'
|
25
|
+
- 'lib/gitlab_quality/test_tooling/report/update_screenshot_path.rb'
|
26
|
+
|
27
|
+
# Offense count: 6
|
28
|
+
# This cop supports safe autocorrection (--autocorrect).
|
29
|
+
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
30
|
+
# SupportedStyles: aligned, indented
|
31
|
+
Layout/LineEndStringConcatenationIndentation:
|
32
|
+
Exclude:
|
33
|
+
- 'lib/gitlab_quality/test_tooling/gitlab_client/merge_requests_dry_client.rb'
|
34
|
+
- 'lib/gitlab_quality/test_tooling/report/report_results.rb'
|
35
|
+
- 'spec/gitlab_quality/test_tooling/gitlab_client/issues_client_spec.rb'
|
36
|
+
- 'spec/gitlab_quality/test_tooling/report/failed_test_issue_spec.rb'
|
37
|
+
- 'spec/gitlab_quality/test_tooling/report/slow_test_issue_spec.rb'
|
38
|
+
|
39
|
+
# Offense count: 200
|
40
|
+
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
|
41
|
+
# SupportedStyles: always, named_only
|
42
|
+
RSpec/NamedSubject:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
# Offense count: 2
|
46
|
+
# This cop supports safe autocorrection (--autocorrect).
|
47
|
+
# Configuration parameters: AllowOnlyRestArgument, UseAnonymousForwarding, RedundantRestArgumentNames, RedundantKeywordRestArgumentNames, RedundantBlockArgumentNames.
|
48
|
+
# RedundantRestArgumentNames: args, arguments
|
49
|
+
# RedundantKeywordRestArgumentNames: kwargs, options, opts
|
50
|
+
# RedundantBlockArgumentNames: blk, block, proc
|
51
|
+
Style/ArgumentsForwarding:
|
52
|
+
Exclude:
|
53
|
+
- 'lib/gitlab_quality/test_tooling/test_results/base_test_results.rb'
|
54
|
+
|
55
|
+
# Offense count: 2
|
56
|
+
# This cop supports safe autocorrection (--autocorrect).
|
57
|
+
# Configuration parameters: AllowMultipleReturnValues.
|
58
|
+
Style/RedundantReturn:
|
59
|
+
Exclude:
|
60
|
+
- 'lib/gitlab_quality/test_tooling/runtime/env.rb'
|
61
|
+
|
23
62
|
# Offense count: 1
|
24
|
-
#
|
25
|
-
#
|
26
|
-
|
63
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
64
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
65
|
+
Style/ReturnNilInPredicateMethodDefinition:
|
27
66
|
Exclude:
|
28
|
-
- 'gitlab_quality
|
67
|
+
- 'lib/gitlab_quality/test_tooling/knapsack_reports/spec_run_time.rb'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.5
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 3.
|
1
|
+
ruby 3.2.5
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gitlab_quality-test_tooling (
|
4
|
+
gitlab_quality-test_tooling (2.0.0)
|
5
5
|
activesupport (>= 7.0, < 7.2)
|
6
6
|
amatch (~> 0.4.1)
|
7
7
|
fog-google (~> 1.24, >= 1.24.1)
|
8
|
-
gitlab (
|
8
|
+
gitlab (>= 4.19, < 6.0)
|
9
9
|
http (~> 5.0)
|
10
10
|
influxdb-client (~> 3.1)
|
11
11
|
nokogiri (~> 1.10)
|
@@ -18,7 +18,7 @@ PATH
|
|
18
18
|
GEM
|
19
19
|
remote: https://rubygems.org/
|
20
20
|
specs:
|
21
|
-
activesupport (7.1.
|
21
|
+
activesupport (7.1.4)
|
22
22
|
base64
|
23
23
|
bigdecimal
|
24
24
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -28,8 +28,8 @@ GEM
|
|
28
28
|
minitest (>= 5.1)
|
29
29
|
mutex_m
|
30
30
|
tzinfo (~> 2.0)
|
31
|
-
addressable (2.8.
|
32
|
-
public_suffix (>= 2.0.2, <
|
31
|
+
addressable (2.8.7)
|
32
|
+
public_suffix (>= 2.0.2, < 7.0)
|
33
33
|
amatch (0.4.1)
|
34
34
|
mize
|
35
35
|
tins (~> 1.0)
|
@@ -38,8 +38,8 @@ GEM
|
|
38
38
|
base64 (0.2.0)
|
39
39
|
benchmark (0.3.0)
|
40
40
|
bigdecimal (3.1.8)
|
41
|
-
binding_of_caller (1.0.
|
42
|
-
debug_inspector (>=
|
41
|
+
binding_of_caller (1.0.1)
|
42
|
+
debug_inspector (>= 1.2.0)
|
43
43
|
builder (3.3.0)
|
44
44
|
byebug (11.1.3)
|
45
45
|
claide (1.1.0)
|
@@ -50,13 +50,15 @@ GEM
|
|
50
50
|
climate_control (1.2.0)
|
51
51
|
coderay (1.1.3)
|
52
52
|
colored2 (3.1.2)
|
53
|
-
concurrent-ruby (1.
|
53
|
+
concurrent-ruby (1.3.4)
|
54
54
|
connection_pool (2.4.1)
|
55
55
|
cork (0.3.0)
|
56
56
|
colored2 (~> 3.1)
|
57
|
-
crack (0.
|
57
|
+
crack (1.0.0)
|
58
|
+
bigdecimal
|
58
59
|
rexml
|
59
|
-
|
60
|
+
csv (3.3.0)
|
61
|
+
danger (9.5.0)
|
60
62
|
claide (~> 1.0)
|
61
63
|
claide-plugins (>= 0.9.2)
|
62
64
|
colored2 (~> 3.1)
|
@@ -66,29 +68,30 @@ GEM
|
|
66
68
|
git (~> 1.13)
|
67
69
|
kramdown (~> 2.3)
|
68
70
|
kramdown-parser-gfm (~> 1.0)
|
69
|
-
no_proxy_fix
|
70
71
|
octokit (>= 4.0)
|
71
72
|
terminal-table (>= 1, < 4)
|
72
|
-
danger-gitlab (
|
73
|
+
danger-gitlab (9.0.0)
|
73
74
|
danger
|
74
|
-
gitlab (~>
|
75
|
+
gitlab (~> 5.0)
|
75
76
|
debug_inspector (1.2.0)
|
76
77
|
declarative (0.0.20)
|
77
|
-
diff-lcs (1.5.
|
78
|
-
docile (1.4.
|
78
|
+
diff-lcs (1.5.1)
|
79
|
+
docile (1.4.1)
|
79
80
|
domain_name (0.6.20240107)
|
80
81
|
drb (2.2.1)
|
81
82
|
e2mmap (0.1.0)
|
82
|
-
excon (0.
|
83
|
-
faraday (2.
|
84
|
-
faraday-net_http (>= 2.0, < 3.
|
83
|
+
excon (0.112.0)
|
84
|
+
faraday (2.12.0)
|
85
|
+
faraday-net_http (>= 2.0, < 3.4)
|
86
|
+
json
|
87
|
+
logger
|
85
88
|
faraday-http-cache (2.5.1)
|
86
89
|
faraday (>= 0.8)
|
87
|
-
faraday-net_http (3.
|
90
|
+
faraday-net_http (3.3.0)
|
88
91
|
net-http
|
89
|
-
ffi (1.
|
90
|
-
ffi-compiler (1.
|
91
|
-
ffi (>= 1.
|
92
|
+
ffi (1.17.0)
|
93
|
+
ffi-compiler (1.3.2)
|
94
|
+
ffi (>= 1.15.5)
|
92
95
|
rake
|
93
96
|
fog-core (2.4.0)
|
94
97
|
builder
|
@@ -118,44 +121,45 @@ GEM
|
|
118
121
|
git (1.19.1)
|
119
122
|
addressable (~> 2.8)
|
120
123
|
rchardet (~> 1.8)
|
121
|
-
gitlab (
|
124
|
+
gitlab (5.0.0)
|
122
125
|
httparty (~> 0.20)
|
123
126
|
terminal-table (>= 1.5.1)
|
124
127
|
gitlab-dangerfiles (3.13.0)
|
125
128
|
danger (>= 8.4.5)
|
126
129
|
danger-gitlab (>= 8.0.0)
|
127
130
|
rake
|
128
|
-
gitlab-styles (
|
129
|
-
rubocop (~> 1.
|
130
|
-
rubocop-
|
131
|
-
rubocop-
|
132
|
-
rubocop-
|
133
|
-
rubocop-
|
134
|
-
|
131
|
+
gitlab-styles (12.0.1)
|
132
|
+
rubocop (~> 1.62.1)
|
133
|
+
rubocop-factory_bot (~> 2.25.1)
|
134
|
+
rubocop-graphql (~> 1.5.0)
|
135
|
+
rubocop-performance (~> 1.20.2)
|
136
|
+
rubocop-rails (~> 2.24.0)
|
137
|
+
rubocop-rspec (~> 2.27.1)
|
138
|
+
google-apis-compute_v1 (0.108.0)
|
135
139
|
google-apis-core (>= 0.15.0, < 2.a)
|
136
|
-
google-apis-core (0.15.
|
140
|
+
google-apis-core (0.15.1)
|
137
141
|
addressable (~> 2.5, >= 2.5.1)
|
138
142
|
googleauth (~> 1.9)
|
139
|
-
httpclient (>= 2.8.
|
143
|
+
httpclient (>= 2.8.3, < 3.a)
|
140
144
|
mini_mime (~> 1.0)
|
145
|
+
mutex_m
|
141
146
|
representable (~> 3.0)
|
142
147
|
retriable (>= 2.0, < 4.a)
|
143
|
-
rexml
|
144
148
|
google-apis-dns_v1 (0.44.0)
|
145
149
|
google-apis-core (>= 0.15.0, < 2.a)
|
146
150
|
google-apis-iamcredentials_v1 (0.21.0)
|
147
151
|
google-apis-core (>= 0.15.0, < 2.a)
|
148
|
-
google-apis-monitoring_v3 (0.
|
152
|
+
google-apis-monitoring_v3 (0.69.0)
|
149
153
|
google-apis-core (>= 0.15.0, < 2.a)
|
150
|
-
google-apis-pubsub_v1 (0.
|
154
|
+
google-apis-pubsub_v1 (0.56.0)
|
151
155
|
google-apis-core (>= 0.15.0, < 2.a)
|
152
156
|
google-apis-sqladmin_v1beta4 (0.74.0)
|
153
157
|
google-apis-core (>= 0.15.0, < 2.a)
|
154
|
-
google-apis-storage_v1 (0.
|
158
|
+
google-apis-storage_v1 (0.46.0)
|
155
159
|
google-apis-core (>= 0.15.0, < 2.a)
|
156
|
-
google-cloud-env (2.
|
160
|
+
google-cloud-env (2.2.1)
|
157
161
|
faraday (>= 1.0, < 3.a)
|
158
|
-
googleauth (1.11.
|
162
|
+
googleauth (1.11.1)
|
159
163
|
faraday (>= 1.0, < 3.a)
|
160
164
|
google-cloud-env (~> 2.1)
|
161
165
|
jwt (>= 1.4, < 3.0)
|
@@ -176,93 +180,95 @@ GEM
|
|
176
180
|
guard (~> 2.1)
|
177
181
|
guard-compat (~> 1.1)
|
178
182
|
rspec (>= 2.99.0, < 4.0)
|
179
|
-
hashdiff (1.1.
|
180
|
-
http (5.
|
183
|
+
hashdiff (1.1.1)
|
184
|
+
http (5.2.0)
|
181
185
|
addressable (~> 2.8)
|
186
|
+
base64 (~> 0.1)
|
182
187
|
http-cookie (~> 1.0)
|
183
188
|
http-form_data (~> 2.2)
|
184
|
-
llhttp-ffi (~> 0.
|
185
|
-
http-cookie (1.0.
|
189
|
+
llhttp-ffi (~> 0.5.0)
|
190
|
+
http-cookie (1.0.7)
|
186
191
|
domain_name (~> 0.5)
|
187
192
|
http-form_data (2.3.0)
|
188
|
-
httparty (0.
|
193
|
+
httparty (0.22.0)
|
194
|
+
csv
|
189
195
|
mini_mime (>= 1.0.0)
|
190
196
|
multi_xml (>= 0.5.2)
|
191
197
|
httpclient (2.8.3)
|
192
|
-
i18n (1.14.
|
198
|
+
i18n (1.14.6)
|
193
199
|
concurrent-ruby (~> 1.0)
|
194
200
|
influxdb-client (3.1.0)
|
195
|
-
jaro_winkler (1.
|
196
|
-
json (2.7.
|
197
|
-
jwt (2.
|
201
|
+
jaro_winkler (1.6.0)
|
202
|
+
json (2.7.2)
|
203
|
+
jwt (2.9.3)
|
198
204
|
base64
|
199
205
|
kramdown (2.4.0)
|
200
206
|
rexml
|
201
207
|
kramdown-parser-gfm (1.1.0)
|
202
208
|
kramdown (~> 2.0)
|
203
|
-
|
204
|
-
|
209
|
+
language_server-protocol (3.17.0.3)
|
210
|
+
lefthook (1.7.18)
|
211
|
+
listen (3.9.0)
|
205
212
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
206
213
|
rb-inotify (~> 0.9, >= 0.9.10)
|
207
|
-
llhttp-ffi (0.
|
214
|
+
llhttp-ffi (0.5.0)
|
208
215
|
ffi-compiler (~> 1.0)
|
209
216
|
rake (~> 13.0)
|
217
|
+
logger (1.6.1)
|
210
218
|
lumberjack (1.2.10)
|
211
|
-
method_source (1.
|
212
|
-
mime-types (3.
|
219
|
+
method_source (1.1.0)
|
220
|
+
mime-types (3.6.0)
|
221
|
+
logger
|
213
222
|
mime-types-data (~> 3.2015)
|
214
|
-
mime-types-data (3.2024.
|
223
|
+
mime-types-data (3.2024.1001)
|
215
224
|
mini_mime (1.1.5)
|
216
|
-
mini_portile2 (2.8.
|
217
|
-
minitest (5.
|
218
|
-
mize (0.
|
219
|
-
protocol (~> 2.0)
|
225
|
+
mini_portile2 (2.8.7)
|
226
|
+
minitest (5.25.1)
|
227
|
+
mize (0.6.0)
|
220
228
|
multi_json (1.15.0)
|
221
|
-
multi_xml (0.
|
229
|
+
multi_xml (0.7.1)
|
230
|
+
bigdecimal (~> 3.1)
|
222
231
|
mutex_m (0.2.0)
|
223
232
|
nap (1.1.0)
|
224
233
|
nenv (0.3.0)
|
225
234
|
net-http (0.4.1)
|
226
235
|
uri
|
227
|
-
|
228
|
-
nokogiri (1.16.0)
|
236
|
+
nokogiri (1.16.7)
|
229
237
|
mini_portile2 (~> 2.8.2)
|
230
238
|
racc (~> 1.4)
|
231
239
|
notiffany (0.1.3)
|
232
240
|
nenv (~> 0.1)
|
233
241
|
shellany (~> 0.0)
|
234
|
-
octokit (
|
242
|
+
octokit (9.1.0)
|
235
243
|
faraday (>= 1, < 3)
|
236
244
|
sawyer (~> 0.9)
|
237
245
|
open4 (1.3.4)
|
238
246
|
os (1.1.4)
|
239
|
-
parallel (1.
|
240
|
-
parser (3.3.0
|
247
|
+
parallel (1.26.3)
|
248
|
+
parser (3.3.5.0)
|
241
249
|
ast (~> 2.4.1)
|
242
250
|
racc
|
243
|
-
proc_to_ast (0.
|
244
|
-
coderay
|
251
|
+
proc_to_ast (0.2.0)
|
245
252
|
parser
|
253
|
+
rouge
|
246
254
|
unparser
|
247
|
-
protocol (2.0.0)
|
248
|
-
ruby_parser (~> 3.0)
|
249
255
|
pry (0.14.2)
|
250
256
|
coderay (~> 1.1)
|
251
257
|
method_source (~> 1.0)
|
252
258
|
pry-byebug (3.10.1)
|
253
259
|
byebug (~> 11.0)
|
254
260
|
pry (>= 0.13, < 0.15)
|
255
|
-
public_suffix (
|
256
|
-
racc (1.
|
257
|
-
rack (3.
|
261
|
+
public_suffix (6.0.1)
|
262
|
+
racc (1.8.1)
|
263
|
+
rack (3.1.7)
|
258
264
|
rainbow (3.1.1)
|
259
|
-
rake (13.1
|
265
|
+
rake (13.2.1)
|
260
266
|
rb-fsevent (0.11.2)
|
261
|
-
rb-inotify (0.
|
267
|
+
rb-inotify (0.11.1)
|
262
268
|
ffi (~> 1.0)
|
263
269
|
rbs (2.8.4)
|
264
270
|
rchardet (1.8.0)
|
265
|
-
regexp_parser (2.9.
|
271
|
+
regexp_parser (2.9.2)
|
266
272
|
representable (3.2.0)
|
267
273
|
declarative (< 0.1.0)
|
268
274
|
trailblazer-option (>= 0.1.1, < 0.2.0)
|
@@ -270,69 +276,67 @@ GEM
|
|
270
276
|
retriable (3.1.2)
|
271
277
|
reverse_markdown (2.1.1)
|
272
278
|
nokogiri
|
273
|
-
rexml (3.
|
274
|
-
|
275
|
-
|
276
|
-
rspec-
|
277
|
-
rspec-
|
278
|
-
|
279
|
-
|
280
|
-
|
279
|
+
rexml (3.3.8)
|
280
|
+
rouge (4.4.0)
|
281
|
+
rspec (3.13.0)
|
282
|
+
rspec-core (~> 3.13.0)
|
283
|
+
rspec-expectations (~> 3.13.0)
|
284
|
+
rspec-mocks (~> 3.13.0)
|
285
|
+
rspec-core (3.13.1)
|
286
|
+
rspec-support (~> 3.13.0)
|
287
|
+
rspec-expectations (3.13.3)
|
281
288
|
diff-lcs (>= 1.2.0, < 2.0)
|
282
|
-
rspec-support (~> 3.
|
283
|
-
rspec-mocks (3.
|
289
|
+
rspec-support (~> 3.13.0)
|
290
|
+
rspec-mocks (3.13.2)
|
284
291
|
diff-lcs (>= 1.2.0, < 2.0)
|
285
|
-
rspec-support (~> 3.
|
286
|
-
rspec-parameterized (1.0.
|
292
|
+
rspec-support (~> 3.13.0)
|
293
|
+
rspec-parameterized (1.0.2)
|
287
294
|
rspec-parameterized-core (< 2)
|
288
295
|
rspec-parameterized-table_syntax (< 2)
|
289
|
-
rspec-parameterized-core (1.0.
|
296
|
+
rspec-parameterized-core (1.0.1)
|
290
297
|
parser
|
291
|
-
proc_to_ast
|
298
|
+
proc_to_ast (>= 0.2.0)
|
292
299
|
rspec (>= 2.13, < 4)
|
293
300
|
unparser
|
294
301
|
rspec-parameterized-table_syntax (1.0.1)
|
295
302
|
binding_of_caller
|
296
303
|
rspec-parameterized-core (< 2)
|
297
|
-
rspec-support (3.
|
298
|
-
rubocop (1.
|
304
|
+
rspec-support (3.13.1)
|
305
|
+
rubocop (1.62.1)
|
299
306
|
json (~> 2.3)
|
307
|
+
language_server-protocol (>= 3.17.0)
|
300
308
|
parallel (~> 1.10)
|
301
|
-
parser (>= 3.
|
309
|
+
parser (>= 3.3.0.2)
|
302
310
|
rainbow (>= 2.2.2, < 4.0)
|
303
311
|
regexp_parser (>= 1.8, < 3.0)
|
304
312
|
rexml (>= 3.2.5, < 4.0)
|
305
|
-
rubocop-ast (>= 1.
|
313
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
306
314
|
ruby-progressbar (~> 1.7)
|
307
315
|
unicode-display_width (>= 2.4.0, < 3.0)
|
308
|
-
rubocop-ast (1.
|
309
|
-
parser (>= 3.
|
310
|
-
rubocop-capybara (2.
|
316
|
+
rubocop-ast (1.32.3)
|
317
|
+
parser (>= 3.3.1.0)
|
318
|
+
rubocop-capybara (2.21.0)
|
311
319
|
rubocop (~> 1.41)
|
312
320
|
rubocop-factory_bot (2.25.1)
|
313
321
|
rubocop (~> 1.41)
|
314
|
-
rubocop-graphql (
|
315
|
-
rubocop (>=
|
322
|
+
rubocop-graphql (1.5.4)
|
323
|
+
rubocop (>= 1.50, < 2)
|
316
324
|
rubocop-performance (1.20.2)
|
317
325
|
rubocop (>= 1.48.1, < 2.0)
|
318
326
|
rubocop-ast (>= 1.30.0, < 2.0)
|
319
|
-
rubocop-rails (2.
|
327
|
+
rubocop-rails (2.24.1)
|
320
328
|
activesupport (>= 4.2.0)
|
321
329
|
rack (>= 1.1)
|
322
330
|
rubocop (>= 1.33.0, < 2.0)
|
323
|
-
rubocop-ast (>= 1.
|
324
|
-
rubocop-rspec (2.
|
331
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
332
|
+
rubocop-rspec (2.27.1)
|
325
333
|
rubocop (~> 1.40)
|
326
334
|
rubocop-capybara (~> 2.17)
|
327
335
|
rubocop-factory_bot (~> 2.22)
|
328
336
|
ruby-progressbar (1.13.0)
|
329
|
-
ruby_parser (3.21.0)
|
330
|
-
racc (~> 1.5)
|
331
|
-
sexp_processor (~> 4.16)
|
332
337
|
sawyer (0.9.2)
|
333
338
|
addressable (>= 2.3.5)
|
334
339
|
faraday (>= 0.17.3, < 3)
|
335
|
-
sexp_processor (4.17.1)
|
336
340
|
shellany (0.0.1)
|
337
341
|
signet (0.19.0)
|
338
342
|
addressable (~> 2.8)
|
@@ -346,7 +350,7 @@ GEM
|
|
346
350
|
simplecov-cobertura (2.1.0)
|
347
351
|
rexml
|
348
352
|
simplecov (~> 0.19)
|
349
|
-
simplecov-html (0.
|
353
|
+
simplecov-html (0.13.1)
|
350
354
|
simplecov_json_formatter (0.1.4)
|
351
355
|
solargraph (0.50.0)
|
352
356
|
backport (~> 1.2)
|
@@ -368,26 +372,27 @@ GEM
|
|
368
372
|
table_print (1.5.7)
|
369
373
|
terminal-table (3.0.2)
|
370
374
|
unicode-display_width (>= 1.1.1, < 3)
|
371
|
-
thor (1.3.
|
372
|
-
tilt (2.
|
373
|
-
timecop (0.9.
|
374
|
-
tins (1.
|
375
|
+
thor (1.3.2)
|
376
|
+
tilt (2.4.0)
|
377
|
+
timecop (0.9.10)
|
378
|
+
tins (1.34.0)
|
379
|
+
bigdecimal
|
375
380
|
sync
|
376
381
|
trailblazer-option (0.1.2)
|
377
382
|
tzinfo (2.0.6)
|
378
383
|
concurrent-ruby (~> 1.0)
|
379
384
|
uber (0.1.0)
|
380
|
-
unicode-display_width (2.
|
381
|
-
unparser (0.6.
|
385
|
+
unicode-display_width (2.6.0)
|
386
|
+
unparser (0.6.15)
|
382
387
|
diff-lcs (~> 1.3)
|
383
|
-
parser (>= 3.
|
384
|
-
uri (0.13.
|
388
|
+
parser (>= 3.3.0)
|
389
|
+
uri (0.13.1)
|
385
390
|
webmock (3.7.0)
|
386
391
|
addressable (>= 2.3.6)
|
387
392
|
crack (>= 0.3.2)
|
388
393
|
hashdiff (>= 0.4.0, < 2.0.0)
|
389
|
-
yard (0.9.
|
390
|
-
zeitwerk (2.6.
|
394
|
+
yard (0.9.37)
|
395
|
+
zeitwerk (2.6.18)
|
391
396
|
|
392
397
|
PLATFORMS
|
393
398
|
ruby
|
@@ -395,7 +400,7 @@ PLATFORMS
|
|
395
400
|
DEPENDENCIES
|
396
401
|
climate_control (~> 1.2)
|
397
402
|
gitlab-dangerfiles (~> 3.8)
|
398
|
-
gitlab-styles (~>
|
403
|
+
gitlab-styles (~> 12.0)
|
399
404
|
gitlab_quality-test_tooling!
|
400
405
|
guard-rspec (~> 4.7)
|
401
406
|
lefthook (~> 1.3)
|
@@ -409,4 +414,4 @@ DEPENDENCIES
|
|
409
414
|
webmock (= 3.7.0)
|
410
415
|
|
411
416
|
BUNDLED WITH
|
412
|
-
2.5.
|
417
|
+
2.5.19
|
@@ -11,7 +11,7 @@ module GitlabQuality
|
|
11
11
|
# - Find issue by test hash or create a new issue if no issue was found
|
12
12
|
# - Add a failure report in the "Failure reports" note
|
13
13
|
class FailedTestIssue < HealthProblemReporter
|
14
|
-
IDENTITY_LABELS = ['test', 'automation:bot-authored'].freeze
|
14
|
+
IDENTITY_LABELS = ['test', 'test-health:failures', 'automation:bot-authored'].freeze
|
15
15
|
NEW_ISSUE_LABELS = Set.new(['type::maintenance', 'failure::new', 'priority::3', 'severity::3', *IDENTITY_LABELS]).freeze
|
16
16
|
REPORT_SECTION_HEADER = '#### Failure reports'
|
17
17
|
|
@@ -29,6 +29,17 @@ module GitlabQuality
|
|
29
29
|
@max_diff_ratio = max_diff_ratio.to_f
|
30
30
|
end
|
31
31
|
|
32
|
+
def most_recent_report_date_for_issue(issue_iid:)
|
33
|
+
reports_discussion = existing_reports_discussion(issue_iid: issue_iid)
|
34
|
+
return unless reports_discussion
|
35
|
+
|
36
|
+
# We're skipping the first note of the discussion as this is the "non-collapsible note", aka
|
37
|
+
# the "header note", which doesn't contain any stack trace.
|
38
|
+
reports_discussion.notes[1..].filter_map do |reports_note|
|
39
|
+
most_recent_report_from_reports_note(reports_note)&.report_date
|
40
|
+
end.max
|
41
|
+
end
|
42
|
+
|
32
43
|
private
|
33
44
|
|
34
45
|
attr_reader :base_issue_labels, :max_diff_ratio
|
@@ -37,12 +48,57 @@ module GitlabQuality
|
|
37
48
|
'failed'
|
38
49
|
end
|
39
50
|
|
40
|
-
|
41
|
-
|
51
|
+
# We redefine this method, because we are reporting failed tests in a discussion instead of a comment.
|
52
|
+
#
|
53
|
+
# We do this because a test could fail for many different reasons, so we report
|
54
|
+
# different test failures in the same discussion, under different threads.
|
55
|
+
def add_report_to_issue(issue:, test:, related_issues:)
|
56
|
+
reports_discussion = find_or_create_reports_discussion(issue_iid: issue.iid)
|
57
|
+
current_reports_note = find_failure_discussion_note(issue: issue, test: test, reports_discussion: reports_discussion)
|
58
|
+
|
59
|
+
new_reports_list = new_reports_list(current_reports_note: current_reports_note, test: test)
|
60
|
+
note_body = new_note_body(
|
61
|
+
new_reports_list: new_reports_list,
|
62
|
+
related_issues: related_issues,
|
63
|
+
options: {
|
64
|
+
reports_discussion: reports_discussion,
|
65
|
+
test: test
|
66
|
+
}
|
67
|
+
)
|
68
|
+
|
69
|
+
if current_reports_note
|
70
|
+
gitlab.edit_issue_note(
|
71
|
+
issue_iid: issue.iid,
|
72
|
+
note_id: current_reports_note.id,
|
73
|
+
note: note_body
|
74
|
+
)
|
75
|
+
else
|
76
|
+
gitlab.add_note_to_issue_discussion_as_thread(
|
77
|
+
iid: issue.iid,
|
78
|
+
discussion_id: reports_discussion.id,
|
79
|
+
note: note_body
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def find_or_create_reports_discussion(issue_iid:)
|
85
|
+
reports_discussion = existing_reports_discussion(issue_iid: issue_iid)
|
86
|
+
return reports_discussion if reports_discussion
|
87
|
+
|
88
|
+
gitlab.create_issue_discussion(iid: issue_iid, note: report_section_header)
|
42
89
|
end
|
43
90
|
|
44
|
-
def
|
45
|
-
|
91
|
+
def existing_reports_discussion(issue_iid:)
|
92
|
+
gitlab.find_issue_discussions(iid: issue_iid).find do |discussion|
|
93
|
+
next if discussion.individual_note
|
94
|
+
next unless discussion.notes.first
|
95
|
+
|
96
|
+
discussion.notes.first.body.start_with?(report_section_header)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_is_applicable?(test)
|
101
|
+
test.status == 'failed'
|
46
102
|
end
|
47
103
|
|
48
104
|
def identity_labels
|
@@ -57,8 +113,30 @@ module GitlabQuality
|
|
57
113
|
"##### Stack trace\n\n```\n#{test.full_stacktrace}\n```"
|
58
114
|
end
|
59
115
|
|
60
|
-
def health_problem_status_label_quick_action(reports_list)
|
61
|
-
|
116
|
+
def health_problem_status_label_quick_action(reports_list, options: {})
|
117
|
+
quick_actions = []
|
118
|
+
quick_actions << '/label ~"priority::1" ~"severity::1"' if reports_list.spiked_in_short_period?
|
119
|
+
|
120
|
+
# We can have several kinds of failures for a single test.
|
121
|
+
# We want to count all the failures that are reported for a test.
|
122
|
+
reports_notes = options[:reports_discussion].notes[1..] || []
|
123
|
+
all_reports_count = reports_notes.sum do |report_note|
|
124
|
+
new_reports_list(current_reports_note: report_note, test: options[:test]).reports_count
|
125
|
+
end
|
126
|
+
|
127
|
+
quick_actions <<
|
128
|
+
case all_reports_count
|
129
|
+
when 149..Float::INFINITY
|
130
|
+
'/label ~"failed-tests::1"'
|
131
|
+
when 137..148
|
132
|
+
'/label ~"failed-tests::2"'
|
133
|
+
when 130..136
|
134
|
+
'/label ~"failed-tests::3"'
|
135
|
+
else
|
136
|
+
'/label ~"failed-tests::4"'
|
137
|
+
end
|
138
|
+
|
139
|
+
quick_actions.join("\n")
|
62
140
|
end
|
63
141
|
|
64
142
|
def up_to_date_labels(test:, issue: nil, new_labels: Set.new)
|
@@ -12,7 +12,7 @@ module GitlabQuality
|
|
12
12
|
# - Find issue by test hash or create a new issue if no issue was found
|
13
13
|
# - Add a flakiness report in the "Flakiness reports" note
|
14
14
|
class FlakyTestIssue < HealthProblemReporter
|
15
|
-
IDENTITY_LABELS = ['test', 'failure::flaky-test', 'automation:bot-authored'].freeze
|
15
|
+
IDENTITY_LABELS = ['test', 'failure::flaky-test', 'test-health:pass-after-retry', 'automation:bot-authored'].freeze
|
16
16
|
NEW_ISSUE_LABELS = Set.new(['type::maintenance', 'priority::3', 'severity::3', *IDENTITY_LABELS]).freeze
|
17
17
|
REPORT_SECTION_HEADER = '### Flakiness reports'
|
18
18
|
REPORTS_DOCUMENTATION = <<~DOC
|
@@ -52,7 +52,7 @@ module GitlabQuality
|
|
52
52
|
REPORTS_DOCUMENTATION
|
53
53
|
end
|
54
54
|
|
55
|
-
def health_problem_status_label_quick_action(reports_list)
|
55
|
+
def health_problem_status_label_quick_action(reports_list, **)
|
56
56
|
case reports_list.reports_count
|
57
57
|
when 399..Float::INFINITY
|
58
58
|
'/label ~"flakiness::1"'
|
@@ -33,7 +33,7 @@ module GitlabQuality
|
|
33
33
|
issue = gitlab.create_issue(
|
34
34
|
title: "#{Time.now.strftime('%Y-%m-%d')} Test session report | #{Runtime::Env.qa_run_type}",
|
35
35
|
description: generate_description(tests),
|
36
|
-
labels: ['Quality', 'QA', 'triage report', pipeline_name_label],
|
36
|
+
labels: ['automation:bot-authored', 'Quality', 'QA', 'triage report', pipeline_name_label],
|
37
37
|
confidential: confidential
|
38
38
|
)
|
39
39
|
|
@@ -11,7 +11,7 @@ module GitlabQuality
|
|
11
11
|
# - Takes a project where flaky test issues should be created
|
12
12
|
# - For every passed test in the report:
|
13
13
|
# - Find issue by test hash or create a new issue if no issue was found
|
14
|
-
# - Add a
|
14
|
+
# - Add a Failures/Flakiness/Slowness/... report in the "<Failures/Flakiness/Slowness/...> reports" note
|
15
15
|
class HealthProblemReporter < ReportAsIssue
|
16
16
|
include Concerns::GroupAndCategoryLabels
|
17
17
|
include Concerns::IssueReports
|
@@ -25,11 +25,10 @@ module GitlabQuality
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def most_recent_report_date_for_issue(issue_iid:)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
28
|
+
reports_note = existing_reports_note(issue_iid: issue_iid)
|
29
|
+
return unless reports_note
|
30
|
+
|
31
|
+
most_recent_report_from_reports_note(reports_note)&.report_date
|
33
32
|
end
|
34
33
|
|
35
34
|
private
|
@@ -42,10 +41,6 @@ module GitlabQuality
|
|
42
41
|
false
|
43
42
|
end
|
44
43
|
|
45
|
-
def report_in_discussion?
|
46
|
-
false
|
47
|
-
end
|
48
|
-
|
49
44
|
def identity_labels
|
50
45
|
[]
|
51
46
|
end
|
@@ -58,15 +53,11 @@ module GitlabQuality
|
|
58
53
|
''
|
59
54
|
end
|
60
55
|
|
61
|
-
def find_failure_discussion_note(_issue:, _test:, _reports_discussion:)
|
62
|
-
nil
|
63
|
-
end
|
64
|
-
|
65
56
|
def reports_extra_content(_test)
|
66
57
|
''
|
67
58
|
end
|
68
59
|
|
69
|
-
def health_problem_status_label_quick_action(
|
60
|
+
def health_problem_status_label_quick_action(*)
|
70
61
|
''
|
71
62
|
end
|
72
63
|
|
@@ -74,24 +65,6 @@ module GitlabQuality
|
|
74
65
|
found_label
|
75
66
|
end
|
76
67
|
|
77
|
-
def most_recent_report_from_discussion(issue_iid:)
|
78
|
-
reports_discussion = existing_reports_discussion(issue_iid: issue_iid)
|
79
|
-
return unless reports_discussion
|
80
|
-
|
81
|
-
# We're skipping the first note of the discussion as this is the "non-collapsible note", aka
|
82
|
-
# the "header note", which doesn't contain any stack trace.
|
83
|
-
reports_discussion.notes[1..].filter_map do |reports_note|
|
84
|
-
most_recent_report_from_reports_note(reports_note)&.report_date
|
85
|
-
end.max
|
86
|
-
end
|
87
|
-
|
88
|
-
def most_recent_report_from_note(issue_iid:)
|
89
|
-
reports_note = existing_reports_note(issue_iid: issue_iid)
|
90
|
-
return unless reports_note
|
91
|
-
|
92
|
-
most_recent_report_from_reports_note(reports_note)&.report_date
|
93
|
-
end
|
94
|
-
|
95
68
|
def most_recent_report_from_reports_note(reports_note)
|
96
69
|
@most_recent_report_from_reports_note ||= report_lines(reports_note&.body.to_s).first
|
97
70
|
end
|
@@ -138,24 +111,11 @@ module GitlabQuality
|
|
138
111
|
end
|
139
112
|
end
|
140
113
|
|
141
|
-
def add_report_to_issue(issue:, test:, related_issues:)
|
142
|
-
current_reports_note =
|
143
|
-
if report_in_discussion?
|
144
|
-
reports_discussion = find_or_create_reports_discussion(issue_iid: issue.iid)
|
145
|
-
|
146
|
-
find_failure_discussion_note(issue: issue, test: test, reports_discussion: reports_discussion)
|
147
|
-
else
|
148
|
-
existing_reports_note(issue_iid: issue.iid)
|
149
|
-
end
|
114
|
+
def add_report_to_issue(issue:, test:, related_issues:)
|
115
|
+
current_reports_note = existing_reports_note(issue_iid: issue.iid)
|
150
116
|
|
151
|
-
new_reports_list =
|
152
|
-
|
153
|
-
note_body = [
|
154
|
-
new_reports_list.to_s,
|
155
|
-
health_problem_status_label_quick_action(new_reports_list),
|
156
|
-
identity_labels_quick_action,
|
157
|
-
relate_issues_quick_actions(related_issues)
|
158
|
-
].join("\n")
|
117
|
+
new_reports_list = new_reports_list(current_reports_note: current_reports_note, test: test)
|
118
|
+
note_body = new_note_body(new_reports_list: new_reports_list, related_issues: related_issues)
|
159
119
|
|
160
120
|
if current_reports_note
|
161
121
|
gitlab.edit_issue_note(
|
@@ -163,31 +123,31 @@ module GitlabQuality
|
|
163
123
|
note_id: current_reports_note.id,
|
164
124
|
note: note_body
|
165
125
|
)
|
166
|
-
elsif report_in_discussion?
|
167
|
-
gitlab.add_note_to_issue_discussion_as_thread(
|
168
|
-
iid: issue.iid,
|
169
|
-
discussion_id: reports_discussion.id,
|
170
|
-
note: note_body
|
171
|
-
)
|
172
126
|
else
|
173
127
|
gitlab.create_issue_note(iid: issue.iid, note: note_body)
|
174
128
|
end
|
175
129
|
end
|
176
130
|
|
177
|
-
def
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
131
|
+
def new_reports_list(current_reports_note:, test:)
|
132
|
+
increment_reports(
|
133
|
+
current_reports_content: current_reports_note&.body.to_s,
|
134
|
+
test: test,
|
135
|
+
reports_section_header: report_section_header,
|
136
|
+
item_extra_content: item_extra_content(test),
|
137
|
+
reports_extra_content: reports_extra_content(test)
|
138
|
+
)
|
182
139
|
end
|
183
140
|
|
184
|
-
def
|
185
|
-
|
186
|
-
next if discussion.individual_note
|
187
|
-
next unless discussion.notes.first
|
141
|
+
def new_note_body(new_reports_list:, related_issues:, options: {})
|
142
|
+
report = new_reports_list
|
188
143
|
|
189
|
-
|
190
|
-
|
144
|
+
quick_actions = [
|
145
|
+
health_problem_status_label_quick_action(new_reports_list, options: options),
|
146
|
+
identity_labels_quick_action,
|
147
|
+
relate_issues_quick_actions(related_issues)
|
148
|
+
]
|
149
|
+
|
150
|
+
quick_actions.unshift(report).join("\n")
|
191
151
|
end
|
192
152
|
|
193
153
|
def existing_reports_note(issue_iid:)
|
@@ -196,16 +156,6 @@ module GitlabQuality
|
|
196
156
|
end
|
197
157
|
end
|
198
158
|
|
199
|
-
def add_report_for_test(current_reports_content:, test:)
|
200
|
-
increment_reports(
|
201
|
-
current_reports_content: current_reports_content,
|
202
|
-
test: test,
|
203
|
-
reports_section_header: report_section_header,
|
204
|
-
item_extra_content: item_extra_content(test),
|
205
|
-
reports_extra_content: reports_extra_content(test)
|
206
|
-
)
|
207
|
-
end
|
208
|
-
|
209
159
|
def found_label
|
210
160
|
if ENV.key?('CI_MERGE_REQUEST_IID')
|
211
161
|
FOUND_IN_MR_LABEL
|
@@ -16,7 +16,10 @@ module GitlabQuality
|
|
16
16
|
class KnapsackReportIssue < ReportAsIssue
|
17
17
|
include Concerns::GroupAndCategoryLabels
|
18
18
|
|
19
|
-
NEW_ISSUE_LABELS = Set.new([
|
19
|
+
NEW_ISSUE_LABELS = Set.new([
|
20
|
+
'test', 'automation::bot-authored', 'type::maintenance', 'maintenance::performance',
|
21
|
+
'priority::3', 'severity::3', 'knapsack_report'
|
22
|
+
]).freeze
|
20
23
|
SEARCH_LABELS = %w[test maintenance::performance knapsack_report].freeze
|
21
24
|
JOB_TIMEOUT_EPIC_URL = 'https://gitlab.com/groups/gitlab-org/quality/engineering-productivity/-/epics/19'
|
22
25
|
|
@@ -23,7 +23,7 @@ module GitlabQuality
|
|
23
23
|
FAILURE_STACKTRACE_REGEX = %r{(?:(?:.*Failure/Error:(?<stacktrace>.+))|(?<stacktrace>.+))}m
|
24
24
|
ISSUE_STACKTRACE_REGEX = /### Stack trace\s*(```)#{FAILURE_STACKTRACE_REGEX}(```)\n*\n###/m
|
25
25
|
|
26
|
-
NEW_ISSUE_LABELS = Set.new(%w[test failure::new priority::2]).freeze
|
26
|
+
NEW_ISSUE_LABELS = Set.new(%w[test failure::new priority::2 automation:bot-authored]).freeze
|
27
27
|
SCREENSHOT_IGNORED_ERRORS = ['500 Internal Server Error', 'fabricate_via_api!', 'Error Code 500'].freeze
|
28
28
|
|
29
29
|
MultipleIssuesFound = Class.new(StandardError)
|
@@ -10,8 +10,8 @@ module GitlabQuality
|
|
10
10
|
# - Find issue by title (with test description or test file)
|
11
11
|
# - Add test metadata, duration to the issue with group and category labels
|
12
12
|
class SlowTestIssue < HealthProblemReporter
|
13
|
-
IDENTITY_LABELS = ['test', 'rspec:slow test', 'rspec profiling', 'automation:bot-authored'].freeze
|
14
|
-
NEW_ISSUE_LABELS = Set.new(['test', 'type::maintenance', 'maintenance::performance', 'priority::3', 'severity::3']).freeze
|
13
|
+
IDENTITY_LABELS = ['test', 'rspec:slow test', 'test-health:slow', 'rspec profiling', 'automation:bot-authored'].freeze
|
14
|
+
NEW_ISSUE_LABELS = Set.new(['test', 'type::maintenance', 'maintenance::performance', 'priority::3', 'severity::3', *IDENTITY_LABELS]).freeze
|
15
15
|
REPORT_SECTION_HEADER = '### Slowness reports'
|
16
16
|
REPORTS_DOCUMENTATION = <<~DOC
|
17
17
|
Slow tests were detected, please see the [test speed best practices guide](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#test-speed)
|
@@ -42,7 +42,7 @@ module GitlabQuality
|
|
42
42
|
REPORTS_DOCUMENTATION
|
43
43
|
end
|
44
44
|
|
45
|
-
def health_problem_status_label_quick_action(reports_list)
|
45
|
+
def health_problem_status_label_quick_action(reports_list, **)
|
46
46
|
case reports_list.reports_count
|
47
47
|
when 6099..Float::INFINITY
|
48
48
|
'/label ~"slowness::1"'
|
@@ -5,8 +5,13 @@ module GitlabQuality
|
|
5
5
|
module TestResult
|
6
6
|
class BaseTestResult
|
7
7
|
IGNORED_FAILURES = [
|
8
|
-
|
9
|
-
|
8
|
+
"Net::ReadTimeout",
|
9
|
+
"403 Forbidden - Your account has been blocked",
|
10
|
+
"API failed (502) with `GitLab is not responding",
|
11
|
+
"unexpected token at 'GitLab is not responding'",
|
12
|
+
"GitLab: Internal API error (502).",
|
13
|
+
"could not be found (502)",
|
14
|
+
"Error reference number: 502"
|
10
15
|
].freeze
|
11
16
|
|
12
17
|
SHARED_EXAMPLES_CALLERS = %w[include_examples it_behaves_like].freeze
|
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:
|
4
|
+
version: 2.0.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-
|
11
|
+
date: 2024-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '12.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '12.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard-rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -230,16 +230,22 @@ dependencies:
|
|
230
230
|
name: gitlab
|
231
231
|
requirement: !ruby/object:Gem::Requirement
|
232
232
|
requirements:
|
233
|
-
- - "
|
233
|
+
- - ">="
|
234
234
|
- !ruby/object:Gem::Version
|
235
235
|
version: '4.19'
|
236
|
+
- - "<"
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '6.0'
|
236
239
|
type: :runtime
|
237
240
|
prerelease: false
|
238
241
|
version_requirements: !ruby/object:Gem::Requirement
|
239
242
|
requirements:
|
240
|
-
- - "
|
243
|
+
- - ">="
|
241
244
|
- !ruby/object:Gem::Version
|
242
245
|
version: '4.19'
|
246
|
+
- - "<"
|
247
|
+
- !ruby/object:Gem::Version
|
248
|
+
version: '6.0'
|
243
249
|
- !ruby/object:Gem::Dependency
|
244
250
|
name: http
|
245
251
|
requirement: !ruby/object:Gem::Requirement
|
@@ -527,7 +533,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
527
533
|
requirements:
|
528
534
|
- - ">="
|
529
535
|
- !ruby/object:Gem::Version
|
530
|
-
version:
|
536
|
+
version: 3.1.0
|
531
537
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
532
538
|
requirements:
|
533
539
|
- - ">="
|