gitlab-qa 14.19.1 → 14.20.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +11 -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,
|
@@ -41,6 +41,7 @@ module Gitlab
|
|
41
41
|
'CI_PROJECT_NAME' => :ci_project_name,
|
42
42
|
'CI_PROJECT_PATH' => :ci_project_path,
|
43
43
|
'CI_PROJECT_PATH_SLUG' => :ci_project_path_slug,
|
44
|
+
'CI_PROJECT_DIR' => :ci_project_dir,
|
44
45
|
'CI_RUNNER_ID' => :ci_runner_id,
|
45
46
|
'CI_SERVER_HOST' => :ci_server_host,
|
46
47
|
'CI_SERVER_PERSONAL_ACCESS_TOKEN' => :ci_server_personal_access_token,
|
@@ -326,6 +327,12 @@ module Gitlab
|
|
326
327
|
end
|
327
328
|
end
|
328
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
|
+
|
329
336
|
def require_initial_password!
|
330
337
|
return unless env_var_value_if_defined('GITLAB_INITIAL_ROOT_PASSWORD').to_s.strip.empty?
|
331
338
|
|
@@ -433,6 +440,10 @@ module Gitlab
|
|
433
440
|
env_var_value_if_defined('CUSTOMER_PORTAL_URL') || 'https://customers.staging.gitlab.com'
|
434
441
|
end
|
435
442
|
|
443
|
+
def cloud_connector_base_url
|
444
|
+
env_var_value_if_defined('CLOUD_CONNECTOR_BASE_URL')
|
445
|
+
end
|
446
|
+
|
436
447
|
def ee_activation_code
|
437
448
|
env_var_value_if_defined('QA_EE_ACTIVATION_CODE')
|
438
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
|
+
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
|