gitlab-qa 8.15.0 → 8.15.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: 6f8235a7dbc3c61a6f538089128dc4a5ba7219c435a2fd107b9be7a7f8e79a23
4
- data.tar.gz: 3ce7fbdcc46f5f7b7a25e87af2b681c8ef314c48afef9a7e0c139361dcfed7bc
3
+ metadata.gz: 5e196210d260a788803b5c5d8109b645d8acc3e8d1a60a5bd8ab46110dc94aa9
4
+ data.tar.gz: c656c359e25150a2e8fde966aee83ca704924704149e6b3413519d9753123590
5
5
  SHA512:
6
- metadata.gz: a44d2a6d39df421e02e6dcb96b41aa32a53a65366f983e853376bde2c6b0e17ab1099ccd1b675c4c0b4b93e2bdd94bf661fff2e02edf8e68d43a7e2535ae756c
7
- data.tar.gz: 919565630e715538ed4867339a27e553d90a80b3185b1caab4303aa65ef026a882f3fbb6446cbf5eb0e95944659da6adf6270ba2ecece62b85e60117248d9aee
6
+ metadata.gz: 4a6a2bd9405ae3fb3a972609e94d82412f037340c15f9d55a64ff12b6e11aec7e71e730697857de43493b4fea8e022e167f23a98caba4992bf49e06339ca8caa
7
+ data.tar.gz: 75adc84ac465f2c1f1d2d4ebc4d2c511c929c9b4c5a04b84b7f78fef12e3de9989aca9df7a69a2b359cc66196e1849cd0d25fc8d9432cabb45cff083006e1a67
@@ -192,29 +192,6 @@ relate_test_failures:
192
192
  - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
193
193
  - bundle exec exe/gitlab-qa-report --relate-failure-issue "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_FAILURES_REPORTING_PROJECT" --max-diff-ratio "$QA_FAILURES_MAX_DIFF_RATIO" $QA_FAILURES_REPORTER_OPTIONS
194
194
 
195
- .notify_upstream:
196
- stage: notify
197
- image: ruby:3.0-alpine
198
- dependencies: []
199
- before_script:
200
- - gem install gitlab --no-document
201
-
202
- notify_upstream:success:
203
- extends: .notify_upstream
204
- script:
205
- - bin/notify_upstream success
206
- rules:
207
- - if: '$TOP_UPSTREAM_SOURCE_PROJECT && $TOP_UPSTREAM_MERGE_REQUEST_IID && $TOP_UPSTREAM_SOURCE_SHA'
208
- when: on_success
209
-
210
- notify_upstream:failure:
211
- extends: .notify_upstream
212
- script:
213
- - bin/notify_upstream failure
214
- rules:
215
- - if: '$TOP_UPSTREAM_SOURCE_PROJECT && $TOP_UPSTREAM_MERGE_REQUEST_IID && $TOP_UPSTREAM_SOURCE_SHA'
216
- when: on_failure
217
-
218
195
  .notify_slack:
219
196
  image: alpine
220
197
  stage: notify
@@ -10,6 +10,7 @@ ce:decomposition_multiple_db:
10
10
  parallel: 5
11
11
  variables:
12
12
  GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config decomposition_multiple_db"
13
+ GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
13
14
 
14
15
  ee:decomposition_multiple_db:
15
16
  extends:
@@ -23,3 +24,4 @@ ee:decomposition_multiple_db:
23
24
  parallel: 5
24
25
  variables:
25
26
  GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config decomposition_multiple_db"
27
+ GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-qa (8.15.0)
4
+ gitlab-qa (8.15.2)
5
5
  activesupport (~> 6.1)
6
6
  gitlab (~> 4.18.0)
7
7
  http (~> 5.0)
@@ -249,4 +249,4 @@ DEPENDENCIES
249
249
  webmock (= 3.7.0)
250
250
 
251
251
  BUNDLED WITH
252
- 2.3.24
252
+ 2.4.2
@@ -1114,3 +1114,12 @@ $ gitlab-qa Test::Instance::Chaos
1114
1114
 
1115
1115
  [test-instance]: https://gitlab.com/gitlab-org/gitlab/blob/master/qa/qa/scenario/test/instance/all.rb
1116
1116
  [smoke-instance]: https://gitlab.com/gitlab-org/gitlab/blob/master/qa/qa/scenario/test/instance/smoke.rb
1117
+
1118
+ ### `Test::Integration::Import`
1119
+
1120
+ This scenario will run specs tagged with `:import` tags.
1121
+
1122
+ These tests are designed to validate import functionality by importing projects from `GitHub` or another `GitLab` instance.
1123
+ This scenario type spins up 2 gitlab instances and additionally an instance with simple http mock server.
1124
+
1125
+ If environment variable `QA_MOCK_GITHUB` is set to `true`, all calls to `github.com` are rerouted to mock server.
@@ -14,7 +14,7 @@ module Gitlab
14
14
 
15
15
  def initialize
16
16
  super
17
- self.release = 'EE'
17
+ self.release = 'CE'
18
18
  @cluster_config = Component::GitalyCluster::GitalyClusterConfig.new
19
19
  @gitaly_port = 8075
20
20
  @ports = [gitaly_port]
@@ -28,6 +28,12 @@ module Gitlab
28
28
  @release = QA::Release.new(release)
29
29
  end
30
30
 
31
+ def pull
32
+ docker.login(**release.login_params) if release.login_params
33
+
34
+ super
35
+ end
36
+
31
37
  def reconfigure
32
38
  setup_omnibus
33
39
  @docker.attach(name) do |line, wait|
@@ -28,7 +28,8 @@ module Gitlab
28
28
  :seed_admin_token,
29
29
  :seed_db,
30
30
  :skip_server_hooks,
31
- :gitaly_tls
31
+ :gitaly_tls,
32
+ :secrets
32
33
 
33
34
  attr_writer :name, :relative_path
34
35
 
@@ -50,6 +51,7 @@ module Gitlab
50
51
  @seed_admin_token = Runtime::Scenario.seed_admin_token
51
52
  @seed_db = Runtime::Scenario.seed_db
52
53
  @skip_server_hooks = Runtime::Scenario.skip_server_hooks
54
+ @secrets = []
53
55
 
54
56
  self.release = 'CE'
55
57
  end
@@ -64,7 +66,16 @@ module Gitlab
64
66
  return unless Runtime::Env.test_license_mode?
65
67
 
66
68
  @omnibus_gitlab_rails_env['GITLAB_LICENSE_MODE'] = 'test'
67
- @omnibus_gitlab_rails_env['CUSTOMER_PORTAL_URL'] = 'https://customers.staging.gitlab.com'
69
+ @omnibus_gitlab_rails_env['CUSTOMER_PORTAL_URL'] = Runtime::Env.customer_portal_url
70
+ end
71
+
72
+ # Sets GITLAB_QA_USER_AGENT as a Rail environment variable so that it can be used by GitLab to bypass features
73
+ # that can't be automated.
74
+ def set_qa_user_agent
75
+ return if Runtime::Env.gitlab_qa_user_agent.to_s.strip.empty?
76
+
77
+ @omnibus_gitlab_rails_env['GITLAB_QA_USER_AGENT'] = Runtime::Env.gitlab_qa_user_agent
78
+ secrets << Runtime::Env.gitlab_qa_user_agent
68
79
  end
69
80
 
70
81
  def elastic_url=(url)
@@ -119,9 +130,14 @@ module Gitlab
119
130
  def prepare_gitlab_omnibus_config
120
131
  set_formless_login_token
121
132
  set_license_mode
122
- return if omnibus_gitlab_rails_env.empty?
133
+ set_qa_user_agent
134
+ env = @omnibus_gitlab_rails_env.merge(
135
+ {
136
+ 'GITLAB_ALLOW_SEPARATE_CI_DATABASE' => Runtime::Env.allow_separate_ci_database.to_s
137
+ }
138
+ )
123
139
 
124
- @omnibus_configuration << "gitlab_rails['env'] = #{@omnibus_gitlab_rails_env}"
140
+ @omnibus_configuration << "gitlab_rails['env'] = #{env}"
125
141
  end
126
142
 
127
143
  def start # rubocop:disable Metrics/AbcSize
@@ -203,7 +219,7 @@ module Gitlab
203
219
  return if commands.empty?
204
220
 
205
221
  Runtime::Logger.info("Running exec_commands...")
206
- commands.each { |command| @docker.exec(name, command) }
222
+ commands.each { |command| @docker.exec(name, command, mask_secrets: secrets) }
207
223
  end
208
224
 
209
225
  def rails_version
@@ -263,7 +279,7 @@ module Gitlab
263
279
  end
264
280
 
265
281
  def setup_omnibus
266
- @docker.write_files(name) do |f|
282
+ @docker.write_files(name, mask_secrets: secrets) do |f|
267
283
  f.write('/etc/gitlab/gitlab.rb', @omnibus_configuration.to_s)
268
284
  end
269
285
  end
@@ -14,7 +14,7 @@ module Gitlab
14
14
 
15
15
  def initialize
16
16
  super
17
- self.release = 'EE'
17
+ self.release = 'CE'
18
18
  @cluster_config = Component::GitalyCluster::GitalyClusterConfig.new
19
19
  @ports = [cluster_config.praefect_port]
20
20
  end
@@ -27,6 +27,12 @@ module Gitlab
27
27
  @release = QA::Release.new(release)
28
28
  end
29
29
 
30
+ def pull
31
+ docker.login(**release.login_params) if release.login_params
32
+
33
+ super
34
+ end
35
+
30
36
  def reconfigure
31
37
  setup_omnibus
32
38
  @docker.attach(name) do |line|
@@ -58,7 +58,7 @@ module Gitlab
58
58
  # This is content
59
59
  # That goes within /opt/other
60
60
  # TEXT)
61
- def write_files(name)
61
+ def write_files(name, mask_secrets: nil)
62
62
  exec(name, yield(
63
63
  Class.new do
64
64
  # @param file The name of the file
@@ -76,13 +76,13 @@ module Gitlab
76
76
  %(echo "#{contents}" >> #{file};)
77
77
  end
78
78
  end
79
- ))
79
+ ), mask_secrets: mask_secrets)
80
80
  end
81
81
 
82
- def exec(name, command)
82
+ def exec(name, command, mask_secrets: nil)
83
83
  cmd = ['exec']
84
84
  cmd << '--privileged' if privileged_command?(command)
85
- Docker::Command.execute(%(#{cmd.join(' ')} #{name} bash -c "#{command.gsub('"', '\\"')}"))
85
+ Docker::Command.execute(%(#{cmd.join(' ')} #{name} bash -c "#{command.gsub('"', '\\"')}"), mask_secrets: mask_secrets)
86
86
  end
87
87
 
88
88
  def read_file(image, tag, path, &block)
@@ -369,6 +369,14 @@ module Gitlab
369
369
  env_var_value_if_defined('QA_COM_REGISTRY') || 'registry.gitlab.com'
370
370
  end
371
371
 
372
+ def customer_portal_url
373
+ env_var_value_if_defined('CUSTOMER_PORTAL_URL') || 'https://customers.staging.gitlab.com'
374
+ end
375
+
376
+ def allow_separate_ci_database
377
+ enabled?(env_var_value_if_defined('GITLAB_ALLOW_SEPARATE_CI_DATABASE'), default: false)
378
+ end
379
+
372
380
  private
373
381
 
374
382
  def enabled?(value, default: true)
@@ -15,7 +15,7 @@ module Gitlab
15
15
 
16
16
  # Customer Portal URL that is targeted
17
17
  def customer_portal_url
18
- ENV.fetch('CUSTOMER_PORTAL_URL', 'https://customers.staging.gitlab.com')
18
+ Runtime::Env.customer_portal_url
19
19
  end
20
20
  end
21
21
  end
@@ -52,11 +52,7 @@ module Gitlab
52
52
  def start_gitlab_instances(release)
53
53
  instances = [
54
54
  { instance: source_gitlab, name: "import-source", additional_hosts: [] },
55
- {
56
- instance: target_gitlab,
57
- name: "import-target",
58
- additional_hosts: ["api.github.com:#{mock_server.ip_address}"]
59
- }
55
+ { instance: target_gitlab, name: "import-target", additional_hosts: mocked_hosts }
60
56
  ]
61
57
 
62
58
  ::Parallel.each(instances, in_threads: 2) do |gitlab_instance|
@@ -88,6 +84,16 @@ module Gitlab
88
84
  }
89
85
  end
90
86
  end
87
+
88
+ # List of hosts that should be redirected to mock server
89
+ #
90
+ # @return [Array]
91
+ def mocked_hosts
92
+ hosts = []
93
+ hosts << "api.github.com:#{mock_server.ip_address}" if Runtime::Env.enabled?(ENV["QA_MOCK_GITHUB"])
94
+
95
+ hosts
96
+ end
91
97
  end
92
98
  end
93
99
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '8.15.0'
5
+ VERSION = '8.15.2'
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.15.0
4
+ version: 8.15.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-01-05 00:00:00.000000000 Z
11
+ date: 2023-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -318,7 +318,6 @@ files:
318
318
  - bin/expect_exit_code_and_text
319
319
  - bin/gen-cert.sh
320
320
  - bin/merge_html_reports
321
- - bin/notify_upstream
322
321
  - bin/setup
323
322
  - bin/slack
324
323
  - docs/README.md
data/bin/notify_upstream DELETED
@@ -1,98 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'gitlab'
5
-
6
- # Default to "Multi-pipeline (from 'gitlab-org/gitlab-qa' 'notify_upstream:*' jobs)" from current project
7
- api_token = ENV.fetch('GITLAB_QA_PROJECT_ACCESS_TOKEN') do
8
- puts "The $GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN variable is deprecated in favor of a dedicated project access token: $GITLAB_QA_PROJECT_ACCESS_TOKEN."
9
- puts "See https://gitlab.com/groups/gitlab-org/quality/-/epics/17 for more details."
10
- ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
11
- end
12
-
13
- # Configure credentials to be used with gitlab gem
14
- Gitlab.configure do |config|
15
- config.endpoint = 'https://gitlab.com/api/v4'
16
- config.private_token = api_token
17
- end
18
-
19
- class CommitComment
20
- UPSTREAM_COMMENT = <<~COMMENT
21
- - The [`gitlab-qa-mirror` downstream pipeline](%<pipeline_url>s) for https://gitlab.com/%<project_path>s/-/merge_requests/%<mr_iid>s/diffs?commit_id=%<commit_sha>s %<status_with_icon>s
22
- COMMENT
23
- IDENTIFIABLE_NOTE_TAG = 'gitlab-qa:upstream-notification-note'
24
-
25
- def self.mr?
26
- ENV.key?('TOP_UPSTREAM_SOURCE_PROJECT') &&
27
- ENV.key?('TOP_UPSTREAM_MERGE_REQUEST_IID') &&
28
- ENV.key?('TOP_UPSTREAM_SOURCE_SHA') &&
29
- !ENV['TOP_UPSTREAM_SOURCE_PROJECT'].to_s.empty? &&
30
- !ENV['TOP_UPSTREAM_MERGE_REQUEST_IID'].to_s.empty? &&
31
- !ENV['TOP_UPSTREAM_SOURCE_SHA'].to_s.empty?
32
- end
33
-
34
- def self.post!(status)
35
- unless mr?
36
- puts "All the 'TOP_UPSTREAM_SOURCE_PROJECT', 'TOP_UPSTREAM_MERGE_REQUEST_IID', and 'TOP_UPSTREAM_SOURCE_SHA' environment variables need to be present. We cannot post a comment on the upstream merge request."
37
- return
38
- end
39
-
40
- # Look for an existing note
41
- upstream_notification_note = Gitlab.merge_request_notes(project_path, mr_iid).auto_paginate.find do |note|
42
- note.body.include?(IDENTIFIABLE_NOTE_TAG)
43
- end
44
-
45
- if upstream_notification_note
46
- Gitlab.edit_merge_request_note(project_path, mr_iid, upstream_notification_note.id, [upstream_notification_note.body, build_comment(status)].join("\n"))
47
- else
48
- Gitlab.create_merge_request_comment(project_path, mr_iid, "<!-- #{IDENTIFIABLE_NOTE_TAG} -->\n#{build_comment(status)}")
49
- end
50
- rescue Gitlab::Error::Error => error
51
- puts "Ignoring the following error: #{error}"
52
- end
53
-
54
- def self.project_path
55
- ENV['TOP_UPSTREAM_SOURCE_PROJECT']
56
- end
57
-
58
- def self.mr_iid
59
- ENV['TOP_UPSTREAM_MERGE_REQUEST_IID']
60
- end
61
-
62
- def self.pipeline_url
63
- ENV['CI_PIPELINE_URL']
64
- end
65
-
66
- def self.commit_sha
67
- ENV['TOP_UPSTREAM_SOURCE_SHA']
68
- end
69
-
70
- def self.build_comment(status)
71
- format(UPSTREAM_COMMENT,
72
- project_path: project_path,
73
- mr_iid: mr_iid,
74
- pipeline_url: pipeline_url,
75
- status_with_icon: status_with_icon(status),
76
- commit_sha: commit_sha
77
- )
78
- end
79
-
80
- def self.status_with_icon(status)
81
- case status
82
- when :success
83
- "passed. :white_check_mark:"
84
- when :failure
85
- "failed! :boom:"
86
- end
87
- end
88
-
89
- def self.post_to_mr(project_id, mr_iid, comment)
90
- Gitlab.create_merge_request_comment(project_id, mr_iid, comment)
91
- end
92
- end
93
-
94
- status = ARGV.shift.to_s.strip
95
-
96
- abort "Please provide a status!" if status == ''
97
-
98
- CommitComment.post!(status.to_sym)