gitlab-qa 14.19.2 → 14.20.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 +4 -4
- data/CONTRIBUTING.md +4 -4
- data/Gemfile.lock +3 -2
- data/LICENSE +1 -1
- data/gitlab-qa.gemspec +1 -0
- data/lib/gitlab/qa/component/ai_gateway.rb +27 -0
- data/lib/gitlab/qa/component/gitlab.rb +7 -0
- data/lib/gitlab/qa/runtime/env.rb +10 -0
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +22 -10
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous_ai.rb +46 -0
- data/lib/gitlab/qa/version.rb +1 -1
- data/support/setup/gitlab_duo_setup.rb +4 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2d322ac696cbbc43376ab9e0119aa17b5ca27b326a4e98c0bed1e7e62bb0d94
|
4
|
+
data.tar.gz: ac29c33e952e89531a792294fe91ecbc251562b77eefb2aa17c46a969b1916a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e16ec9338d9c0e45854dd81c15219afd7a4960882debbccf75a5a0db426b682f416ce9b41264ba560c8f384b81f822a3bbf51f66b2a0022a9d16d78d7a406c47
|
7
|
+
data.tar.gz: d4f1c16afbf492572dd0d3830c592e38c0182224b2524ab1992e5ffa1e286bcfec7f6a21da837b8de45cea4109bc703ecc6c828a64ab51c7a72d04b50e342956
|
data/CONTRIBUTING.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
## Developer Certificate of Origin + License
|
2
2
|
|
3
|
-
By contributing to GitLab
|
4
|
-
conditions for Your present and future Contributions submitted to GitLab
|
5
|
-
Except for the license granted herein to GitLab
|
6
|
-
distributed by GitLab
|
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.
|
4
|
+
gitlab-qa (14.20.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.
|
98
|
+
ffi (1.17.0)
|
98
99
|
ffi-compiler (1.0.1)
|
99
100
|
ffi (>= 1.0.0)
|
100
101
|
rake
|
data/LICENSE
CHANGED
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
|
@@ -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
|
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
|
data/lib/gitlab/qa/version.rb
CHANGED
@@ -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.
|
4
|
+
version: 14.20.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-
|
11
|
+
date: 2024-11-11 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
|
@@ -477,6 +491,7 @@ files:
|
|
477
491
|
- lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
|
478
492
|
- lib/gitlab/qa/scenario/test/omnibus/image.rb
|
479
493
|
- lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
|
494
|
+
- lib/gitlab/qa/scenario/test/omnibus/update_from_previous_ai.rb
|
480
495
|
- lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
|
481
496
|
- lib/gitlab/qa/service/cluster_provider/base.rb
|
482
497
|
- lib/gitlab/qa/service/cluster_provider/k3d.rb
|