gitlab_quality-test_tooling 1.26.0 → 1.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6895c7a00b6414c417fdadfe15fc030d316c1a6ecac135d5a3b281748d321926
4
- data.tar.gz: d9c8dcf80524df5f22c3cc32439f2abaf5f148d061c46a1b8f74a6c40aaa2a21
3
+ metadata.gz: 34edb6377d3304f4b061a5704e9ba865cd550209c7fefda3c66b6734f2b95ce5
4
+ data.tar.gz: e00f10eaf9690f803168a86da44417b5bdc02f074773819f6deb6fa466bef23e
5
5
  SHA512:
6
- metadata.gz: c6305ab3fcdf665926a8a1180ffd1308611e39ef53442d584e1797e8caf0115527bac36376b668ee89473d94f86ee160eeeeeaf2a72dca8348a96b44c375f233
7
- data.tar.gz: bf77f8ce83ebebb939925479593cb7c21b9f2f4a8ac564da009605d509ec4e56c4eb68b73fbc156b05567c9c0d5603b7ac2552f77c615b1b19fa2e5e19ad568a
6
+ metadata.gz: 3ced20afebe7dbdcc5e47fcc3c864db514bd2d2b4920d6085683c201444243e5ec023cde39c7d333d28acd6a2539f35dfe6af21ee881d2442f48e5c4335b164c
7
+ data.tar.gz: 9d279b982fb6438e064db0336b532fbd0ba7e803e16b65e678576fca037120cc7a327bba21d6ab3400122e6aee18060e900eb14d1063aed77f61d57df73f8cab
data/Gemfile.lock CHANGED
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab_quality-test_tooling (1.26.0)
5
- activesupport (>= 6.1, < 7.2)
4
+ gitlab_quality-test_tooling (1.27.1)
5
+ activesupport (>= 7.0, < 7.2)
6
6
  amatch (~> 0.4.1)
7
7
  gitlab (~> 4.19)
8
8
  http (~> 5.0)
9
+ influxdb-client (~> 3.1)
9
10
  nokogiri (~> 1.10)
10
11
  parallel (>= 1, < 2)
11
12
  rainbow (>= 3, < 4)
@@ -35,7 +36,7 @@ GEM
35
36
  backport (1.2.0)
36
37
  base64 (0.2.0)
37
38
  benchmark (0.3.0)
38
- bigdecimal (3.1.6)
39
+ bigdecimal (3.1.8)
39
40
  binding_of_caller (1.0.0)
40
41
  debug_inspector (>= 0.0.1)
41
42
  byebug (11.1.3)
@@ -128,7 +129,7 @@ GEM
128
129
  httparty (0.21.0)
129
130
  mini_mime (>= 1.0.0)
130
131
  multi_xml (>= 0.5.2)
131
- i18n (1.14.4)
132
+ i18n (1.14.5)
132
133
  concurrent-ruby (~> 1.0)
133
134
  influxdb-client (3.1.0)
134
135
  jaro_winkler (1.5.6)
@@ -148,7 +149,7 @@ GEM
148
149
  method_source (1.0.0)
149
150
  mini_mime (1.1.5)
150
151
  mini_portile2 (2.8.5)
151
- minitest (5.22.2)
152
+ minitest (5.23.0)
152
153
  mize (0.4.1)
153
154
  protocol (~> 2.0)
154
155
  multi_xml (0.6.0)
@@ -313,13 +314,11 @@ PLATFORMS
313
314
  ruby
314
315
 
315
316
  DEPENDENCIES
316
- activesupport (>= 6.1, < 7.2)
317
317
  climate_control (~> 1.2)
318
318
  gitlab-dangerfiles (~> 3.8)
319
319
  gitlab-styles (~> 10.0)
320
320
  gitlab_quality-test_tooling!
321
321
  guard-rspec (~> 4.7)
322
- influxdb-client (~> 3.1)
323
322
  lefthook (~> 1.3)
324
323
  pry-byebug (= 3.10.1)
325
324
  rake (~> 13.0)
@@ -29,15 +29,10 @@ module GitlabQuality
29
29
  MultipleNotesFound = Class.new(StandardError)
30
30
 
31
31
  def initialize(
32
- token:,
33
- input_files:,
34
32
  base_issue_labels: nil,
35
- dry_run: false,
36
- related_issues_file: nil,
37
- project: nil,
38
33
  max_diff_ratio: DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION,
39
- **_kwargs)
40
- super(token: token, input_files: input_files, related_issues_file: related_issues_file, project: project, dry_run: dry_run)
34
+ **kwargs)
35
+ super(**kwargs)
41
36
 
42
37
  @base_issue_labels = Set.new(base_issue_labels)
43
38
  @max_diff_ratio = max_diff_ratio.to_f
@@ -64,7 +59,13 @@ module GitlabQuality
64
59
  puts " => Reporting failure for test '#{test.name}'..."
65
60
 
66
61
  issues = find_issues_by_hash(test_hash(test), state: 'opened', labels: SEARCH_LABELS)
67
- issues << create_issue(test) if issues.empty?
62
+
63
+ if issues.empty?
64
+ issues << create_issue(test)
65
+ else
66
+ # Keep issues description up-to-date
67
+ update_issues(issues, test)
68
+ end
68
69
 
69
70
  update_reports(issues, test)
70
71
  collect_issues(test, issues)
@@ -27,14 +27,9 @@ module GitlabQuality
27
27
  DOC
28
28
 
29
29
  def initialize(
30
- token:,
31
- input_files:,
32
30
  base_issue_labels: nil,
33
- confidential: false,
34
- dry_run: false,
35
- project: nil,
36
- **_kwargs)
37
- super(token: token, input_files: input_files, project: project, confidential: confidential, dry_run: dry_run)
31
+ **kwargs)
32
+ super(**kwargs)
38
33
 
39
34
  @base_issue_labels = Set.new(base_issue_labels)
40
35
  end
@@ -60,7 +55,13 @@ module GitlabQuality
60
55
  puts " => Reporting flakiness for test '#{test.name}'..."
61
56
 
62
57
  issues = find_issues_by_hash(test_hash(test), state: 'opened', labels: SEARCH_LABELS)
63
- issues << create_issue(test) if issues.empty?
58
+
59
+ if issues.empty?
60
+ issues << create_issue(test)
61
+ else
62
+ # Keep issues description up-to-date
63
+ update_issues(issues, test)
64
+ end
64
65
 
65
66
  update_reports(issues, test)
66
67
  collect_issues(test, issues)
@@ -51,17 +51,19 @@ module GitlabQuality
51
51
 
52
52
  def new_issue_description(test)
53
53
  <<~DESCRIPTION
54
- ### Test metadata (don't modify)
54
+ ### Test metadata
55
55
 
56
+ <!-- Don't modify this section as it's auto-generated -->
56
57
  | Field | Value |
57
58
  | ------ | ------ |
58
59
  | File URL | #{test.test_file_link} |
59
60
  | Filename | `#{test.file}` |
60
61
  | Description | `#{test.name}` |
61
- | Test level | #{test.level} |
62
+ | Test level | `#{test.level}` |
62
63
  | Hash | `#{test_hash(test)}` |
63
- | Expected duration | < #{test.max_duration_for_test} seconds |
64
+ | Max expected duration | < #{test.max_duration_for_test} seconds |
64
65
  #{"| Test case | #{test.testcase} |" if test.testcase}
66
+ <!-- Don't modify this section as it's auto-generated -->
65
67
  DESCRIPTION
66
68
  end
67
69
 
@@ -111,6 +113,21 @@ module GitlabQuality
111
113
  end
112
114
  end
113
115
 
116
+ def update_issues(issues, test)
117
+ issues.each do |issue|
118
+ update_issue(issue, test)
119
+ end
120
+ end
121
+
122
+ def update_issue(issue, test)
123
+ issue_attrs = {
124
+ description: new_issue_description(test)
125
+ }
126
+ return if issue.description == issue_attrs[:description]
127
+
128
+ gitlab.edit_issue(iid: issue.iid, options: issue_attrs)
129
+ end
130
+
114
131
  def issue_labels(issue)
115
132
  issue&.labels&.to_set || Set.new
116
133
  end
@@ -45,7 +45,13 @@ module GitlabQuality
45
45
  puts " => Reporting slowness for test '#{test.name}'..."
46
46
 
47
47
  issues = find_issues_by_hash(test_hash(test), state: 'opened', labels: SEARCH_LABELS)
48
- issues << create_issue(test) if issues.empty?
48
+
49
+ if issues.empty?
50
+ issues << create_issue(test)
51
+ else
52
+ # Keep issues description up-to-date
53
+ update_issues(issues, test)
54
+ end
49
55
 
50
56
  update_reports(issues, test)
51
57
  collect_issues(test, issues)
@@ -81,9 +81,7 @@ module GitlabQuality
81
81
  live_envs = %w[staging staging-canary staging-ref canary preprod production]
82
82
  return unless live_envs.include?(ci_project_name)
83
83
 
84
- test_subset = if env_var_value_if_defined('NO_ADMIN') == 'true'
85
- 'sanity-no-admin'
86
- elsif env_var_value_if_defined('SMOKE_ONLY') == 'true'
84
+ test_subset = if env_var_value_if_defined('SMOKE_ONLY') == 'true'
87
85
  'sanity'
88
86
  else
89
87
  'full'
@@ -38,7 +38,11 @@ module GitlabQuality
38
38
  console_log = console_logger(source: source, level: Env.log_level)
39
39
  file_log = file_logger(source: source, path: log_path)
40
40
 
41
- ActiveSupport::BroadcastLogger.new(console_log, file_log, file_log)
41
+ if ActiveSupport.const_defined?(:BroadcastLogger) # only available in ActiveSupport >= 7.1.0
42
+ ActiveSupport::BroadcastLogger.new(console_log, file_log, file_log)
43
+ else
44
+ console_log.extend(ActiveSupport::Logger.broadcast(file_log))
45
+ end
42
46
  end
43
47
  end
44
48
 
@@ -5,19 +5,19 @@ require "singleton"
5
5
  module GitlabQuality
6
6
  module TestTooling
7
7
  module TestMetricsExporter
8
- class << self
9
- def configuration
10
- Config.instance
11
- end
12
-
13
- def configure
14
- yield(configuration)
15
- end
16
- end
17
-
18
8
  class Config
19
9
  include Singleton
20
10
 
11
+ class << self
12
+ def configuration
13
+ Config.instance
14
+ end
15
+
16
+ def configure
17
+ yield(configuration)
18
+ end
19
+ end
20
+
21
21
  attr_accessor :influxdb_url,
22
22
  :influxdb_token,
23
23
  :influxdb_bucket,
@@ -6,8 +6,8 @@ module GitlabQuality
6
6
  class Formatter < RSpec::Core::Formatters::BaseFormatter
7
7
  RSpec::Core::Formatters.register(self, :stop)
8
8
 
9
- def stop(_notification)
10
- setup_test_metrics_exporter
9
+ def stop(notification)
10
+ setup_test_metrics_exporter(notification.examples)
11
11
 
12
12
  log_test_metrics.push_test_metrics(
13
13
  custom_keys_tags: config.custom_keys_tags,
@@ -29,9 +29,9 @@ module GitlabQuality
29
29
  Config.configuration
30
30
  end
31
31
 
32
- def setup_test_metrics_exporter
32
+ def setup_test_metrics_exporter(examples)
33
33
  @log_test_metrics = LogTestMetrics.new(
34
- examples: notification.examples,
34
+ examples: examples,
35
35
  influxdb_url: config.influxdb_url,
36
36
  influxdb_token: config.influxdb_token,
37
37
  influxdb_bucket: config.influxdb_bucket,
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'influxdb-client'
4
+
3
5
  module GitlabQuality
4
6
  module TestTooling
5
7
  module TestMetricsExporter
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GitlabQuality
4
4
  module TestTooling
5
- VERSION = "1.26.0"
5
+ VERSION = "1.27.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,35 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_quality-test_tooling
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.0
4
+ version: 1.27.1
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-05-16 00:00:00.000000000 Z
11
+ date: 2024-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '6.1'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '7.2'
23
- type: :development
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '6.1'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '7.2'
33
13
  - !ruby/object:Gem::Dependency
34
14
  name: climate_control
35
15
  requirement: !ruby/object:Gem::Requirement
@@ -86,20 +66,6 @@ dependencies:
86
66
  - - "~>"
87
67
  - !ruby/object:Gem::Version
88
68
  version: '4.7'
89
- - !ruby/object:Gem::Dependency
90
- name: influxdb-client
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.1'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '3.1'
103
69
  - !ruby/object:Gem::Dependency
104
70
  name: lefthook
105
71
  requirement: !ruby/object:Gem::Requirement
@@ -232,7 +198,7 @@ dependencies:
232
198
  requirements:
233
199
  - - ">="
234
200
  - !ruby/object:Gem::Version
235
- version: '6.1'
201
+ version: '7.0'
236
202
  - - "<"
237
203
  - !ruby/object:Gem::Version
238
204
  version: '7.2'
@@ -242,7 +208,7 @@ dependencies:
242
208
  requirements:
243
209
  - - ">="
244
210
  - !ruby/object:Gem::Version
245
- version: '6.1'
211
+ version: '7.0'
246
212
  - - "<"
247
213
  - !ruby/object:Gem::Version
248
214
  version: '7.2'
@@ -288,6 +254,20 @@ dependencies:
288
254
  - - "~>"
289
255
  - !ruby/object:Gem::Version
290
256
  version: '5.0'
257
+ - !ruby/object:Gem::Dependency
258
+ name: influxdb-client
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: '3.1'
264
+ type: :runtime
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: '3.1'
291
271
  - !ruby/object:Gem::Dependency
292
272
  name: nokogiri
293
273
  requirement: !ruby/object:Gem::Requirement