gitlab-qa 14.19.2 → 14.21.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: a0fcc43f5168f06e595be207434f527027f248c79e9d8cf8e487145ea04a5d4d
4
- data.tar.gz: da86ca5c312a88236b2caedfa415780875169b45372b4139957e0ec0319b6539
3
+ metadata.gz: d84483452fba7a39c684e4b5b7f772a63712c6d400027b579dca7769ce231c7e
4
+ data.tar.gz: 64e52ceaa976d1dc0a3f513a26e71f4e529c5a9d9eea8c39474f683da963d718
5
5
  SHA512:
6
- metadata.gz: 775235af65035d6f707aeb42fb1f06d92bf93fac76f809e433cb910041209d4a887bef3202f142e172c1effa4ff4796bbae22cfb5093d508200ddb6e975aff44
7
- data.tar.gz: bc3ea767044fa48b63d3c4b6fb6f340eff33d5c9e2fae9b7770be46ffe7188962cbb4b89350a15cbdca58623f87f3f019bf2db276efe151b88a0e98667bda26a
6
+ metadata.gz: 8633d6f704664548214395cf5e3b8560e6776f0052d5dcf1da91d3239e5489236877495b9bc077043f4efeb588e15272c595dfda0dc147386818d2a3c505d476
7
+ data.tar.gz: ca524f4c69c44fab4241cfd836bf2ed0f10047a3b030f942474ed360c8f7356a3ee678aa56dbb59a38697add270dcc8a881789a84fc3c675eb5b65f6395d0425
data/CONTRIBUTING.md CHANGED
@@ -1,9 +1,9 @@
1
1
  ## Developer Certificate of Origin + License
2
2
 
3
- By contributing to GitLab B.V., You accept and agree to the following terms and
4
- conditions for Your present and future Contributions submitted to GitLab B.V.
5
- Except for the license granted herein to GitLab B.V. and recipients of software
6
- distributed by GitLab B.V., You reserve all right, title, and interest in and to
3
+ By contributing to GitLab Inc., You accept and agree to the following terms and
4
+ conditions for Your present and future Contributions submitted to GitLab Inc.
5
+ Except for the license granted herein to GitLab Inc. and recipients of software
6
+ distributed by GitLab Inc., You reserve all right, title, and interest in and to
7
7
  Your Contributions. All Contributions are subject to the following DCO + License
8
8
  terms.
9
9
 
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-qa (14.19.2)
4
+ gitlab-qa (14.21.0)
5
5
  activesupport (>= 6.1, < 7.2)
6
+ ffi (~> 1.17)
6
7
  gitlab (~> 4.19)
7
8
  http (~> 5.0)
8
9
  nokogiri (~> 1.10)
@@ -94,7 +95,7 @@ GEM
94
95
  faraday-patron (1.0.0)
95
96
  faraday-rack (1.0.0)
96
97
  faraday-retry (1.0.3)
97
- ffi (1.15.5)
98
+ ffi (1.17.0)
98
99
  ffi-compiler (1.0.1)
99
100
  ffi (>= 1.0.0)
100
101
  rake
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011-2017 GitLab B.V.
1
+ Copyright (c) 2011-2017 GitLab Inc.
2
2
 
3
3
  With regard to the GitLab Software:
4
4
 
data/gitlab-qa.gemspec CHANGED
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec|
37
37
  spec.add_development_dependency 'webmock', '3.7.0'
38
38
 
39
39
  spec.add_runtime_dependency 'activesupport', '>= 6.1', '< 7.2'
40
+ spec.add_runtime_dependency 'ffi', '~> 1.17'
40
41
  spec.add_runtime_dependency 'gitlab', '~> 4.19'
41
42
  spec.add_runtime_dependency 'http', '~> 5.0'
42
43
  spec.add_runtime_dependency 'nokogiri', '~> 1.10'
@@ -7,6 +7,8 @@ module Gitlab
7
7
  DOCKER_IMAGE = 'registry.gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/model-gateway'
8
8
  DOCKER_IMAGE_TAG = 'latest'
9
9
 
10
+ LOG_FILE_NAME = 'modelgateway_debug.log'
11
+
10
12
  # Test signing key to enable direct connection code completions
11
13
  # https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/97f54f4b7e43258a39bba7f29f38fe44bd316ce5/example.env#L79
12
14
  TEST_SIGNING_KEY =
@@ -87,17 +89,42 @@ module Gitlab
87
89
  @name ||= 'ai-gateway'
88
90
  end
89
91
 
92
+ def host_log_path
93
+ File.join(Runtime::Env.host_artifacts_dir, name, 'logs', LOG_FILE_NAME)
94
+ end
95
+
96
+ def container_log_path
97
+ File.join('home', 'aigateway', 'app', LOG_FILE_NAME)
98
+ end
99
+
90
100
  def configure_environment(gitlab_hostname:)
91
101
  @environment = {
92
102
  'AIGW_GITLAB_URL' => "http://#{gitlab_hostname}",
93
103
  'AIGW_GITLAB_API_URL' => "http://#{gitlab_hostname}/api/v4",
94
104
  'AIGW_CUSTOMER_PORTAL_URL' => Runtime::Env.customer_portal_url,
95
105
  'AIGW_MOCK_MODEL_RESPONSES' => true,
106
+ 'AIGW_LOGGING__LEVEL' => 'debug',
107
+ 'AIGW_LOGGING__TO_FILE' => LOG_FILE_NAME,
96
108
  'AIGW_SELF_SIGNED_JWT__SIGNING_KEY' => TEST_SIGNING_KEY,
97
109
  'AIGW_SELF_SIGNED_JWT__VALIDATION_KEY' => TEST_VALIDATION_KEY,
98
110
  'CLOUD_CONNECTOR_SERVICE_NAME' => 'gitlab-ai-gateway'
99
111
  }
100
112
  end
113
+
114
+ def teardown
115
+ # Copy debug log file to host artifacts directory
116
+ begin
117
+ Docker::Command.execute(
118
+ "cp #{name}:#{container_log_path} #{host_log_path}"
119
+ )
120
+ rescue Support::ShellCommand::StatusError => e
121
+ Runtime::Logger.warn(
122
+ "Unable to copy log file from #{name}: #{e.message}"
123
+ )
124
+ end
125
+
126
+ super
127
+ end
101
128
  end
102
129
  end
103
130
  end
@@ -68,6 +68,12 @@ module Gitlab
68
68
  @omnibus_gitlab_rails_env['CUSTOMER_PORTAL_URL'] = Runtime::Env.customer_portal_url
69
69
  end
70
70
 
71
+ def set_cloud_connector_base_url
72
+ return if Runtime::Env.cloud_connector_base_url.blank?
73
+
74
+ @omnibus_gitlab_rails_env['CLOUD_CONNECTOR_BASE_URL'] = Runtime::Env.cloud_connector_base_url
75
+ end
76
+
71
77
  # Sets GITLAB_QA_USER_AGENT as a Rail environment variable so that it can be used by GitLab to bypass features
72
78
  # that can't be automated.
73
79
  def set_qa_user_agent
@@ -138,6 +144,7 @@ module Gitlab
138
144
  set_formless_login_token
139
145
  set_license_mode
140
146
  set_qa_user_agent
147
+ set_cloud_connector_base_url
141
148
  env = @omnibus_gitlab_rails_env.merge(
142
149
  {
143
150
  'GITLAB_ALLOW_SEPARATE_CI_DATABASE' => Runtime::Env.allow_separate_ci_database.to_s,
@@ -327,6 +327,12 @@ module Gitlab
327
327
  end
328
328
  end
329
329
 
330
+ def require_cloud_connector_base_url!
331
+ return unless cloud_connector_base_url.blank?
332
+
333
+ raise ArgumentError, "Please provide CLOUD_CONNECTOR_BASE_URL"
334
+ end
335
+
330
336
  def require_initial_password!
331
337
  return unless env_var_value_if_defined('GITLAB_INITIAL_ROOT_PASSWORD').to_s.strip.empty?
332
338
 
@@ -434,6 +440,10 @@ module Gitlab
434
440
  env_var_value_if_defined('CUSTOMER_PORTAL_URL') || 'https://customers.staging.gitlab.com'
435
441
  end
436
442
 
443
+ def cloud_connector_base_url
444
+ env_var_value_if_defined('CLOUD_CONNECTOR_BASE_URL')
445
+ end
446
+
437
447
  def ee_activation_code
438
448
  env_var_value_if_defined('QA_EE_ACTIVATION_CODE')
439
449
  end
@@ -15,19 +15,41 @@ module Gitlab
15
15
  class Import < Scenario::Template
16
16
  def initialize
17
17
  @network = Runtime::Env.docker_network
18
- @source_gitlab = Component::Gitlab.new.tap { |gitlab| gitlab.network = @network }
19
- @target_gitlab = Component::Gitlab.new.tap { |gitlab| gitlab.network = @network }
20
- @mock_server = Component::MockServer.new.tap do |server|
21
- server.network = @network
22
- server.tls = true
23
- end
18
+
19
+ @source_gitlab = new_gitlab_instance
20
+ @target_gitlab = new_gitlab_instance
21
+ @mock_server = new_mock_server
22
+ @mail_hog_server = new_mail_hog_server
23
+ @spec_suite = 'Test::Integration::Import'
24
+ end
25
+
26
+ attr_reader :source_gitlab, :target_gitlab, :mock_server, :network, :spec_suite, :mail_hog_server
27
+
28
+ def configure_omnibus(gitlab, mail_hog)
29
+ raise NotImplementedError
24
30
  end
25
31
 
26
- attr_reader :source_gitlab, :target_gitlab, :mock_server, :network
32
+ # Import tests that spins up two gitlab instances
33
+ #
34
+ # @example
35
+ # perform(gitlab-ee, gitlab-ee:17.4.0-ee.0)
36
+ # => will perform import from gitlab-ee:17.4.0-ee.0 to gitlab-ee
37
+ #
38
+ # @param [String] target_release target gitlab instance version release docker image(default)
39
+ # @param [String] source_release source gitlab instance version, if its not passed takes the target release as default
40
+ # @param [Array] *rspec_args rspec arguments
41
+ # @return [void]
42
+ def perform(target_release, source_release = nil, *rspec_args)
43
+ # When source_release isn't actually passed but RSpec args arg passed with `-- rspec_args...`,
44
+ # source_release is wrongly set to `--`, so we fix that here.
45
+ if source_release == "--"
46
+ rspec_args.prepend('--')
47
+ source_release = nil
48
+ end
27
49
 
28
- def perform(release, *rspec_args)
50
+ source_release = target_release if source_release.nil?
29
51
  start_mock_server
30
- start_gitlab_instances(release)
52
+ start_gitlab_instances(source_release, target_release)
31
53
 
32
54
  run_specs(rspec_args)
33
55
  ensure
@@ -38,6 +60,45 @@ module Gitlab
38
60
 
39
61
  private
40
62
 
63
+ # Initialize a mailhog instance
64
+ #
65
+ # @note this does not start the instance
66
+ # @return [Gitlab::QA::Component::MailHog] Mailhog instance
67
+ def new_mail_hog_server
68
+ Component::MailHog.new.tap do |mail_hog|
69
+ mail_hog.network = @network
70
+ mail_hog.set_mailhog_hostname
71
+ end
72
+ end
73
+
74
+ # Check if MailHog server is needed
75
+ #
76
+ # @param [Hash] gitlab_instance
77
+ # @return [Boolean]
78
+ def mail_hog_server_needed?(gitlab_instance)
79
+ respond_to?(:orchestrate_mail_hog_server) && gitlab_instance[:name] == "import-target"
80
+ end
81
+
82
+ # Start MailHog server
83
+ #
84
+ # @param [Hash] gitlab_instance
85
+ # @return [void]
86
+ def start_mail_hog_server(gitlab_instance)
87
+ configure_omnibus(gitlab_instance[:instance], mail_hog_server)
88
+ mail_hog_server.start_instance
89
+ end
90
+
91
+ # Initialize a mock server instance
92
+ #
93
+ # @note this does not start the instance
94
+ # @return [Gitlab::QA::Component::MockServer] mock server instance
95
+ def new_mock_server
96
+ Component::MockServer.new.tap do |server|
97
+ server.network = @network
98
+ server.tls = true
99
+ end
100
+ end
101
+
41
102
  # Start mock server instance
42
103
  #
43
104
  # @return [void]
@@ -45,25 +106,60 @@ module Gitlab
45
106
  mock_server.start_instance
46
107
  end
47
108
 
48
- # Start gitlab instance
109
+ # Initialize a gitlab instance
49
110
  #
50
- # @param [Gitlab::QA::Release] release
111
+ # @note this does not start the instance
112
+ # @return [Gitlab::QA::Component::Gitlab] gitlab instance
113
+ def new_gitlab_instance
114
+ Component::Gitlab.new.tap { |gitlab| gitlab.network = @network }
115
+ end
116
+
117
+ # Setup GitLab instance
118
+ #
119
+ # @param [Hash] gitlab_instance
51
120
  # @return [void]
52
- def start_gitlab_instances(release)
53
- instances = [
54
- { instance: source_gitlab, name: "import-source", additional_hosts: [] },
55
- { instance: target_gitlab, name: "import-target", additional_hosts: mocked_hosts }
121
+ def setup_gitlab_instance(gitlab_instance)
122
+ gitlab_instance[:instance].tap do |gitlab|
123
+ configure_gitlab_instance(gitlab, gitlab_instance)
124
+ start_mail_hog_server(gitlab_instance) if mail_hog_server_needed?(gitlab_instance)
125
+ gitlab.start_instance
126
+ end
127
+ end
128
+
129
+ # Configure GitLab instance
130
+ #
131
+ # @param [Gitlab::QA::Component::Gitlab] gitlab
132
+ # @param [Hash] gitlab_instance
133
+ # @return [void]
134
+ def configure_gitlab_instance(gitlab, gitlab_instance)
135
+ gitlab.name = gitlab_instance[:name]
136
+ gitlab.release = gitlab_instance[:release]
137
+ gitlab.additional_hosts = gitlab_instance[:additional_hosts]
138
+ gitlab.seed_admin_token = true
139
+ end
140
+
141
+ # Build GitLab instances
142
+ #
143
+ # @param [Gitlab::QA::Release] source_release
144
+ # @param [Gitlab::QA::Release] target_release
145
+ # @return [Array<Hash>]
146
+ def build_gitlab_instances(source_release, target_release)
147
+ [
148
+ { instance: source_gitlab, name: "import-source", additional_hosts: [], release: source_release },
149
+ { instance: target_gitlab, name: "import-target", additional_hosts: mocked_hosts, release: target_release }
56
150
  ]
151
+ end
152
+
153
+ # Start gitlab instance
154
+ #
155
+ # @param [Gitlab::QA::Release] source_release
156
+ # @param [Gitlab::QA::Release] target_release
157
+ # @return [void]
158
+ def start_gitlab_instances(source_release, target_release)
159
+ instances = build_gitlab_instances(source_release, target_release)
57
160
 
58
161
  ::Parallel.each(instances, in_threads: 2) do |gitlab_instance|
59
- gitlab_instance[:instance].tap do |gitlab|
60
- gitlab.name = gitlab_instance[:name]
61
- gitlab.release = release
62
- gitlab.additional_hosts = gitlab_instance[:additional_hosts]
63
- gitlab.seed_admin_token = true
64
-
65
- gitlab.start_instance
66
- end
162
+ setup_gitlab_instance(gitlab_instance)
67
163
  end
68
164
  end
69
165
 
@@ -71,9 +167,11 @@ module Gitlab
71
167
  #
72
168
  # @param [Array] rspec_args
73
169
  # @return [void]
74
- def run_specs(rspec_args)
170
+ def run_specs(rspec_args) # rubocop:disable Metrics/AbcSize
171
+ Runtime::Logger.info("Running #{spec_suite} specs!")
172
+
75
173
  Component::Specs.perform do |specs|
76
- specs.suite = "Test::Integration::Import"
174
+ specs.suite = spec_suite
77
175
  specs.release = target_gitlab.release
78
176
  specs.network = network
79
177
  specs.args = [target_gitlab.address, *rspec_args]
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Scenario
6
+ module Test
7
+ module Integration
8
+ # Scenario type for testing importers with smtp enabled in target gitlab instance
9
+ class ImportWithSMTP < Import
10
+ attr_reader :orchestrate_mail_hog_server
11
+
12
+ def initialize
13
+ @spec_suite = 'Test::Integration::ImportWithSMTP'
14
+ @orchestrate_mail_hog_server = true
15
+ super
16
+ end
17
+
18
+ def configure_omnibus(gitlab, mail_hog)
19
+ gitlab.omnibus_configuration << <<~OMNIBUS
20
+ gitlab_rails['smtp_enable'] = true;
21
+ gitlab_rails['smtp_address'] = '#{mail_hog.hostname}';
22
+ gitlab_rails['smtp_port'] = 1025;
23
+ OMNIBUS
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -8,6 +8,8 @@ module Gitlab
8
8
  class UpdateFromPrevious < Scenario::Template
9
9
  using Rainbow
10
10
 
11
+ attr_reader :rspec_args
12
+
11
13
  # Test update from N - 1 (major|minor|patch) version to current release
12
14
  # Run health check (or smoke if below 17.1.0) test suite on previous release to populate some data in database before update
13
15
  #
@@ -36,6 +38,7 @@ module Gitlab
36
38
  semver_component,
37
39
  from_edition || @current_release.edition
38
40
  ).fetch
41
+ @rspec_args = rspec_args
39
42
 
40
43
  upgrade_info = "#{[*upgrade_path, current_release].join(' => ')} (#{current_version})".bright
41
44
  Runtime::Logger.info("Performing gitlab update: #{upgrade_info}")
@@ -43,6 +46,18 @@ module Gitlab
43
46
  update(rspec_args)
44
47
  end
45
48
 
49
+ def seeding_suite_args
50
+ first_release_version = extract_version(upgrade_path.first.release)
51
+ if Gem::Version.new(first_release_version) < Gem::Version.new("17.1.0")
52
+ ["--", "--tag", "smoke"]
53
+ else
54
+ ["--", "--tag", "health_check"]
55
+ end
56
+ end
57
+
58
+ # this is any action or event that may happen before the seeding suite is run
59
+ def pre_seeding_environment_actions(gitlab); end
60
+
46
61
  private
47
62
 
48
63
  attr_reader :current_release, :upgrade_path
@@ -62,16 +77,9 @@ module Gitlab
62
77
  # rubocop:disable Metrics/AbcSize
63
78
  def update(rspec_args)
64
79
  Docker::Volumes.new.with_temporary_volumes do |volumes|
65
- first_release_version = extract_version(upgrade_path.first.release)
66
- seeding_suite_args = if Gem::Version.new(first_release_version) < Gem::Version.new("17.1.0")
67
- ["--", "--tag", "smoke"]
68
- else
69
- ["--", "--tag", "health_check"]
70
- end
71
-
72
80
  # deploy first release in upgrade path and run specs to populate db
73
81
  Runtime::Logger.info("Running the first release in upgrade path: #{upgrade_path.first}")
74
- run_gitlab(upgrade_path.first, volumes, seeding_suite_args)
82
+ run_gitlab(upgrade_path.first, volumes, seeding_suite_args, seeding_run: true)
75
83
 
76
84
  # deploy releases in upgrade path
77
85
  upgrade_path[1..].each do |release|
@@ -91,7 +99,7 @@ module Gitlab
91
99
  # @param [Gitlab::QA::Release] release
92
100
  # @param [Hash] volumes
93
101
  # @return [void]
94
- def run_gitlab(release, volumes, rspec_args = [], skip_setup: false) # rubocop:disable Metrics/AbcSize
102
+ def run_gitlab(release, volumes, rspec_args = [], skip_setup: false, seeding_run: false) # rubocop:disable Metrics/AbcSize
95
103
  Runtime::Logger.info("Deploying release: #{release.to_s.bright}")
96
104
 
97
105
  Component::Gitlab.perform do |gitlab|
@@ -99,6 +107,7 @@ module Gitlab
99
107
  gitlab.release = release
100
108
  gitlab.volumes = volumes
101
109
  gitlab.network = Runtime::Env.docker_network
110
+ gitlab.set_ee_activation_code if @use_cloud_license
102
111
 
103
112
  if skip_setup
104
113
  gitlab.skip_server_hooks = true
@@ -108,7 +117,10 @@ module Gitlab
108
117
 
109
118
  next gitlab.launch_and_teardown_instance unless run_specs?(release)
110
119
 
111
- gitlab.instance { run_specs(gitlab, release, rspec_args) }
120
+ gitlab.instance do
121
+ pre_seeding_environment_actions(gitlab) if seeding_run
122
+ run_specs(gitlab, release, rspec_args)
123
+ end
112
124
  end
113
125
  end
114
126
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Scenario
6
+ module Test
7
+ module Omnibus
8
+ class UpdateFromPreviousAi < UpdateFromPrevious
9
+ def initialize
10
+ Runtime::Env.require_cloud_connector_base_url!
11
+ @use_cloud_license = true
12
+ @perform_license_sync_event = false
13
+ super
14
+ end
15
+
16
+ def seeding_suite_args
17
+ super + (rspec_args[1..] || [])
18
+ end
19
+
20
+ def pre_seeding_environment_actions(gitlab)
21
+ super
22
+ set_up_gitlab_duo(gitlab)
23
+ end
24
+
25
+ private
26
+
27
+ def set_up_gitlab_duo(gitlab)
28
+ setup_src_path = File.expand_path('../../../../../../support/setup', __dir__)
29
+ setup_dest_path = '/tmp/setup-scripts'
30
+
31
+ Runtime::Logger.info('Setting up Gitlab Duo on GitLab instance')
32
+
33
+ gitlab.docker.copy(gitlab.name, setup_src_path, setup_dest_path)
34
+
35
+ gitlab.docker.exec(
36
+ gitlab.name,
37
+ "ASSIGN_SEATS=true HAS_ADD_ON=true gitlab-rails runner #{setup_dest_path}/gitlab_duo_setup.rb",
38
+ mask_secrets: gitlab.secrets
39
+ )
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '14.19.2'
5
+ VERSION = '14.21.0'
6
6
  end
7
7
  end
data/lib/gitlab/qa.rb CHANGED
@@ -48,7 +48,8 @@ module Gitlab
48
48
  'registry_tls' => 'RegistryTLS',
49
49
  'jetbrains' => 'JetBrains',
50
50
  'vscode' => 'VSCode',
51
- 'cli_commands' => 'CLICommands'
51
+ 'cli_commands' => 'CLICommands',
52
+ 'import_with_smtp' => 'ImportWithSMTP'
52
53
  )
53
54
 
54
55
  loader.setup
@@ -88,10 +88,14 @@ class GitlabDuoSetup
88
88
  end
89
89
 
90
90
  def duo_pro_add_on
91
+ return nil unless GitlabSubscriptions::AddOn.respond_to?(:code_suggestions)
92
+
91
93
  find_add_on_purchase(add_on: GitlabSubscriptions::AddOn.code_suggestions.last)
92
94
  end
93
95
 
94
96
  def duo_enterprise_add_on
97
+ return nil unless GitlabSubscriptions::AddOn.respond_to?(:duo_enterprise)
98
+
95
99
  find_add_on_purchase(add_on: GitlabSubscriptions::AddOn.duo_enterprise.last)
96
100
  end
97
101
 
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: 14.19.2
4
+ version: 14.21.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-11-04 00:00:00.000000000 Z
11
+ date: 2024-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -212,6 +212,20 @@ dependencies:
212
212
  - - "<"
213
213
  - !ruby/object:Gem::Version
214
214
  version: '7.2'
215
+ - !ruby/object:Gem::Dependency
216
+ name: ffi
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '1.17'
222
+ type: :runtime
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '1.17'
215
229
  - !ruby/object:Gem::Dependency
216
230
  name: gitlab
217
231
  requirement: !ruby/object:Gem::Requirement
@@ -456,6 +470,7 @@ files:
456
470
  - lib/gitlab/qa/scenario/test/integration/gitlab_pages.rb
457
471
  - lib/gitlab/qa/scenario/test/integration/group_saml.rb
458
472
  - lib/gitlab/qa/scenario/test/integration/import.rb
473
+ - lib/gitlab/qa/scenario/test/integration/import_with_smtp.rb
459
474
  - lib/gitlab/qa/scenario/test/integration/instance_saml.rb
460
475
  - lib/gitlab/qa/scenario/test/integration/integrations.rb
461
476
  - lib/gitlab/qa/scenario/test/integration/jira.rb
@@ -477,6 +492,7 @@ files:
477
492
  - lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
478
493
  - lib/gitlab/qa/scenario/test/omnibus/image.rb
479
494
  - lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
495
+ - lib/gitlab/qa/scenario/test/omnibus/update_from_previous_ai.rb
480
496
  - lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
481
497
  - lib/gitlab/qa/service/cluster_provider/base.rb
482
498
  - lib/gitlab/qa/service/cluster_provider/k3d.rb