gitlab-qa 5.17.0 → 6.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9c4251f7eaa756abc42d5cb76b0b318ec3b14004331d32a92e125135055ecef
4
- data.tar.gz: 04bb9549728a2533cfb34b2e5ade00260511fda1d6e4d052769d9682b73b497b
3
+ metadata.gz: 6f02b51e013ff64f6e9080771f02e439efcf9093cedba40ca625fd10a932436e
4
+ data.tar.gz: 7089a36078ed197e4abb318f78d67d8f04289803c5bbfb6598fcd0761d071e6b
5
5
  SHA512:
6
- metadata.gz: dfb8a2afb17ac4d47e0c770c8da39a3290d6ac58d6306f3a930d50b08180660c85995ff248b1f50bdd6f8d9fe26b29f8680016b03ff07f85d5600e1bd5c7be90
7
- data.tar.gz: a84cd2cef18c8f229826b47236edd8749345de2bfb51be1705109d623b0fefec7b09088f46244df206f85665420fb22dbdc3d8a250e617a8ab45876e95fc99d0
6
+ metadata.gz: 4906ac6a4ddacb5061c870a2e7e484741c60b488a8efb5051187d768c7a9a990d73b4bb5ba47ff9cf48980a63197da25890c428b27aaddb5caf69e06931ced0e
7
+ data.tar.gz: 8dd810d48fcbbd70f858ff4fd511a9c79f29131f13968b2e990483a79e927cd6f7841fcbf47dd6ea63933ea09b7319ff630b1d337085e4a4a731eb606a9c8cc8
@@ -94,7 +94,7 @@ release:
94
94
  - exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
95
95
  - exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
96
96
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
97
- - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.xml" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
97
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT" || true; fi
98
98
  - exit $test_run_exit_code
99
99
 
100
100
  .ce-qa:
@@ -143,7 +143,7 @@ release:
143
143
  .rspec-report-opts:
144
144
  variables:
145
145
  FILE_SAFE_JOB_NAME: $(echo $CI_JOB_NAME | sed 's/[ /]/_/g')
146
- RSPEC_REPORT_OPTS: "--format RspecJunitFormatter --out \"tmp/rspec-${CI_JOB_ID}.xml\" --format html --out \"tmp/rspec-${FILE_SAFE_JOB_NAME}.htm\" --color --format documentation"
146
+ RSPEC_REPORT_OPTS: "--format QA::Support::JsonFormatter --out \"tmp/rspec-${CI_JOB_ID}.json\" --format RspecJunitFormatter --out \"tmp/rspec-${CI_JOB_ID}.xml\" --format html --out \"tmp/rspec-${FILE_SAFE_JOB_NAME}.htm\" --color --format documentation"
147
147
 
148
148
  .quarantine:
149
149
  allow_failure: true
@@ -370,7 +370,7 @@ ce:update:
370
370
  script:
371
371
  - exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=CE} ${RELEASE:=CE} -- $RSPEC_REPORT_OPTS || test_run_exit_code=$?
372
372
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
373
- - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.xml" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
373
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
374
374
  - exit $test_run_exit_code
375
375
  extends:
376
376
  - .test
@@ -384,7 +384,7 @@ ce:update-quarantine:
384
384
  script:
385
385
  - exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=CE} ${RELEASE:=CE} -- --tag quarantine --tag ~orchestrated $RSPEC_REPORT_OPTS || test_run_exit_code=$?
386
386
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
387
- - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.xml" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
387
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
388
388
  - exit $test_run_exit_code
389
389
  extends:
390
390
  - .test
@@ -397,7 +397,7 @@ ee:update:
397
397
  script:
398
398
  - exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=EE} ${RELEASE:=EE} -- $RSPEC_REPORT_OPTS || test_run_exit_code=$?
399
399
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
400
- - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.xml" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
400
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
401
401
  - exit $test_run_exit_code
402
402
  extends:
403
403
  - .test
@@ -411,7 +411,7 @@ ee:update-quarantine:
411
411
  script:
412
412
  - exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=EE} ${RELEASE:=EE} -- --tag quarantine --tag ~orchestrated $RSPEC_REPORT_OPTS || test_run_exit_code=$?
413
413
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
414
- - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.xml" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
414
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT"; fi
415
415
  - exit $test_run_exit_code
416
416
  extends:
417
417
  - .test
@@ -82,6 +82,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
82
82
  | `GEO_MAX_DB_REPLICATION_TIME` | `120` | Maximum time that a test will wait for database data to appear on a Geo secondary node. | No|
83
83
  | `JIRA_ADMIN_USERNAME` |- | Username for authenticating with Jira server as admin. | No|
84
84
  | `JIRA_ADMIN_PASSWORD` |- | Password for authenticating with Jira server as admin. | No|
85
+ | `CACHE_NAMESPACE_NAME` | `true` | Cache namespace name for groups. | No|
85
86
 
86
87
  ## [Supported Remote Grid environment variables](./running_against_remote_grid.md)
87
88
 
@@ -135,6 +136,10 @@ For example, the following command would use the image named `gitlab/gitlab-ee:n
135
136
  $ gitlab-qa Test::Instance::Image EE
136
137
  ```
137
138
 
139
+ To run EE tests, the `EE_LICENSE` environment variable needs to be set:
140
+
141
+ `$ export EE_LICENSE=$(cat /path/to/GitLab.gitlab_license)`
142
+
138
143
  ## Examples
139
144
 
140
145
  ### `Test::Instance::Image CE|EE|<full image address>`
@@ -240,6 +245,25 @@ $ gitlab-qa Test::Integration::Geo EE
240
245
 
241
246
  [test-geo]: https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/ee/scenario/test/geo.rb
242
247
 
248
+ ### `Test::Integration::GitalyCluster CE|EE|<full image address>`
249
+
250
+ This tests [Gitaly Cluster](https://docs.gitlab.com/ee/administration/gitaly/praefect.html),
251
+ a clustered configuration of the Gitaly repository storage service.
252
+
253
+ The scenario configures and starts several docker containers to
254
+ represent the [recommended minimum configuration](https://docs.gitlab.com/ee/administration/gitaly/praefect.html#requirements-for-configuring-a-gitaly-cluster)
255
+ of a Gitaly Cluster.
256
+
257
+ To run tests against the GitLab container, a GitLab QA (`gitlab/gitlab-qa`)
258
+ container is spun up and tests are run from it by running the
259
+ `Test::Instance::All` scenario with the `:gitaly_cluster` tag.
260
+
261
+ Example:
262
+
263
+ ```
264
+ $ gitlab-qa Test::Integration::GitalyCluster EE
265
+ ```
266
+
243
267
  ### `Test::Integration::LDAPNoTLS CE|EE|<full image address>`
244
268
 
245
269
  This tests that a GitLab instance works as expected with an external
@@ -97,9 +97,12 @@ module Gitlab
97
97
  end
98
98
 
99
99
  module Report
100
+ autoload :JsonTestResults, 'gitlab/qa/report/json_test_results'
101
+ autoload :JUnitTestResults, 'gitlab/qa/report/junit_test_results'
100
102
  autoload :PrepareStageReports, 'gitlab/qa/report/prepare_stage_reports'
101
103
  autoload :ResultsInIssues, 'gitlab/qa/report/results_in_issues'
102
104
  autoload :SummaryTable, 'gitlab/qa/report/summary_table'
105
+ autoload :TestResult, 'gitlab/qa/report/test_result'
103
106
  autoload :UpdateScreenshotPath, 'gitlab/qa/report/update_screenshot_path'
104
107
  end
105
108
 
@@ -41,26 +41,16 @@ module Gitlab
41
41
  raise NotImplementedError, "#{self.class.name} must specify a docker image tag as DOCKER_IMAGE_TAG"
42
42
  end
43
43
 
44
- def instance
44
+ def instance(skip_teardown: false)
45
45
  instance_no_teardown do
46
46
  yield self if block_given?
47
47
  end
48
48
  ensure
49
- teardown
49
+ teardown unless skip_teardown
50
50
  end
51
51
 
52
52
  alias_method :launch_and_teardown_instance, :instance
53
53
 
54
- def instance_no_teardown
55
- prepare
56
- start
57
- reconfigure
58
- wait_until_ready
59
- process_exec_commands
60
-
61
- yield self if block_given?
62
- end
63
-
64
54
  def prepare
65
55
  prepare_docker_image
66
56
  prepare_network
@@ -147,6 +137,16 @@ module Gitlab
147
137
  raise 'Invalid instance name!' unless name
148
138
  end
149
139
 
140
+ def instance_no_teardown
141
+ prepare
142
+ start
143
+ reconfigure
144
+ wait_until_ready
145
+ process_exec_commands
146
+
147
+ yield self if block_given?
148
+ end
149
+
150
150
  def teardown?
151
151
  !Runtime::Scenario.attributes.include?(:teardown) || Runtime::Scenario.teardown
152
152
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Gitlab
6
+ module QA
7
+ module Report
8
+ class JsonTestResults
9
+ include Enumerable
10
+
11
+ def initialize(file)
12
+ @testcases = JSON.parse(File.read(file))['examples'].map { |test| TestResult.from_json(test) }
13
+ end
14
+
15
+ def each(&block)
16
+ @testcases.each(&block)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+
5
+ module Gitlab
6
+ module QA
7
+ module Report
8
+ class JUnitTestResults
9
+ include Enumerable
10
+
11
+ def initialize(file)
12
+ @testcases = Nokogiri::XML(File.read(file)).xpath('//testcase').map { |test| TestResult.from_junit(test) }
13
+ end
14
+
15
+ def each(&block)
16
+ @testcases.each(&block)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -46,7 +46,18 @@ module Gitlab
46
46
 
47
47
  Dir.glob(files).each do |file|
48
48
  puts "Reporting tests in #{file}"
49
- Nokogiri::XML(File.open(file)).xpath('//testcase').each do |test|
49
+ extension = File.extname(file)
50
+
51
+ case extension
52
+ when '.json'
53
+ test_results = Report::JsonTestResults.new(file)
54
+ when '.xml'
55
+ test_results = Report::JUnitTestResults.new(file)
56
+ else
57
+ raise "Unknown extension #{extension}"
58
+ end
59
+
60
+ test_results.each do |test|
50
61
  report_test(test)
51
62
  end
52
63
  end
@@ -99,9 +110,9 @@ module Gitlab
99
110
  end
100
111
 
101
112
  def report_test(test)
102
- return if test.search('skipped').any?
113
+ return if test.skipped
103
114
 
104
- puts "Reporting test: #{test['file']} | #{test['name']}"
115
+ puts "Reporting test: #{test.file} | #{test.name}"
105
116
 
106
117
  issue = find_issue(test)
107
118
  if issue
@@ -124,29 +135,37 @@ module Gitlab
124
135
  Gitlab.create_issue(
125
136
  project,
126
137
  title_from_test(test),
127
- { description: "### Full description\n\n#{search_safe(test['name'])}\n\n### File path\n\n#{test['file']}", labels: 'status::automated' }
138
+ { description: "### Full description\n\n#{search_safe(test.name)}\n\n### File path\n\n#{test.file}", labels: 'status::automated' }
128
139
  )
129
140
  end
130
141
  end
131
142
 
143
+ # rubocop:disable Metrics/AbcSize
132
144
  def find_issue(test)
133
145
  handle_gitlab_client_exceptions do
146
+ return Gitlab.issue(project, id_from_testcase_url(test.testcase)) if test.testcase
147
+
134
148
  issues = Gitlab.issues(project, { search: search_term(test) })
135
149
  .auto_paginate
136
150
  .select { |issue| issue.state == 'opened' && issue.title.strip == title_from_test(test) }
137
151
 
138
- warn(%(Too many issues found with the file path "#{test['file']}" and name "#{test['name']}")) if issues.many?
152
+ warn(%(Too many issues found with the file path "#{test.file}" and name "#{test.name}")) if issues.many?
139
153
 
140
154
  issues.first
141
155
  end
142
156
  end
157
+ # rubocop:enable Metrics/AbcSize
158
+
159
+ def id_from_testcase_url(url)
160
+ url.split('/').last.to_i
161
+ end
143
162
 
144
163
  def search_term(test)
145
- %("#{test['file']}" "#{search_safe(test['name'])}")
164
+ %("#{test.file}" "#{search_safe(test.name)}")
146
165
  end
147
166
 
148
167
  def title_from_test(test)
149
- title = "#{partial_file_path(test['file'])} | #{search_safe(test['name'])}".strip
168
+ title = "#{partial_file_path(test.file)} | #{search_safe(test.name)}".strip
150
169
 
151
170
  return title unless title.length > MAX_TITLE_LENGTH
152
171
 
@@ -162,7 +181,7 @@ module Gitlab
162
181
  end
163
182
 
164
183
  def note_status(issue, test)
165
- return if failures(test).empty?
184
+ return if test.failures.empty?
166
185
 
167
186
  note = note_content(test)
168
187
 
@@ -176,7 +195,7 @@ module Gitlab
176
195
  end
177
196
 
178
197
  def note_content(test)
179
- errors = failures(test).each_with_object([]) do |failure, text|
198
+ errors = test.failures.each_with_object([]) do |failure, text|
180
199
  text << <<~TEXT
181
200
  Error:
182
201
  ```
@@ -185,7 +204,7 @@ module Gitlab
185
204
 
186
205
  Stacktrace:
187
206
  ```
188
- #{failure.content}
207
+ #{failure['stacktrace']}
189
208
  ```
190
209
  TEXT
191
210
  end.join("\n\n")
@@ -231,7 +250,7 @@ module Gitlab
231
250
  def update_labels(issue, test)
232
251
  labels = issue.labels
233
252
  labels.delete_if { |label| label.start_with?("#{pipeline}::") }
234
- labels << (failures(test).empty? ? "#{pipeline}::passed" : "#{pipeline}::failed")
253
+ labels << (test.failures.empty? ? "#{pipeline}::passed" : "#{pipeline}::failed")
235
254
  labels << "Enterprise Edition" if ee_test?(test)
236
255
  quarantine_job? ? labels << "quarantine" : labels.delete("quarantine")
237
256
 
@@ -242,11 +261,7 @@ module Gitlab
242
261
  # rubocop:enable Metrics/AbcSize
243
262
 
244
263
  def ee_test?(test)
245
- test['file'] =~ %r{features/ee/(api|browser_ui)}
246
- end
247
-
248
- def failures(test)
249
- test.search('failure')
264
+ test.file =~ %r{features/ee/(api|browser_ui)}
250
265
  end
251
266
 
252
267
  def pipeline
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Report
6
+ class TestResult
7
+ attr_accessor :name, :file, :skipped, :failures, :testcase
8
+
9
+ def self.from_json(test)
10
+ new.tap do |test_result|
11
+ test_result.name = test['full_description']
12
+ test_result.file = test['file_path']
13
+ test_result.skipped = test['status'] == 'pending'
14
+ test_result.failures = failures_from_json_exceptions(test)
15
+ test_result.testcase = test['testcase']
16
+ end
17
+ end
18
+
19
+ def self.from_junit(test)
20
+ new.tap do |test_result|
21
+ test_result.name = test['name']
22
+ test_result.file = test['file']
23
+ test_result.skipped = test.search('skipped').any?
24
+ test_result.failures = failures_from_junit_exceptions(test)
25
+ end
26
+ end
27
+
28
+ def self.failures_from_json_exceptions(test)
29
+ return [] unless test.key?('exceptions')
30
+
31
+ test['exceptions'].map do |exception|
32
+ spec_file_first_index = exception['backtrace'].rindex do |line|
33
+ line.include?(File.basename(test['file_path']))
34
+ end
35
+
36
+ {
37
+ 'message' => "#{exception['class']}: #{exception['message']}",
38
+ 'stacktrace' => exception['backtrace'].slice(0..spec_file_first_index).join("\n")
39
+ }
40
+ end
41
+ end
42
+ private_class_method :failures_from_json_exceptions
43
+
44
+ def self.failures_from_junit_exceptions(test)
45
+ failures = test.search('failure')
46
+ return [] if failures.empty?
47
+
48
+ failures.map do |exception|
49
+ trace = exception.content.split("\n").map(&:strip)
50
+ spec_file_first_index = trace.rindex do |line|
51
+ line.include?(File.basename(test['file']))
52
+ end
53
+
54
+ {
55
+ 'message' => "#{exception['type']}: #{exception['message']}",
56
+ 'stacktrace' => trace.slice(0..spec_file_first_index).join("\n")
57
+ }
58
+ end
59
+ end
60
+ private_class_method :failures_from_junit_exceptions
61
+ end
62
+ end
63
+ end
64
+ end
@@ -80,7 +80,8 @@ module Gitlab
80
80
  'GEO_MAX_DB_REPLICATION_TIME' => :geo_max_db_replication_time,
81
81
  'JIRA_HOSTNAME' => :jira_hostname,
82
82
  'JIRA_ADMIN_USERNAME' => :jira_admin_username,
83
- 'JIRA_ADMIN_PASSWORD' => :jira_admin_password
83
+ 'JIRA_ADMIN_PASSWORD' => :jira_admin_password,
84
+ 'CACHE_NAMESPACE_NAME' => :cache_namespace_name
84
85
  }.freeze
85
86
 
86
87
  ENV_VARIABLES.each_value do |accessor|
@@ -7,13 +7,13 @@ module Gitlab
7
7
  attr_reader :gitlab_name, :spec_suite
8
8
 
9
9
  def initialize
10
- @gitlab_name = 'gitlab-gitaly-ha'
10
+ @gitlab_name = 'gitlab-gitaly-cluster'
11
11
  @primary_node_name = 'gitaly1'
12
12
  @secondary_node_name = 'gitaly2'
13
13
  @tertiary_node_name = 'gitaly3'
14
14
  @praefect_node_name = 'praefect'
15
15
  @database = 'postgres'
16
- @spec_suite = 'Test::Integration::GitalyHA'
16
+ @spec_suite = 'Test::Instance::All'
17
17
  @network = 'test'
18
18
  end
19
19
 
@@ -26,7 +26,7 @@ module Gitlab
26
26
  sql_node = Component::PostgreSQL.new.tap do |sql|
27
27
  sql.name = @database
28
28
  sql.network = @network
29
- sql.instance_no_teardown do
29
+ sql.instance(skip_teardown: true) do
30
30
  sql.run_psql '-d template1 -c "CREATE DATABASE praefect_production OWNER postgres"'
31
31
  end
32
32
  end
@@ -39,7 +39,7 @@ module Gitlab
39
39
 
40
40
  praefect.omnibus_config = praefect_omnibus_configuration
41
41
 
42
- praefect.instance_no_teardown
42
+ praefect.instance(skip_teardown: true)
43
43
  end
44
44
 
45
45
  Component::Gitlab.perform do |gitlab|
@@ -49,7 +49,10 @@ module Gitlab
49
49
 
50
50
  gitlab.omnibus_config = gitlab_omnibus_configuration
51
51
  gitlab.instance do
52
- puts "Running Gitaly HA specs!"
52
+ puts "Running Gitaly Cluster specs!"
53
+
54
+ rspec_args << "--" unless rspec_args.include?('--')
55
+ rspec_args << %w[--tag gitaly_cluster]
53
56
 
54
57
  Component::Specs.perform do |specs|
55
58
  specs.suite = spec_suite
@@ -190,7 +193,7 @@ module Gitlab
190
193
  gitaly.network = @network
191
194
  gitaly.skip_availability_check = true
192
195
  gitaly.omnibus_config = gitaly_omnibus_configuration
193
- gitaly.instance_no_teardown
196
+ gitaly.instance(skip_teardown: true)
194
197
  end
195
198
  end
196
199
  end
@@ -65,6 +65,7 @@ module Gitlab
65
65
  def omnibus_config_with_praefect
66
66
  <<~OMNIBUS
67
67
  gitaly['enable'] = true;
68
+ gitaly['listen_addr'] = '0.0.0.0:8075';
68
69
  gitaly['auth_token'] = 'secret-token';
69
70
  gitaly['storage'] = [
70
71
  {
@@ -82,7 +83,7 @@ module Gitlab
82
83
  praefect['virtual_storages'] = {
83
84
  'default' => {
84
85
  'praefect-gitaly-0' => {
85
- 'address' => 'unix:/var/opt/gitlab/gitaly/gitaly.socket',
86
+ 'address' => 'tcp://localhost:8075',
86
87
  'token' => 'secret-token',
87
88
  'primary' => true
88
89
  }
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module QA
3
- VERSION = '5.17.0'.freeze
3
+ VERSION = '6.1.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.17.0
4
+ version: 6.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grzegorz Bizon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2020-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -257,9 +257,12 @@ files:
257
257
  - lib/gitlab/qa/docker/shellout.rb
258
258
  - lib/gitlab/qa/docker/volumes.rb
259
259
  - lib/gitlab/qa/release.rb
260
+ - lib/gitlab/qa/report/json_test_results.rb
261
+ - lib/gitlab/qa/report/junit_test_results.rb
260
262
  - lib/gitlab/qa/report/prepare_stage_reports.rb
261
263
  - lib/gitlab/qa/report/results_in_issues.rb
262
264
  - lib/gitlab/qa/report/summary_table.rb
265
+ - lib/gitlab/qa/report/test_result.rb
263
266
  - lib/gitlab/qa/report/update_screenshot_path.rb
264
267
  - lib/gitlab/qa/reporter.rb
265
268
  - lib/gitlab/qa/runner.rb