gitlab_quality-test_tooling 1.30.0 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/gitlab_quality/test_tooling/knapsack_reports/spec_run_time.rb +4 -3
  4. data/lib/gitlab_quality/test_tooling/knapsack_reports/spec_run_time_report.rb +4 -2
  5. data/lib/gitlab_quality/test_tooling/report/failed_test_issue.rb +1 -5
  6. data/lib/gitlab_quality/test_tooling/report/health_problem_reporter.rb +2 -4
  7. data/lib/gitlab_quality/test_tooling/report/knapsack_report_issue.rb +1 -0
  8. data/lib/gitlab_quality/test_tooling/report/merge_request_slow_tests_report.rb +2 -2
  9. data/lib/gitlab_quality/test_tooling/report/relate_failure_issue.rb +1 -1
  10. data/lib/gitlab_quality/test_tooling/report/report_as_issue.rb +3 -2
  11. data/lib/gitlab_quality/test_tooling/report/report_results.rb +4 -2
  12. data/lib/gitlab_quality/test_tooling/runtime/env.rb +1 -4
  13. data/lib/gitlab_quality/test_tooling/test_meta/processor/add_to_blocking_processor.rb +6 -3
  14. data/lib/gitlab_quality/test_tooling/test_meta/processor/add_to_quarantine_processor.rb +6 -3
  15. data/lib/gitlab_quality/test_tooling/test_meta/test_meta_updater.rb +20 -0
  16. data/lib/gitlab_quality/test_tooling/test_result/base_test_result.rb +14 -4
  17. data/lib/gitlab_quality/test_tooling/test_result/j_unit_test_result.rb +0 -8
  18. data/lib/gitlab_quality/test_tooling/test_result/json_test_result.rb +0 -4
  19. data/lib/gitlab_quality/test_tooling/test_results/base_test_results.rb +4 -2
  20. data/lib/gitlab_quality/test_tooling/test_results/builder.rb +6 -4
  21. data/lib/gitlab_quality/test_tooling/test_results/j_unit_test_results.rb +1 -1
  22. data/lib/gitlab_quality/test_tooling/test_results/json_test_results.rb +1 -1
  23. data/lib/gitlab_quality/test_tooling/version.rb +1 -1
  24. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba1faa3616687c598a2d2b69e469c90d92ba687a9693ed87367998e1a747313d
4
- data.tar.gz: 1486372498629cb6e21b63a999a856f40e7b393295f12bcf52cd8f74c4803efc
3
+ metadata.gz: f3c72dad2be7e5a1e112667f8239dff242bac1d69298fd5bf664745c707d26ba
4
+ data.tar.gz: 2261f70832512fd425cc4f49316f3a0a2e5211b4a0d83d5149ae72cb9d899cb2
5
5
  SHA512:
6
- metadata.gz: f67bc6c00ad80ab20e33b7f69356a30e27415674211ce14c4ceb17dd80d7621ce6a441a279889e344b8e8a87d1488dec5e799f5c712d0eae629d44ee2b6019e6
7
- data.tar.gz: ceb443481a7528bca028c3070dcf71739bdd9b90a4173890dbd5f54a4d0e22ef2b9458c0d00ac13bf23dad0354bde5465a153a4f23c92c9ccf0c44cef04822a9
6
+ metadata.gz: '0395ec1d6abafc42099e47d961c468690265996fd903c1c105742735122aeef300baf27597163ccd510dc61d33721fa92180a72990881144f6a9a017a7a5d616'
7
+ data.tar.gz: 7b179fbba4870967780b53fc68b98f0f237bcc0c5595d9b68c37e5976b3964f286aeb480d321ff4e5daa1b8456881f1f49e3d72fb929809bc175ace04d70437e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab_quality-test_tooling (1.30.0)
4
+ gitlab_quality-test_tooling (1.32.0)
5
5
  activesupport (>= 7.0, < 7.2)
6
6
  amatch (~> 0.4.1)
7
7
  gitlab (~> 4.19)
@@ -4,13 +4,14 @@ module GitlabQuality
4
4
  module TestTooling
5
5
  module KnapsackReports
6
6
  class SpecRunTime
7
- attr_reader :file, :expected, :actual, :expected_suite_duration, :actual_suite_duration
7
+ attr_reader :project, :file, :expected, :actual, :expected_suite_duration, :actual_suite_duration
8
8
 
9
9
  ACTUAL_TO_EXPECTED_SPEC_RUN_TIME_RATIO_THRESHOLD = 1.5 # actual run time is longer than expected by 50% +
10
10
  SPEC_WEIGHT_PERCENTAGE_TRESHOLD = 15 # a spec file takes 15%+ of the total test suite run time
11
11
  SUITE_DURATION_THRESHOLD = 70 * 60 # if test suite takes more than 70 minutes, job risks timing out
12
12
 
13
- def initialize(file:, expected:, actual:, expected_suite_duration:, actual_suite_duration:)
13
+ def initialize(project:, file:, expected:, actual:, expected_suite_duration:, actual_suite_duration:)
14
+ @project = project
14
15
  @file = file
15
16
  @expected = expected.to_f
16
17
  @actual = actual.to_f
@@ -77,7 +78,7 @@ module GitlabQuality
77
78
  end
78
79
 
79
80
  def file_link
80
- "#{Runtime::Env.file_base_url}#{file}"
81
+ "https://gitlab.com/#{project}/-/blob/#{Runtime::Env.ci_commit_ref_name}/#{file}"
81
82
  end
82
83
  end
83
84
  end
@@ -6,9 +6,10 @@ module GitlabQuality
6
6
  module TestTooling
7
7
  module KnapsackReports
8
8
  class SpecRunTimeReport
9
- attr_reader :expected_report, :actual_report
9
+ attr_reader :project, :expected_report, :actual_report
10
10
 
11
- def initialize(expected_report_path:, actual_report_path:)
11
+ def initialize(project:, expected_report_path:, actual_report_path:)
12
+ @project = project
12
13
  @expected_report = parse(expected_report_path)
13
14
  @actual_report = parse(actual_report_path)
14
15
  end
@@ -24,6 +25,7 @@ module GitlabQuality
24
25
  end
25
26
 
26
27
  spec_run_time = SpecRunTime.new(
28
+ project: project,
27
29
  file: spec_file,
28
30
  expected: expected_run_time,
29
31
  actual: actual_run_time,
@@ -19,8 +19,6 @@ module GitlabQuality
19
19
  ISSUE_STACKTRACE_REGEX = /##### Stack trace\s*(```)#{FAILURE_STACKTRACE_REGEX}(```)\n*/m
20
20
  DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION = 0.15
21
21
 
22
- MultipleNotesFound = Class.new(StandardError)
23
-
24
22
  def initialize(
25
23
  base_issue_labels: nil,
26
24
  max_diff_ratio: DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION,
@@ -73,9 +71,7 @@ module GitlabQuality
73
71
  relevant_notes = find_relevant_failure_discussion_note(issue: issue, test: test, reports_discussion: reports_discussion)
74
72
  return if relevant_notes.empty?
75
73
 
76
- best_matching_note, smaller_diff_ratio = relevant_notes.min_by { |_, diff_ratio| diff_ratio }
77
-
78
- raise(MultipleNotesFound, %(Too many issues found for test '#{test.name}' (`#{test.file}`)!)) unless relevant_notes.values.count(smaller_diff_ratio) == 1
74
+ best_matching_note, _ = relevant_notes.min_by { |_, diff_ratio| diff_ratio }
79
75
 
80
76
  # Re-instantiate a `Gitlab::ObjectifiedHash` object after having converted it to a hash in #find_relevant_failure_issues above.
81
77
  best_matching_note = Gitlab::ObjectifiedHash.new(best_matching_note)
@@ -16,7 +16,7 @@ module GitlabQuality
16
16
  include Concerns::GroupAndCategoryLabels
17
17
  include Concerns::IssueReports
18
18
 
19
- BASE_SEARCH_LABELS = ['test'].freeze
19
+ BASE_SEARCH_LABELS = ['test'].freeze
20
20
  FOUND_IN_MR_LABEL = '~"found:in MR"'
21
21
  FOUND_IN_MASTER_LABEL = '~"found:master"'
22
22
 
@@ -65,7 +65,7 @@ module GitlabQuality
65
65
  def run!
66
66
  puts "Reporting tests in `#{files.join(',')}` as issues in project `#{project}` via the API at `#{Runtime::Env.gitlab_api_base}`."
67
67
 
68
- TestResults::Builder.new(file_glob: files).test_results_per_file do |test_results|
68
+ TestResults::Builder.new(file_glob: files, token: token, project: project).test_results_per_file do |test_results|
69
69
  puts "=> Reporting #{test_results.count} tests in #{test_results.path}"
70
70
 
71
71
  process_test_results(test_results)
@@ -133,8 +133,6 @@ module GitlabQuality
133
133
  else
134
134
  gitlab.create_issue_note(iid: issue.iid, note: note_body)
135
135
  end
136
- rescue MultipleNotesFound => e
137
- warn(e.message)
138
136
  end
139
137
 
140
138
  def find_or_create_reports_discussion(issue:)
@@ -36,6 +36,7 @@ module GitlabQuality
36
36
 
37
37
  def search_and_create_issue
38
38
  filtered_report = KnapsackReports::SpecRunTimeReport.new(
39
+ project: project,
39
40
  expected_report_path: expected_report_path,
40
41
  actual_report_path: actual_report_path
41
42
  ).filtered_report
@@ -25,12 +25,12 @@ module GitlabQuality
25
25
 
26
26
  private
27
27
 
28
- attr_reader :gitlab_merge_request, :files, :project, :merge_request_iid, :slow_tests
28
+ attr_reader :token, :project, :gitlab_merge_request, :files, :merge_request_iid, :slow_tests
29
29
 
30
30
  def run!
31
31
  puts "Reporting slow tests in MR #{merge_request_iid}"
32
32
 
33
- TestResults::Builder.new(file_glob: files).test_results_per_file do |test_results|
33
+ TestResults::Builder.new(token: token, project: project, file_glob: files).test_results_per_file do |test_results|
34
34
  puts "=> Reporting #{test_results.count} tests in #{test_results.path}"
35
35
 
36
36
  @slow_tests += slow_related_tests(find_slow_tests(test_results))
@@ -52,7 +52,7 @@ module GitlabQuality
52
52
  def run!
53
53
  puts "Reporting test failures in `#{files.join(',')}` as issues in project `#{project}` via the API at `#{Runtime::Env.gitlab_api_base}`."
54
54
 
55
- TestResults::Builder.new(file_glob: files).test_results_per_file do |test_results|
55
+ TestResults::Builder.new(token: token, project: project, file_glob: files).test_results_per_file do |test_results|
56
56
  puts "=> Reporting #{test_results.count} tests in #{test_results.path}"
57
57
  process_test_results(test_results)
58
58
  end
@@ -9,6 +9,7 @@ module GitlabQuality
9
9
  include Concerns::Utils
10
10
 
11
11
  def initialize(token:, input_files:, related_issues_file: nil, project: nil, confidential: false, dry_run: false, **_kwargs)
12
+ @token = token
12
13
  @project = project
13
14
  @gitlab = (dry_run ? GitlabClient::IssuesDryClient : GitlabClient::IssuesClient).new(token: token, project: project)
14
15
  @files = Array(input_files)
@@ -28,7 +29,7 @@ module GitlabQuality
28
29
 
29
30
  private
30
31
 
31
- attr_reader :gitlab, :files, :project, :issue_type, :confidential, :issue_logger
32
+ attr_reader :token, :gitlab, :files, :project, :issue_type, :confidential, :issue_logger
32
33
 
33
34
  def run!
34
35
  raise NotImplementedError
@@ -58,7 +59,7 @@ module GitlabQuality
58
59
  | ------ | ------ |
59
60
  | File URL | #{test.test_file_link} |
60
61
  | Filename | `#{test.relative_file}` |
61
- | Description | `#{test.name}` |
62
+ | Description | `` #{test.name} `` |
62
63
  | Test level | `#{test.level}` |
63
64
  | Hash | `#{test_hash(test)}` |
64
65
  | Max expected duration | < #{test.max_duration_for_test} seconds |
@@ -14,7 +14,7 @@ module GitlabQuality
14
14
  def initialize(
15
15
  test_case_project_token:, results_issue_project_token:, input_files:, test_case_project: nil, results_issue_project: nil, dry_run: false,
16
16
  **kwargs)
17
- @results_issue_project_token = results_issue_project_token
17
+ @test_case_project_token = test_case_project_token
18
18
  @testcase_project_reporter = GitlabQuality::TestTooling::Report::ResultsInTestCases.new(
19
19
  token: test_case_project_token, input_files: input_files, project: test_case_project, dry_run: dry_run, **kwargs)
20
20
  @results_issue_project_reporter = GitlabQuality::TestTooling::Report::ResultsInIssues.new(
@@ -32,12 +32,14 @@ module GitlabQuality
32
32
 
33
33
  private
34
34
 
35
+ attr_reader :test_case_project_token
36
+
35
37
  # rubocop:disable Metrics/AbcSize
36
38
  def run!
37
39
  puts "Reporting test results in `#{files.join(',')}` as test cases in project `#{test_case_project}` " \
38
40
  "and issues in project `#{results_issue_project}` via the API at `#{Runtime::Env.gitlab_api_base}`."
39
41
 
40
- TestResults::Builder.new(file_glob: files).test_results_per_file do |test_results|
42
+ TestResults::Builder.new(token: test_case_project_token, project: test_case_project, file_glob: files).test_results_per_file do |test_results|
41
43
  puts "Reporting tests in #{test_results.path}"
42
44
 
43
45
  test_results.each do |test|
@@ -17,6 +17,7 @@ module GitlabQuality
17
17
  'CI_JOB_URL' => :ci_job_url,
18
18
  'CI_PROJECT_ID' => :ci_project_id,
19
19
  'CI_PROJECT_NAME' => :ci_project_name,
20
+ 'CI_PROJECT_PATH' => :ci_project_path,
20
21
  'CI_PIPELINE_ID' => :ci_pipeline_id,
21
22
  'CI_PIPELINE_URL' => :ci_pipeline_url,
22
23
  'SLACK_QA_CHANNEL' => :slack_qa_channel,
@@ -90,10 +91,6 @@ module GitlabQuality
90
91
  "#{ci_project_name}-#{test_subset}"
91
92
  end
92
93
 
93
- def file_base_url
94
- env_var_value_if_defined('FILE_BASE_URL') || "https://gitlab.com/gitlab-org/gitlab/-/blob/master/"
95
- end
96
-
97
94
  private
98
95
 
99
96
  def enabled?(value, default: true)
@@ -50,18 +50,21 @@ module GitlabQuality
50
50
 
51
51
  private
52
52
 
53
- attr_reader :context, :file_path, :file, :file_contents, :example_name, :mr_title, :changed_line_no
53
+ attr_reader :context, :file_path, :file, :file_contents, :example_name, :mr_title, :changed_line_no, :matched_lines
54
54
 
55
55
  # Checks if there is already an MR open
56
56
  #
57
57
  # @return [Boolean]
58
- def proceed_with_commit?
58
+ def proceed_with_commit? # rubocop:disable Metrics/AbcSize
59
59
  if changed_line_no.negative?
60
60
  Runtime::Logger.info(" No lines were changed in #{file_path}. Will not proceed with creating MR.")
61
61
  return false
62
62
  elsif context.commit_processed?(file_path, changed_line_no)
63
63
  Runtime::Logger.info(" Record already processed for #{file_path}:#{changed_line_no}. Will not proceed with creating MR.")
64
64
  return false
65
+ elsif context.quarantined?(matched_lines, file_contents)
66
+ Runtime::Logger.info(" This test is in quarantine: #{file_path}:#{changed_line_no}. Will not proceed with creating MR.")
67
+ return false
65
68
  end
66
69
 
67
70
  true
@@ -120,7 +123,7 @@ module GitlabQuality
120
123
  #
121
124
  # @return [Array<String, Integer>] first value holds the new content, the second value holds the line number of the test
122
125
  def add_metadata # rubocop:disable Metrics/AbcSize
123
- matched_lines = context.find_example_match_lines(file_contents, example_name)
126
+ @matched_lines = context.find_example_match_lines(file_contents, example_name)
124
127
 
125
128
  if matched_lines.any? { |line| line[0].include?(':blocking') }
126
129
  Runtime::Logger.info("Example '#{example_name}' is already blocking")
@@ -60,12 +60,12 @@ module GitlabQuality
60
60
  private
61
61
 
62
62
  attr_reader :context, :file_path, :file_contents, :failure_issue_url, :example_name,
63
- :mr_title, :failure_issue, :changed_line_no
63
+ :mr_title, :failure_issue, :changed_line_no, :matched_lines
64
64
 
65
65
  # Checks if the failure issue is closed or if there is already an MR open
66
66
  #
67
67
  # @return [Boolean]
68
- def proceed_with_commit?
68
+ def proceed_with_commit? # rubocop:disable Metrics/AbcSize
69
69
  if context.issue_is_closed?(failure_issue)
70
70
  Runtime::Logger.info(" Failure issue '#{failure_issue_url}' is closed. Will not proceed with creating MR.")
71
71
  return false
@@ -75,6 +75,9 @@ module GitlabQuality
75
75
  elsif failure_is_related_to_test_environment?
76
76
  Runtime::Logger.info(" Failure issue '#{failure_issue_url}' is environment related. Will not proceed with creating MR.")
77
77
  return false
78
+ elsif context.quarantined?(matched_lines, file_contents)
79
+ Runtime::Logger.info(" This test is already in quarantine: #{file_path}:#{changed_line_no}. Will not proceed with creating MR.")
80
+ return false
78
81
  end
79
82
 
80
83
  true
@@ -199,7 +202,7 @@ module GitlabQuality
199
202
  #
200
203
  # @return [Array<String, Integer>] first value holds the new content, the second value holds the line number of the test
201
204
  def add_metadata # rubocop:disable Metrics/AbcSize
202
- matched_lines = context.find_example_match_lines(file_contents, example_name)
205
+ @matched_lines = context.find_example_match_lines(file_contents, example_name)
203
206
 
204
207
  context.update_matched_line(matched_lines.last, file_contents.dup) do |line|
205
208
  indentation = context.indentation(line)
@@ -129,6 +129,26 @@ module GitlabQuality
129
129
  matched_lines
130
130
  end
131
131
 
132
+ # Scans the content from the matched line until `do` is found to look for quarantine token
133
+ #
134
+ # @param [Array] matched_lines an array of arrays containing the matched line and their index
135
+ # @param [String] file_contents the content of the spec file
136
+ # @return [Bolean]
137
+ def quarantined?(matched_lines, file_contents)
138
+ lines = file_contents.split("\n")
139
+
140
+ matched_lines.each do |matched_line|
141
+ matched_line_starting_index = matched_line[1]
142
+
143
+ lines[matched_line_starting_index..].each do |line|
144
+ return true if line.include?('quarantine: {')
145
+ break if / do$/.match?(line)
146
+ end
147
+ end
148
+
149
+ false
150
+ end
151
+
132
152
  # Update the provided matched_line with content from the block if given
133
153
  #
134
154
  # @param [Array<String, Integer>] matched_line first value holds the line content, the second value holds the line number
@@ -13,8 +13,10 @@ module GitlabQuality
13
13
 
14
14
  attr_reader :report
15
15
 
16
- def initialize(report:, ref: 'master')
16
+ def initialize(report:, token: '', project: Runtime::Env.ci_project_path, ref: Runtime::Env.ci_commit_ref_name)
17
17
  @report = report
18
+ @token = token
19
+ @project = project
18
20
  @ref = ref
19
21
  end
20
22
 
@@ -58,6 +60,14 @@ module GitlabQuality
58
60
  @file ||= relative_file.start_with?('qa/') ? "qa/#{relative_file}" : relative_file
59
61
  end
60
62
 
63
+ def file_base_url
64
+ @file_base_url ||= "https://gitlab.com/#{project}/-/blob/#{ref}/"
65
+ end
66
+
67
+ def test_file_link
68
+ "[`#{file}#L#{line_number}`](#{file_base_url}#{file}#L#{line_number})"
69
+ end
70
+
61
71
  def full_stacktrace
62
72
  failures.each do |failure|
63
73
  message = failure['message'] || ""
@@ -79,15 +89,15 @@ module GitlabQuality
79
89
 
80
90
  def files_client
81
91
  @files_client ||= GitlabClient::RepositoryFilesClient.new(
82
- token: '',
83
- project: 'gitlab-org/gitlab',
92
+ token: token,
93
+ project: project,
84
94
  file_path: file,
85
95
  ref: ref)
86
96
  end
87
97
 
88
98
  private
89
99
 
90
- attr_reader :ref
100
+ attr_reader :token, :project, :ref
91
101
  end
92
102
  end
93
103
  end
@@ -98,14 +98,6 @@ module GitlabQuality
98
98
  def failure_issue=(new_failure_issue)
99
99
  report['failure_issue'] = new_failure_issue
100
100
  end
101
-
102
- def test_file_link
103
- return "" if file.nil?
104
-
105
- path_prefix = file.start_with?('qa/') ? 'qa/' : ''
106
-
107
- "[`#{path_prefix}#{file}#L#{line_number}`](#{Runtime::Env.file_base_url}#{path_prefix}#{file}#L#{line_number})"
108
- end
109
101
  end
110
102
  end
111
103
  end
@@ -178,10 +178,6 @@ module GitlabQuality
178
178
  test_level_specification.max_duration
179
179
  end
180
180
 
181
- def test_file_link
182
- "[`#{file}#L#{line_number}`](#{Runtime::Env.file_base_url}#{file}#L#{line_number})"
183
- end
184
-
185
181
  private
186
182
 
187
183
  def quarantine
@@ -8,8 +8,10 @@ module GitlabQuality
8
8
 
9
9
  attr_reader :path
10
10
 
11
- def initialize(path:, ref: 'master')
11
+ def initialize(path:, token: nil, project: nil, ref: 'master')
12
12
  @path = path
13
+ @token = token
14
+ @project = project
13
15
  @ref = ref
14
16
  @results = parse
15
17
  @testcases = process
@@ -25,7 +27,7 @@ module GitlabQuality
25
27
 
26
28
  private
27
29
 
28
- attr_reader :results, :testcases, :ref
30
+ attr_reader :results, :testcases, :token, :project, :ref
29
31
 
30
32
  def parse
31
33
  raise NotImplementedError
@@ -4,8 +4,10 @@ module GitlabQuality
4
4
  module TestTooling
5
5
  module TestResults
6
6
  class Builder
7
- def initialize(file_glob:, ref: 'master')
7
+ def initialize(file_glob:, token: nil, project: nil, ref: 'master')
8
8
  @file_glob = file_glob
9
+ @token = token
10
+ @project = project
9
11
  @ref = ref
10
12
  end
11
13
 
@@ -16,9 +18,9 @@ module GitlabQuality
16
18
  test_results =
17
19
  case extension
18
20
  when '.json'
19
- TestResults::JsonTestResults.new(path: path, ref: ref)
21
+ TestResults::JsonTestResults.new(path: path, token: token, project: project, ref: ref)
20
22
  when '.xml'
21
- TestResults::JUnitTestResults.new(path: path, ref: ref)
23
+ TestResults::JUnitTestResults.new(path: path, token: token, project: project, ref: ref)
22
24
  else
23
25
  raise "Unknown extension #{extension}"
24
26
  end
@@ -29,7 +31,7 @@ module GitlabQuality
29
31
 
30
32
  private
31
33
 
32
- attr_reader :file_glob, :ref
34
+ attr_reader :file_glob, :token, :project, :ref
33
35
  end
34
36
  end
35
37
  end
@@ -18,7 +18,7 @@ module GitlabQuality
18
18
 
19
19
  def process
20
20
  results.xpath('//testcase').map do |test|
21
- GitlabQuality::TestTooling::TestResult::JUnitTestResult.new(report: test)
21
+ GitlabQuality::TestTooling::TestResult::JUnitTestResult.new(report: test, project: project, token: token)
22
22
  end
23
23
  end
24
24
  end
@@ -20,7 +20,7 @@ module GitlabQuality
20
20
 
21
21
  def process
22
22
  results['examples'].map do |test|
23
- GitlabQuality::TestTooling::TestResult::JsonTestResult.new(report: test)
23
+ GitlabQuality::TestTooling::TestResult::JsonTestResult.new(report: test, project: project, token: token)
24
24
  end
25
25
  end
26
26
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GitlabQuality
4
4
  module TestTooling
5
- VERSION = "1.30.0"
5
+ VERSION = "1.32.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: 1.30.0
4
+ version: 1.32.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-06-26 00:00:00.000000000 Z
11
+ date: 2024-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control