gitlab_quality-test_tooling 1.5.1 → 1.5.2

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: 7ba60bceafbfb950d7cc588d11b14b457f74cdf3f39271b33b171d7de935c6a2
4
- data.tar.gz: 3129a7a6da1a0c6f46df06ccd69f4d6d84a2f926a1dca268ea73455054fdbf4d
3
+ metadata.gz: 421778dfb1e380d4b8e0fc3e43a8d4147d50c0a11304ac36e964aeaf99330404
4
+ data.tar.gz: 1f09fb87a864818b6728364454c0f8b9043cc73c5cec1ce4aa0104261d5dbfea
5
5
  SHA512:
6
- metadata.gz: 0cfd0c911a463fe793c701ae13bef14dcd4e5220bc0e41819126e6659f1bcb6589ce1dba5baa33f6410f92a8ddc6414623cb7952638f66a3d79a55099089f1a6
7
- data.tar.gz: 12600147b76a659a725662119d08318999a85f1483a5d68bb6da14f464085f3d67fc6748a2f94dcee9bef82357c62a17f874d3a3feb2ee6961fbcb094f61aec0
6
+ metadata.gz: 7cdbc73cd4ac08dc3f78a27b4575ec3a6005b7cfd95577bd61c8868d6836b3f1d549b1744d27d6cc2939e08d9b777eb74e84e4fb473952c7a9c982dc7a9b719e
7
+ data.tar.gz: ddd08dc76c0a45cae09283f0a2c8b91a731a203ffa624cac641254b4933b49585d585b5ada0169f85cccd4c59af562ffca9b16df5d733ee98d38f0c15af08334
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab_quality-test_tooling (1.5.1)
4
+ gitlab_quality-test_tooling (1.5.2)
5
5
  activesupport (>= 6.1, < 7.2)
6
6
  amatch (~> 0.4.1)
7
7
  gitlab (~> 4.19)
@@ -15,7 +15,7 @@ PATH
15
15
  GEM
16
16
  remote: https://rubygems.org/
17
17
  specs:
18
- activesupport (6.1.7.3)
18
+ activesupport (7.0.8)
19
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
20
20
  i18n (>= 1.6, < 2)
21
21
  minitest (>= 5.1)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'fileutils'
4
+
3
5
  module GitlabQuality
4
6
  module TestTooling
5
7
  module Report
@@ -15,6 +15,7 @@ module GitlabQuality
15
15
  merge_request_iid: merge_request_iid)
16
16
  @files = Array(input_files)
17
17
  @merge_request_iid = merge_request_iid
18
+ @slow_tests = []
18
19
  end
19
20
 
20
21
  def invoke!
@@ -25,7 +26,7 @@ module GitlabQuality
25
26
 
26
27
  private
27
28
 
28
- attr_reader :gitlab_merge_request, :files, :project, :merge_request_iid
29
+ attr_reader :gitlab_merge_request, :files, :project, :merge_request_iid, :slow_tests
29
30
 
30
31
  def run!
31
32
  puts "Reporting slow tests in MR #{merge_request_iid}"
@@ -33,21 +34,26 @@ module GitlabQuality
33
34
  TestResults::Builder.new(files).test_results_per_file do |test_results|
34
35
  puts "=> Reporting #{test_results.count} tests in #{test_results.path}"
35
36
 
36
- upsert_mr_note(slow_related_tests(slow_tests(test_results))) if should_create_mr_note?(test_results)
37
+ @slow_tests += slow_related_tests(find_slow_tests(test_results))
37
38
  end
39
+
40
+ @slow_tests.uniq!
41
+ @slow_tests.reject!(&:failed?)
42
+
43
+ return unless @slow_tests.any?
44
+
45
+ upsert_mr_note(@slow_tests)
38
46
  end
39
47
 
40
- def should_create_mr_note?(test_results)
41
- gitlab_merge_request.merge_request_changed_files.any? &&
42
- slow_tests(test_results).any? &&
43
- slow_related_tests(slow_tests(test_results)).any?
48
+ def related_test?(slow_test)
49
+ base_file = slow_test.file.split('/').last.gsub('_spec.rb', '')
50
+
51
+ merge_request_changed_files.any? { |change| change =~ /#{base_file}/ }
44
52
  end
45
53
 
46
54
  def slow_related_tests(slow_test_results)
47
- slow_test_results.select do |slow_test_result|
48
- base_file = slow_test_result.file.split('/').last.gsub('_spec.rb', '')
49
-
50
- merge_request_changed_files.any? { |change| change =~ /#{base_file}/ }
55
+ slow_test_results.select do |slow_test|
56
+ related_test?(slow_test)
51
57
  end
52
58
  end
53
59
 
@@ -55,7 +61,7 @@ module GitlabQuality
55
61
  @merge_request_changed_files ||= gitlab_merge_request.merge_request_changed_files
56
62
  end
57
63
 
58
- def slow_tests(test_results)
64
+ def find_slow_tests(test_results)
59
65
  test_results.select(&:slow_test?)
60
66
  end
61
67
 
@@ -66,7 +72,8 @@ module GitlabQuality
66
72
  ":tools: #{SLOW_TEST_NOTE_SOURCE_CODE}\n",
67
73
  ":recycle: #{SLOW_TEST_NOTE_FEEDBACK}\n",
68
74
  "---\n",
69
- ':snail: Slow tests detected in this merge request, might be related with changed RSpec files.',
75
+ ":snail: Slow tests detected in this merge request. These slow tests might be related to this merge request's changes.",
76
+ "<details><summary>Click to expand</summary>\n",
70
77
  '| Job | File | Name | Duration | Expected duration |',
71
78
  '| --- | --- | --- | --- | --- |'
72
79
  ]
@@ -83,7 +90,7 @@ module GitlabQuality
83
90
  end
84
91
 
85
92
  def build_note(slow_test)
86
- rows = note_header + slow_test_rows(slow_test)
93
+ rows = note_header + slow_test_rows(slow_test) + ["\n</details>"]
87
94
 
88
95
  rows.join("\n")
89
96
  end
@@ -105,11 +112,13 @@ module GitlabQuality
105
112
  end
106
113
 
107
114
  def add_slow_test_rows(gitlab_note, slow_tests)
115
+ gitlab_note.gsub!("\n\n</details>", "")
116
+
108
117
  slow_tests.each do |slow_test|
109
118
  gitlab_note += "\n#{slow_test_table_row(slow_test)}" unless note_comment_includes_slow_test?(gitlab_note, slow_test)
110
119
  end
111
120
 
112
- gitlab_note
121
+ "#{gitlab_note}\n\n</details>"
113
122
  end
114
123
 
115
124
  def upsert_mr_note(slow_tests)
@@ -126,7 +126,10 @@ module GitlabQuality
126
126
  return
127
127
  end
128
128
 
129
- super
129
+ created_issue = super
130
+ test.failure_issue ||= created_issue.web_url
131
+
132
+ created_issue
130
133
  end
131
134
 
132
135
  def pipeline_issues_with_similar_stacktrace(test)
@@ -3,6 +3,7 @@
3
3
  require 'forwardable'
4
4
  require 'fileutils'
5
5
  require 'rainbow'
6
+ require 'active_support'
6
7
  require 'active_support/logger'
7
8
 
8
9
  module GitlabQuality
@@ -33,6 +33,10 @@ module GitlabQuality
33
33
  status == 'pending'
34
34
  end
35
35
 
36
+ def failed?
37
+ status == 'failed'
38
+ end
39
+
36
40
  def ci_job_url
37
41
  report.fetch('ci_job_url', '')
38
42
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GitlabQuality
4
4
  module TestTooling
5
- VERSION = "1.5.1"
5
+ VERSION = "1.5.2"
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: 1.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-07 00:00:00.000000000 Z
11
+ date: 2023-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control