gitlab-qa 8.5.0 → 8.6.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: dca93a1000f4f0b6db2759a97ae3a6a7edf18e06576d689edd42180d794da943
4
- data.tar.gz: bcd56912a666905a27513c07c24ef1ae72c24b463d68aba9b2dcff84e0011743
3
+ metadata.gz: cedbc28c7349c22c56af141445b79d1c7c29444f66d191f465a91e8d0fc244ae
4
+ data.tar.gz: 9b857df0ad9502c59aa081fb7b1ebb2865bc7c4339c49c6f37a356c08eb1740a
5
5
  SHA512:
6
- metadata.gz: 0563f087686a1bf24c5fa1581993897d0cf553465636748d51929bcdad1b35d2a26362c7f40849cd5979ecb9eb4b476f3efde52f1c59142892fddbb497b254fb
7
- data.tar.gz: 50f84dd5ae8abca78d6b2488e9213c1f1195e0c58279697eac7a2d943c7dd147f857a328840f9369d16829b2fc581c882a1bcee28093ee1b68400d924897f5f3
6
+ metadata.gz: 4231efbe843158613694938667c8402d5dcbddeb918fb19cf00743839c80c5bc05917c264474d48e3558dd33978e9973baecad229a041873473faa1ce376122c
7
+ data.tar.gz: 7a9c4a7efd9b4759c6c487e8872ca76cfb35cc6b91cebc90e2c77b61d742b5ed2f68acd044f6b86cbfce30d822423ddd4e09cae2b5c26dd4ea2a26a72364c5e9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-qa (8.5.0)
4
+ gitlab-qa (8.6.0)
5
5
  activesupport (~> 6.1)
6
6
  gitlab (~> 4.18.0)
7
7
  http (~> 5.0)
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Gitlab
6
+ module QA
7
+ module Report
8
+ module FindSetDri
9
+ def set_dri_via_group(product_group, test)
10
+ parse_json_with_sets
11
+ fetch_stage_sets(test)
12
+
13
+ return @sets.sample['username'] if @stage_sets.empty?
14
+
15
+ fetch_group_sets(product_group)
16
+
17
+ if @group_sets.empty?
18
+ @stage_sets.sample['username']
19
+ else
20
+ @group_sets.sample['username']
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def parse_json_with_sets
27
+ response = Support::HttpRequest.make_http_request(
28
+ url: 'https://gitlab-org.gitlab.io/gitlab-roulette/roulette.json'
29
+ )
30
+ @sets = JSON.parse(response.body).select { |user| user['role'].include?('software-engineer-in-test') }
31
+ end
32
+
33
+ def fetch_stage_sets(test)
34
+ @stage_sets = @sets.select { |user| user['role'].include?(test.stage.split("_").map(&:capitalize).join(" ")) }
35
+ end
36
+
37
+ def fetch_group_sets(product_group)
38
+ @group_sets = @stage_sets.select { |user| user['role'].include?(product_group.split("_").map { |word| word == 'and' ? word : word.capitalize }.join(" ")) }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -101,6 +101,13 @@ module Gitlab
101
101
  end
102
102
  end
103
103
 
104
+ def find_user_id(username:)
105
+ handle_gitlab_client_exceptions do
106
+ user = Gitlab.users(username: username)&.first
107
+ user['id'] unless user.nil?
108
+ end
109
+ end
110
+
104
111
  def upload_file(file_fullpath:)
105
112
  ignore_gitlab_client_exceptions do
106
113
  Gitlab.upload_file(project, file_fullpath)
@@ -3,12 +3,15 @@
3
3
  require 'nokogiri'
4
4
  require 'active_support/core_ext/enumerable'
5
5
  require 'rubygems/text'
6
+ require 'active_support/core_ext/integer/time'
6
7
 
7
8
  module Gitlab
8
9
  module QA
9
10
  module Report
10
11
  # Uses the API to create or update GitLab issues with the results of tests from RSpec report files.
11
12
  class RelateFailureIssue < ReportAsIssue
13
+ include FindSetDri
14
+
12
15
  DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION = 0.15
13
16
  FAILURE_STACKTRACE_REGEX = %r{((.*Failure\/Error:(?<stacktrace>.+))|(?<stacktrace>.+))}m.freeze
14
17
  ISSUE_STACKTRACE_REGEX = /### Stack trace\s*(```)#{FAILURE_STACKTRACE_REGEX}(```)/m.freeze
@@ -74,6 +77,8 @@ module Gitlab
74
77
 
75
78
  post_or_update_failed_job_note(issue, test)
76
79
 
80
+ assign_dri(issue, test)
81
+
77
82
  issue
78
83
  end
79
84
 
@@ -218,6 +223,17 @@ module Gitlab
218
223
 
219
224
  section
220
225
  end
226
+
227
+ def assign_dri(issue, test)
228
+ if test.product_group?
229
+ dri = set_dri_via_group(test.product_group, test)
230
+ dri_id = gitlab.find_user_id(username: dri)
231
+ gitlab.edit_issue(iid: issue.iid, options: { assignee_id: dri_id, due_date: Date.today + 1.month })
232
+ puts " => Assigning #{dri} as DRI for the issue."
233
+ else
234
+ puts " => No product group metadata found for test '#{test.name}'"
235
+ end
236
+ end
221
237
  end
222
238
  end
223
239
  end
@@ -103,6 +103,14 @@ module Gitlab
103
103
  report['screenshot']['image'] if screenshot?
104
104
  end
105
105
 
106
+ def product_group?
107
+ report['product_group'].present?
108
+ end
109
+
110
+ def product_group
111
+ report['product_group'] if product_group?
112
+ end
113
+
106
114
  private
107
115
 
108
116
  # rubocop:disable Metrics/AbcSize
@@ -279,14 +279,6 @@ module Gitlab
279
279
  raise ArgumentError, "Please provide GITLAB_QA_CONTAINER_REGISTRY_ACCESS_TOKEN"
280
280
  end
281
281
 
282
- def require_kubernetes_environment!
283
- %w[GCLOUD_ACCOUNT_EMAIL GCLOUD_ACCOUNT_KEY CLOUDSDK_CORE_PROJECT].each do |env_key|
284
- unless ENV.key?(env_key)
285
- raise ArgumentError, "Environment variable #{env_key} must be set to run kubernetes specs"
286
- end
287
- end
288
- end
289
-
290
282
  def require_aws_s3_environment!
291
283
  %w[AWS_S3_REGION AWS_S3_KEY_ID AWS_S3_ACCESS_KEY AWS_S3_BUCKET_NAME].each do |env_key|
292
284
  unless ENV.key?(env_key)
@@ -320,14 +312,6 @@ module Gitlab
320
312
  )
321
313
  end
322
314
 
323
- def require_ssh_tunnel!
324
- %w[TUNNEL_SSH_PRIVATE_KEY TUNNEL_SERVER_HOSTNAME TUNNEL_SSH_USER].each do |env_key|
325
- unless ENV.key?(env_key)
326
- raise ArgumentError, "Environment variable #{env_key} must be set to run tunnel specs"
327
- end
328
- end
329
- end
330
-
331
315
  def override_default_password!
332
316
  require_initial_password!
333
317
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '8.5.0'
5
+ VERSION = '8.6.0'
6
6
  end
7
7
  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: 8.5.0
4
+ version: 8.6.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: 2022-09-28 00:00:00.000000000 Z
11
+ date: 2022-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -313,7 +313,6 @@ files:
313
313
  - lib/gitlab/qa/component/base.rb
314
314
  - lib/gitlab/qa/component/elasticsearch.rb
315
315
  - lib/gitlab/qa/component/gitlab.rb
316
- - lib/gitlab/qa/component/internet_tunnel.rb
317
316
  - lib/gitlab/qa/component/jira.rb
318
317
  - lib/gitlab/qa/component/ldap.rb
319
318
  - lib/gitlab/qa/component/mail_hog.rb
@@ -334,6 +333,7 @@ files:
334
333
  - lib/gitlab/qa/docker/volumes.rb
335
334
  - lib/gitlab/qa/release.rb
336
335
  - lib/gitlab/qa/report/base_test_results.rb
336
+ - lib/gitlab/qa/report/find_set_dri.rb
337
337
  - lib/gitlab/qa/report/generate_test_session.rb
338
338
  - lib/gitlab/qa/report/gitlab_issue_client.rb
339
339
  - lib/gitlab/qa/report/gitlab_issue_dry_client.rb
@@ -391,7 +391,6 @@ files:
391
391
  - lib/gitlab/qa/scenario/test/integration/instance_saml.rb
392
392
  - lib/gitlab/qa/scenario/test/integration/integrations.rb
393
393
  - lib/gitlab/qa/scenario/test/integration/jira.rb
394
- - lib/gitlab/qa/scenario/test/integration/kubernetes.rb
395
394
  - lib/gitlab/qa/scenario/test/integration/ldap.rb
396
395
  - lib/gitlab/qa/scenario/test/integration/ldap_no_server.rb
397
396
  - lib/gitlab/qa/scenario/test/integration/ldap_no_tls.rb
@@ -407,7 +406,6 @@ files:
407
406
  - lib/gitlab/qa/scenario/test/integration/saml.rb
408
407
  - lib/gitlab/qa/scenario/test/integration/service_ping_disabled.rb
409
408
  - lib/gitlab/qa/scenario/test/integration/smtp.rb
410
- - lib/gitlab/qa/scenario/test/integration/ssh_tunnel.rb
411
409
  - lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
412
410
  - lib/gitlab/qa/scenario/test/omnibus/image.rb
413
411
  - lib/gitlab/qa/scenario/test/omnibus/update.rb
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tempfile'
4
-
5
- module Gitlab
6
- module QA
7
- module Component
8
- class InternetTunnel < Base
9
- DOCKER_IMAGE = 'gitlab/ssh-tunnel'
10
- DOCKER_IMAGE_TAG = '1.0.0'
11
-
12
- attr_writer :gitlab_hostname
13
-
14
- def initialize
15
- super
16
-
17
- key_dir = ENV['CI_PROJECT_DIR'] || Dir.tmpdir
18
- @ssh_key = Tempfile.new('tunnel-ssh-private-key', key_dir)
19
- @ssh_key.write(ENV.fetch('TUNNEL_SSH_PRIVATE_KEY'))
20
- @ssh_key.close
21
-
22
- File.chmod(0o600, @ssh_key.path)
23
-
24
- @volumes['/root/.ssh/id_rsa'] = @ssh_key.path
25
- end
26
-
27
- def instance
28
- raise 'Please provide a block!' unless block_given?
29
-
30
- super
31
- end
32
-
33
- def url
34
- "https://#{subdomain}.#{tunnel_server_hostname}"
35
- end
36
-
37
- private
38
-
39
- def name
40
- @name ||= "ssh-tunnel-#{SecureRandom.hex(4)}"
41
- end
42
-
43
- def tunnel_server_hostname
44
- ENV.fetch("TUNNEL_SERVER_HOSTNAME")
45
- end
46
-
47
- def subdomain
48
- @subdomain ||= rand(30_000..49_000)
49
- end
50
-
51
- def start
52
- raise "Must set gitlab_hostname" unless @gitlab_hostname
53
-
54
- @docker.run(
55
- image: DOCKER_IMAGE,
56
- tag: DOCKER_IMAGE_TAG,
57
- args: ["-o StrictHostKeyChecking=no -N -R #{subdomain}:#{@gitlab_hostname}:80 #{ENV.fetch('TUNNEL_SSH_USER')}@#{tunnel_server_hostname}"]) do |command|
58
- command << '-d '
59
- command << "--name #{name}"
60
- command << "--net #{network}"
61
-
62
- @volumes.to_h.each do |to, from|
63
- command.volume(from, to, 'Z')
64
- end
65
- end
66
- end
67
-
68
- def teardown
69
- super
70
-
71
- @ssh_key.unlink
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml'
4
-
5
- module Gitlab
6
- module QA
7
- module Scenario
8
- module Test
9
- module Integration
10
- class Kubernetes < Scenario::Template
11
- def perform(release, *rspec_args)
12
- Runtime::Env.require_kubernetes_environment!
13
-
14
- Component::Gitlab.perform do |gitlab|
15
- gitlab.release = release
16
- gitlab.network = 'test'
17
-
18
- Component::InternetTunnel.perform do |tunnel_gitlab|
19
- Component::InternetTunnel.perform do |tunnel_registry|
20
- tunnel_gitlab.gitlab_hostname = gitlab.hostname
21
- tunnel_gitlab.network = 'test'
22
- tunnel_registry.gitlab_hostname = gitlab.hostname
23
- tunnel_registry.network = 'test'
24
-
25
- gitlab.omnibus_configuration << <<~OMNIBUS
26
- external_url '#{tunnel_gitlab.url}';
27
- nginx['listen_port'] = 80;
28
- nginx['listen_https'] = false;
29
-
30
- registry_external_url '#{tunnel_registry.url}';
31
- registry_nginx['listen_port'] = 80;
32
- registry_nginx['listen_https'] = false;
33
- OMNIBUS
34
-
35
- tunnel_gitlab.instance do
36
- tunnel_registry.instance do
37
- gitlab.instance do
38
- Component::Specs.perform do |specs|
39
- specs.suite = 'Test::Integration::Kubernetes'
40
- specs.release = gitlab.release
41
- specs.network = gitlab.network
42
- specs.args = [tunnel_gitlab.url, *rspec_args]
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Gitlab
4
- module QA
5
- module Scenario
6
- module Test
7
- module Integration
8
- class SSHTunnel < Scenario::Template
9
- def perform(release, *rspec_args)
10
- Runtime::Env.override_default_password!
11
- Runtime::Env.require_ssh_tunnel!
12
-
13
- Component::Gitlab.perform do |gitlab|
14
- gitlab.release = release
15
- gitlab.network = 'test'
16
-
17
- Component::InternetTunnel.perform do |tunnel_gitlab|
18
- Component::InternetTunnel.perform do |tunnel_registry|
19
- tunnel_gitlab.gitlab_hostname = gitlab.hostname
20
- tunnel_gitlab.network = 'test'
21
- tunnel_registry.gitlab_hostname = gitlab.hostname
22
- tunnel_registry.network = 'test'
23
-
24
- gitlab.omnibus_configuration << <<~OMNIBUS
25
- external_url '#{tunnel_gitlab.url}';
26
- nginx['listen_port'] = 80;
27
- nginx['listen_https'] = false;
28
- gitlab_rails['initial_root_password'] = '#{Runtime::Env.require_initial_password!}';
29
-
30
- registry_external_url '#{tunnel_registry.url}';
31
- registry_nginx['listen_port'] = 80;
32
- registry_nginx['listen_https'] = false;
33
- OMNIBUS
34
-
35
- tunnel_gitlab.instance do
36
- tunnel_registry.instance do
37
- gitlab.instance do
38
- Component::Specs.perform do |specs|
39
- specs.suite = 'Test::Integration::SSHTunnel'
40
- specs.release = gitlab.release
41
- specs.network = gitlab.network
42
- specs.args = [tunnel_gitlab.url, *rspec_args]
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end