gitlab_quality-test_tooling 1.29.0 → 1.30.0

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: ca3b15faac90436068b21df05071cbcd06dd1a71d33b3220a58d17201a893a2d
4
- data.tar.gz: dee6c41cfe097f6af193890eee46a95a17f1fa7724377fb8529f75142931bbb1
3
+ metadata.gz: ba1faa3616687c598a2d2b69e469c90d92ba687a9693ed87367998e1a747313d
4
+ data.tar.gz: 1486372498629cb6e21b63a999a856f40e7b393295f12bcf52cd8f74c4803efc
5
5
  SHA512:
6
- metadata.gz: ab45b4d7059cfb911b103f952f0e072dd578057a24fb539ac322087b09d4cd646ecdeb0c7a528427cd378f67a056d374a663c1effb62945a2001b18fea26af8c
7
- data.tar.gz: 387923350e8554c3fd99d17d3a1ea502768d4cfc251805a5c76a17bca950ef28e616ec161eb329c0482b678f5e3a037c3235ca6562eb93008e57c6963838a3ba
6
+ metadata.gz: f67bc6c00ad80ab20e33b7f69356a30e27415674211ce14c4ceb17dd80d7621ce6a441a279889e344b8e8a87d1488dec5e799f5c712d0eae629d44ee2b6019e6
7
+ data.tar.gz: ceb443481a7528bca028c3070dcf71739bdd9b90a4173890dbd5f54a4d0e22ef2b9458c0d00ac13bf23dad0354bde5465a153a4f23c92c9ccf0c44cef04822a9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab_quality-test_tooling (1.29.0)
4
+ gitlab_quality-test_tooling (1.30.0)
5
5
  activesupport (>= 7.0, < 7.2)
6
6
  amatch (~> 0.4.1)
7
7
  gitlab (~> 4.19)
@@ -330,4 +330,4 @@ DEPENDENCIES
330
330
  webmock (= 3.7.0)
331
331
 
332
332
  BUNDLED WITH
333
- 2.5.6
333
+ 2.5.13
data/exe/post-to-slack CHANGED
@@ -47,6 +47,10 @@ options = OptionParser.new do |opts|
47
47
  summary_table_opts[:sort_direction] = sort_direction.downcase.to_sym
48
48
  end
49
49
 
50
+ opts.on('--hide-passed-tests', 'Used with the `--include-summary-table` flag — Hide passed tests from the summary table') do
51
+ summary_table_opts[:hide_passed_tests] = true
52
+ end
53
+
50
54
  opts.on('-t', '--include-summary-table FILES', String, 'Add a test summary table based on RSpec report files (JUnit XML)') do |files|
51
55
  params[:summary_table_files] = files
52
56
  end
@@ -9,8 +9,7 @@ module GitlabQuality
9
9
  def initialize(file_path:, ref:, **kwargs)
10
10
  @file_path = file_path
11
11
  @ref = ref
12
-
13
- super
12
+ super(**kwargs)
14
13
  end
15
14
 
16
15
  def file_contents
@@ -20,7 +19,9 @@ module GitlabQuality
20
19
  end
21
20
 
22
21
  def file_contents_at_line(line_number)
23
- file_contents.lines(chomp: true)[line_number - 1]
22
+ ignore_gitlab_client_exceptions do
23
+ file_contents.lines(chomp: true)[line_number - 1]
24
+ end
24
25
  end
25
26
  end
26
27
  end
@@ -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, token: token, project: project).test_results_per_file do |test_results|
68
+ TestResults::Builder.new(file_glob: files).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)
@@ -9,6 +9,7 @@ module GitlabQuality
9
9
  SLOW_TEST_NOTE_SOURCE_CODE = 'Generated by [`gitlab_quality-test_tooling`](https://gitlab.com/gitlab-org/ruby/gems/gitlab_quality-test_tooling/-/blob/main/lib/gitlab_quality/test_tooling/report/merge_request_slow_tests_report.rb).'
10
10
 
11
11
  def initialize(token:, input_files:, merge_request_iid:, project: nil, dry_run: false, **_kwargs)
12
+ @token = token
12
13
  @project = project
13
14
  @gitlab_merge_request = (dry_run ? GitlabClient::MergeRequestsDryClient : GitlabClient::MergeRequestsClient).new(token: token, project: project)
14
15
  @files = Array(input_files)
@@ -259,7 +259,7 @@ module GitlabQuality
259
259
 
260
260
  best_matching_issue, smaller_diff_ratio = relevant_issues.min_by { |_, diff_ratio| diff_ratio }
261
261
 
262
- raise(MultipleIssuesFound, %(Too many issues found for test '#{test.name}' (`#{test.file}`)!)) unless relevant_issues.values.count(smaller_diff_ratio) == 1
262
+ raise(MultipleIssuesFound, %(Too many issues found for test '#{test.name}' (`#{test.relative_file}`)!)) unless relevant_issues.values.count(smaller_diff_ratio) == 1
263
263
 
264
264
  # Re-instantiate a `Gitlab::ObjectifiedHash` object after having converted it to a hash in #find_relevant_failure_issues above.
265
265
  best_matching_issue = Gitlab::ObjectifiedHash.new(best_matching_issue)
@@ -10,7 +10,6 @@ module GitlabQuality
10
10
 
11
11
  def initialize(token:, input_files:, related_issues_file: nil, project: nil, confidential: false, dry_run: false, **_kwargs)
12
12
  @project = project
13
- @token = token
14
13
  @gitlab = (dry_run ? GitlabClient::IssuesDryClient : GitlabClient::IssuesClient).new(token: token, project: project)
15
14
  @files = Array(input_files)
16
15
  @confidential = confidential
@@ -29,7 +28,7 @@ module GitlabQuality
29
28
 
30
29
  private
31
30
 
32
- attr_reader :gitlab, :files, :project, :issue_type, :confidential, :issue_logger, :token
31
+ attr_reader :gitlab, :files, :project, :issue_type, :confidential, :issue_logger
33
32
 
34
33
  def run!
35
34
  raise NotImplementedError
@@ -47,7 +46,7 @@ module GitlabQuality
47
46
  # Should not be more than 50 characters if we want it indexed.
48
47
  #
49
48
  # See https://gitlab.com/gitlab-org/ruby/gems/gitlab_quality-test_tooling/-/issues/27#note_1607276486
50
- OpenSSL::Digest.hexdigest('SHA256', "#{test.file}#{test.name}")[..40]
49
+ OpenSSL::Digest.hexdigest('SHA256', "#{test.relative_file}#{test.name}")[..40]
51
50
  end
52
51
 
53
52
  def new_issue_description(test)
@@ -58,7 +57,7 @@ module GitlabQuality
58
57
  | Field | Value |
59
58
  | ------ | ------ |
60
59
  | File URL | #{test.test_file_link} |
61
- | Filename | `#{test.file}` |
60
+ | Filename | `#{test.relative_file}` |
62
61
  | Description | `#{test.name}` |
63
62
  | Test level | `#{test.level}` |
64
63
  | Hash | `#{test_hash(test)}` |
@@ -14,6 +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
18
  @testcase_project_reporter = GitlabQuality::TestTooling::Report::ResultsInTestCases.new(
18
19
  token: test_case_project_token, input_files: input_files, project: test_case_project, dry_run: dry_run, **kwargs)
19
20
  @results_issue_project_reporter = GitlabQuality::TestTooling::Report::ResultsInIssues.new(
@@ -42,7 +43,7 @@ module GitlabQuality
42
43
  test_results.each do |test|
43
44
  next if test.file.include?('/features/sanity/') || test.skipped?
44
45
 
45
- puts "Reporting test: #{test.file} | #{test.name}\n"
46
+ puts "Reporting test: #{test.relative_file} | #{test.name}\n"
46
47
 
47
48
  report_test(test)
48
49
  end
@@ -14,6 +14,7 @@ module GitlabQuality
14
14
  def self.collect_results(input_files, **options)
15
15
  sort_by = options[:sort_by]
16
16
  sort_direction = options[:sort_direction]
17
+ hide_passed_tests = options[:hide_passed_tests]
17
18
 
18
19
  stage_wise_results = Dir.glob(input_files).each_with_object([]) do |report_file, stage_wise_results|
19
20
  stage_hash = {}
@@ -21,6 +22,8 @@ module GitlabQuality
21
22
 
22
23
  report_stats = Nokogiri::XML(File.open(report_file)).children[0].attributes
23
24
 
25
+ next if hide_passed_tests && report_stats["failures"].value.to_i.zero? && report_stats["errors"].value.to_i.zero?
26
+
24
27
  stage_hash["Total"] = report_stats["tests"].value
25
28
  stage_hash["Failures"] = report_stats["failures"].value
26
29
  stage_hash["Errors"] = report_stats["errors"].value
@@ -13,10 +13,8 @@ module GitlabQuality
13
13
 
14
14
  attr_reader :report
15
15
 
16
- def initialize(report:, token: nil, project: nil, ref: 'master')
16
+ def initialize(report:, ref: 'master')
17
17
  @report = report
18
- @token = token
19
- @project = project
20
18
  @ref = ref
21
19
  end
22
20
 
@@ -28,7 +26,7 @@ module GitlabQuality
28
26
  raise NotImplementedError
29
27
  end
30
28
 
31
- def file
29
+ def relative_file
32
30
  raise NotImplementedError
33
31
  end
34
32
 
@@ -56,6 +54,10 @@ module GitlabQuality
56
54
  failures.any?
57
55
  end
58
56
 
57
+ def file
58
+ @file ||= relative_file.start_with?('qa/') ? "qa/#{relative_file}" : relative_file
59
+ end
60
+
59
61
  def full_stacktrace
60
62
  failures.each do |failure|
61
63
  message = failure['message'] || ""
@@ -77,15 +79,15 @@ module GitlabQuality
77
79
 
78
80
  def files_client
79
81
  @files_client ||= GitlabClient::RepositoryFilesClient.new(
80
- token: token,
81
- project: project,
82
+ token: '',
83
+ project: 'gitlab-org/gitlab',
82
84
  file_path: file,
83
85
  ref: ref)
84
86
  end
85
87
 
86
88
  private
87
89
 
88
- attr_reader :token, :project, :ref
90
+ attr_reader :ref
89
91
  end
90
92
  end
91
93
  end
@@ -10,7 +10,7 @@ module GitlabQuality
10
10
  report['name']
11
11
  end
12
12
 
13
- def file
13
+ def relative_file
14
14
  report['file']&.delete_prefix('./')
15
15
  end
16
16
 
@@ -40,7 +40,7 @@ module GitlabQuality
40
40
  report.fetch('full_description').split('#<').first
41
41
  end
42
42
 
43
- def file
43
+ def relative_file
44
44
  report.fetch('file_path').delete_prefix('./')
45
45
  end
46
46
 
@@ -179,9 +179,7 @@ module GitlabQuality
179
179
  end
180
180
 
181
181
  def test_file_link
182
- path_prefix = file.start_with?('qa/') ? 'qa/' : ''
183
-
184
- "[`#{path_prefix}#{file}#L#{line_number}`](#{Runtime::Env.file_base_url}#{path_prefix}#{file}#L#{line_number})"
182
+ "[`#{file}#L#{line_number}`](#{Runtime::Env.file_base_url}#{file}#L#{line_number})"
185
183
  end
186
184
 
187
185
  private
@@ -8,10 +8,8 @@ module GitlabQuality
8
8
 
9
9
  attr_reader :path
10
10
 
11
- def initialize(path:, token: nil, project: nil, ref: 'master')
11
+ def initialize(path:, ref: 'master')
12
12
  @path = path
13
- @token = token
14
- @project = project
15
13
  @ref = ref
16
14
  @results = parse
17
15
  @testcases = process
@@ -27,7 +25,7 @@ module GitlabQuality
27
25
 
28
26
  private
29
27
 
30
- attr_reader :results, :testcases, :token, :project, :ref
28
+ attr_reader :results, :testcases, :ref
31
29
 
32
30
  def parse
33
31
  raise NotImplementedError
@@ -4,10 +4,8 @@ module GitlabQuality
4
4
  module TestTooling
5
5
  module TestResults
6
6
  class Builder
7
- def initialize(file_glob:, token: nil, project: nil, ref: 'master')
7
+ def initialize(file_glob:, ref: 'master')
8
8
  @file_glob = file_glob
9
- @token = token
10
- @project = project
11
9
  @ref = ref
12
10
  end
13
11
 
@@ -18,9 +16,9 @@ module GitlabQuality
18
16
  test_results =
19
17
  case extension
20
18
  when '.json'
21
- TestResults::JsonTestResults.new(path: path, token: token, project: project, ref: ref)
19
+ TestResults::JsonTestResults.new(path: path, ref: ref)
22
20
  when '.xml'
23
- TestResults::JUnitTestResults.new(path: path, token: token, project: project, ref: ref)
21
+ TestResults::JUnitTestResults.new(path: path, ref: ref)
24
22
  else
25
23
  raise "Unknown extension #{extension}"
26
24
  end
@@ -31,7 +29,7 @@ module GitlabQuality
31
29
 
32
30
  private
33
31
 
34
- attr_reader :file_glob, :token, :project, :ref
32
+ attr_reader :file_glob, :ref
35
33
  end
36
34
  end
37
35
  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, project: project, token: token)
21
+ GitlabQuality::TestTooling::TestResult::JUnitTestResult.new(report: test)
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, project: project, token: token)
23
+ GitlabQuality::TestTooling::TestResult::JsonTestResult.new(report: test)
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.29.0"
5
+ VERSION = "1.30.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.29.0
4
+ version: 1.30.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-18 00:00:00.000000000 Z
11
+ date: 2024-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control