gitlab-qa 8.2.0 → 8.3.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/.gitlab/ci/jobs/metrics.gitlab-ci.yml +4 -12
- data/Gemfile.lock +1 -1
- data/lib/gitlab/qa/component/base.rb +6 -1
- data/lib/gitlab/qa/component/gitlab.rb +11 -6
- data/lib/gitlab/qa/docker/command.rb +4 -0
- data/lib/gitlab/qa/runtime/env.rb +0 -2
- data/lib/gitlab/qa/scenario/test/integration/metrics.rb +43 -0
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +115 -0
- data/lib/gitlab/qa/support/gitlab_upgrade_path.rb +94 -0
- data/lib/gitlab/qa/support/gitlab_version_info.rb +180 -0
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +6 -3
- data/lib/gitlab/qa/runtime/omnibus_configurations/metrics.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f11ebd2677dc7ba62bd4b55efc03ad8d9560c38a3e601897a9a201d3c09c8eae
|
4
|
+
data.tar.gz: f8db94175a79e62ae625e8b975fc49b03c4077ff608f40a85fa7ea7a5b3f859d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21199373f3dff6e7e9204062fec4e204309e33d3bd50994285691aa8b833e926262ac9359810ba5f0cc1a624168693a7e4f195e3abc819088b5bc2f6736f4d07
|
7
|
+
data.tar.gz: a7dc574dceebed5e61b2383030cd114df7cabd00c974d5e548bed6364a031d6617f8495716fc8b7eb6043b6ad33eb8db33adc0f7cc7b0125871dca8a704c6f26
|
@@ -5,10 +5,8 @@ ce:metrics:
|
|
5
5
|
- .high-capacity
|
6
6
|
- .ce-variables
|
7
7
|
- .rspec-report-opts
|
8
|
-
- .combined-gitlab-qa-options-script
|
9
8
|
variables:
|
10
|
-
|
11
|
-
QA_RSPEC_TAGS: "--tag metrics"
|
9
|
+
QA_SCENARIO: "Test::Integration::Metrics"
|
12
10
|
|
13
11
|
ce:metrics-quarantine:
|
14
12
|
extends:
|
@@ -18,10 +16,8 @@ ce:metrics-quarantine:
|
|
18
16
|
- .ce-variables
|
19
17
|
- .quarantine
|
20
18
|
- .rspec-report-opts
|
21
|
-
- .combined-gitlab-qa-options-script
|
22
19
|
variables:
|
23
|
-
|
24
|
-
QA_RSPEC_TAGS: "--tag metrics"
|
20
|
+
QA_SCENARIO: "Test::Integration::Metrics"
|
25
21
|
|
26
22
|
ee:metrics:
|
27
23
|
extends:
|
@@ -30,10 +26,8 @@ ee:metrics:
|
|
30
26
|
- .high-capacity
|
31
27
|
- .ee-variables
|
32
28
|
- .rspec-report-opts
|
33
|
-
- .combined-gitlab-qa-options-script
|
34
29
|
variables:
|
35
|
-
|
36
|
-
QA_RSPEC_TAGS: "--tag metrics"
|
30
|
+
QA_SCENARIO: "Test::Integration::Metrics"
|
37
31
|
|
38
32
|
ee:metrics-quarantine:
|
39
33
|
extends:
|
@@ -43,7 +37,5 @@ ee:metrics-quarantine:
|
|
43
37
|
- .ee-variables
|
44
38
|
- .quarantine
|
45
39
|
- .rspec-report-opts
|
46
|
-
- .combined-gitlab-qa-options-script
|
47
40
|
variables:
|
48
|
-
|
49
|
-
QA_RSPEC_TAGS: "--tag quarantine --tag metrics"
|
41
|
+
QA_SCENARIO: "Test::Integration::Metrics"
|
data/Gemfile.lock
CHANGED
@@ -7,13 +7,14 @@ module Gitlab
|
|
7
7
|
include Scenario::Actable
|
8
8
|
|
9
9
|
attr_reader :docker
|
10
|
-
attr_accessor :volumes, :network, :environment, :runner_network
|
10
|
+
attr_accessor :volumes, :ports, :network, :environment, :runner_network
|
11
11
|
attr_writer :name, :exec_commands
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@docker = Docker::Engine.new
|
15
15
|
@environment = {}
|
16
16
|
@volumes = {}
|
17
|
+
@ports = []
|
17
18
|
@network_aliases = []
|
18
19
|
@exec_commands = []
|
19
20
|
end
|
@@ -85,6 +86,10 @@ module Gitlab
|
|
85
86
|
command << "--net #{network}"
|
86
87
|
command << "--hostname #{hostname}"
|
87
88
|
|
89
|
+
@ports.each do |mapping|
|
90
|
+
command.port(mapping)
|
91
|
+
end
|
92
|
+
|
88
93
|
@volumes.to_h.each do |to, from|
|
89
94
|
command.volume(to, from, 'Z')
|
90
95
|
end
|
@@ -17,7 +17,7 @@ module Gitlab
|
|
17
17
|
using Rainbow
|
18
18
|
|
19
19
|
attr_reader :release, :omnibus_configuration, :omnibus_gitlab_rails_env
|
20
|
-
attr_accessor :tls, :skip_availability_check, :runner_network, :seed_admin_token, :seed_db
|
20
|
+
attr_accessor :tls, :skip_availability_check, :runner_network, :seed_admin_token, :seed_db, :skip_server_hooks
|
21
21
|
attr_writer :name, :relative_path
|
22
22
|
|
23
23
|
def_delegators :release, :tag, :image, :edition
|
@@ -47,6 +47,7 @@ module Gitlab
|
|
47
47
|
|
48
48
|
@seed_admin_token = Runtime::Scenario.seed_admin_token
|
49
49
|
@seed_db = Runtime::Scenario.seed_db
|
50
|
+
@skip_server_hooks = Runtime::Scenario.skip_server_hooks
|
50
51
|
|
51
52
|
self.release = 'CE'
|
52
53
|
end
|
@@ -84,8 +85,8 @@ module Gitlab
|
|
84
85
|
tls ? 'https' : 'http'
|
85
86
|
end
|
86
87
|
|
87
|
-
def
|
88
|
-
tls ?
|
88
|
+
def gitlab_port
|
89
|
+
tls ? ["443:443"] : ["80"]
|
89
90
|
end
|
90
91
|
|
91
92
|
def gitaly_tls
|
@@ -136,11 +137,15 @@ module Gitlab
|
|
136
137
|
ensure_configured!
|
137
138
|
|
138
139
|
docker.run(image: image, tag: tag) do |command|
|
139
|
-
command << "-d
|
140
|
+
command << "-d"
|
140
141
|
command << "--name #{name}"
|
141
142
|
command << "--net #{network}"
|
142
143
|
command << "--hostname #{hostname}"
|
143
144
|
|
145
|
+
[*@ports, *gitlab_port].each do |mapping|
|
146
|
+
command.port(mapping)
|
147
|
+
end
|
148
|
+
|
144
149
|
@volumes.to_h.each do |to, from|
|
145
150
|
command.volume(to, from, 'Z')
|
146
151
|
end
|
@@ -179,7 +184,7 @@ module Gitlab
|
|
179
184
|
name,
|
180
185
|
relative_path: relative_path,
|
181
186
|
scheme: scheme,
|
182
|
-
protocol_port:
|
187
|
+
protocol_port: gitlab_port.first.to_i
|
183
188
|
)
|
184
189
|
|
185
190
|
Runtime::Logger.info("Waiting for GitLab to become healthy ...")
|
@@ -197,7 +202,7 @@ module Gitlab
|
|
197
202
|
exec_commands << seed_admin_token_command if seed_admin_token
|
198
203
|
exec_commands << seed_test_data_command if seed_db
|
199
204
|
exec_commands << Runtime::Scenario.omnibus_exec_commands
|
200
|
-
exec_commands << add_git_server_hooks unless
|
205
|
+
exec_commands << add_git_server_hooks unless skip_server_hooks
|
201
206
|
|
202
207
|
commands = exec_commands.flatten.uniq
|
203
208
|
return if commands.empty?
|
@@ -36,14 +36,12 @@ module Gitlab
|
|
36
36
|
'QA_SLOW_CONNECTION_LATENCY_MS' => :qa_slow_connection_latency_ms,
|
37
37
|
'QA_SLOW_CONNECTION_THROUGHPUT_KBPS' => :qa_slow_connection_throughput_kbps,
|
38
38
|
'QA_GENERATE_ALLURE_REPORT' => :generate_allure_report,
|
39
|
-
'QA_EE_ACTIVATION_CODE' => :ee_activation_code,
|
40
39
|
'QA_EXPORT_TEST_METRICS' => :qa_export_test_metrics,
|
41
40
|
'QA_INFLUXDB_URL' => :qa_influxdb_url,
|
42
41
|
'QA_INFLUXDB_TOKEN' => :qa_influxdb_token,
|
43
42
|
'QA_RUN_TYPE' => :qa_run_type,
|
44
43
|
'QA_SKIP_PULL' => :qa_skip_pull,
|
45
44
|
'QA_VALIDATE_RESOURCE_REUSE' => :qa_validate_resource_reuse,
|
46
|
-
'QA_USE_PUBLIC_IP_API' => :qa_use_public_ip_api,
|
47
45
|
'GITLAB_API_BASE' => :api_base,
|
48
46
|
'GITLAB_ADMIN_USERNAME' => :admin_username,
|
49
47
|
'GITLAB_ADMIN_PASSWORD' => :admin_password,
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Scenario
|
6
|
+
module Test
|
7
|
+
module Integration
|
8
|
+
class Metrics < Scenario::Template
|
9
|
+
PUMA_METRICS_SERVER_PORT = 8083
|
10
|
+
SIDEKIQ_METRICS_SERVER_PORT = 8082
|
11
|
+
|
12
|
+
def perform(release, *rspec_args)
|
13
|
+
Component::Gitlab.perform do |gitlab|
|
14
|
+
gitlab.release = release
|
15
|
+
gitlab.network = 'test'
|
16
|
+
gitlab.name = 'gitlab'
|
17
|
+
gitlab.ports = [PUMA_METRICS_SERVER_PORT, SIDEKIQ_METRICS_SERVER_PORT]
|
18
|
+
|
19
|
+
gitlab.omnibus_configuration << <<~RUBY
|
20
|
+
puma['exporter_enabled'] = true
|
21
|
+
puma['exporter_address'] = '0.0.0.0'
|
22
|
+
puma['exporter_port'] = #{PUMA_METRICS_SERVER_PORT}
|
23
|
+
sidekiq['metrics_enabled'] = true
|
24
|
+
sidekiq['listen_address'] = '0.0.0.0'
|
25
|
+
sidekiq['listen_port'] = #{SIDEKIQ_METRICS_SERVER_PORT}
|
26
|
+
RUBY
|
27
|
+
|
28
|
+
gitlab.instance do
|
29
|
+
Component::Specs.perform do |specs|
|
30
|
+
specs.suite = 'Test::Integration::Metrics'
|
31
|
+
specs.release = gitlab.release
|
32
|
+
specs.network = gitlab.network
|
33
|
+
specs.args = [gitlab.address, *rspec_args]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Scenario
|
6
|
+
module Test
|
7
|
+
module Omnibus
|
8
|
+
class UpdateFromPrevious < Scenario::Template
|
9
|
+
using Rainbow
|
10
|
+
|
11
|
+
# Test update from N - 1 (major|minor|patch) version to current release
|
12
|
+
# Run smoke test suite on previous release to populate some data in database before update
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# perform(gitlab-ee:dev-tag, 15.3.0-pre, major)
|
16
|
+
# => will perform upgrades 14.9.5 -> 15.0.5 -> gitlab-ee:dev-tag
|
17
|
+
#
|
18
|
+
# @param [String] release current release docker image
|
19
|
+
# @param [String] current_version current gitlab version associated with docker image
|
20
|
+
# @param [String] semver_component semver component for N - 1 version detection, major|minor|patch
|
21
|
+
# @param [Array] *rspec_args rspec arguments
|
22
|
+
# @return [void]
|
23
|
+
def perform(release, current_version, semver_component, *rspec_args)
|
24
|
+
@current_release = QA::Release.new(release)
|
25
|
+
@upgrade_path = Support::GitlabUpgradePath.new(
|
26
|
+
current_version,
|
27
|
+
semver_component,
|
28
|
+
@current_release.edition
|
29
|
+
).fetch
|
30
|
+
|
31
|
+
upgrade_info = "#{[*upgrade_path, current_release].join(' => ')} (#{current_version})".bright
|
32
|
+
Runtime::Logger.info("Performing gitlab update: #{upgrade_info}")
|
33
|
+
|
34
|
+
update(rspec_args)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
attr_reader :current_release, :upgrade_path
|
40
|
+
|
41
|
+
# Perform update
|
42
|
+
#
|
43
|
+
# @param [Array] rspec_args
|
44
|
+
# @return [void]
|
45
|
+
def update(rspec_args)
|
46
|
+
Docker::Volumes.new.with_temporary_volumes do |volumes|
|
47
|
+
# deploy first release in upgrade path and run specs to populate db
|
48
|
+
run_gitlab(upgrade_path.first, volumes, ["--", "--tag", "smoke"])
|
49
|
+
|
50
|
+
# deploy releases in upgrade path
|
51
|
+
upgrade_path[1..].each { |release| run_gitlab(release, volumes, skip_setup: true) }
|
52
|
+
|
53
|
+
# deploy current release and run tests
|
54
|
+
run_gitlab(current_release, volumes, rspec_args, skip_setup: true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Deploy gitlab instance and optionally run specs
|
59
|
+
#
|
60
|
+
# @param [Gitlab::QA::Release] release
|
61
|
+
# @param [Hash] volumes
|
62
|
+
# @return [void]
|
63
|
+
def run_gitlab(release, volumes, rspec_args = [], skip_setup: false)
|
64
|
+
Runtime::Logger.info("Deploying release: #{release.to_s.bright}")
|
65
|
+
|
66
|
+
Component::Gitlab.perform do |gitlab|
|
67
|
+
gitlab.release = release
|
68
|
+
gitlab.volumes = volumes
|
69
|
+
gitlab.network = 'test'
|
70
|
+
|
71
|
+
if skip_setup
|
72
|
+
gitlab.skip_server_hooks = true
|
73
|
+
gitlab.seed_db = false
|
74
|
+
gitlab.seed_admin_token = false
|
75
|
+
end
|
76
|
+
|
77
|
+
next gitlab.launch_and_teardown_instance unless run_specs?(release)
|
78
|
+
|
79
|
+
gitlab.instance { run_specs(gitlab, release, rspec_args) }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Run specs
|
84
|
+
#
|
85
|
+
# @param [Gitlab::QA::Component::Gitlab] gitlab
|
86
|
+
# @param [Gitlab::QA::Release] release
|
87
|
+
# @param [Array] rspec_args
|
88
|
+
# @return [void]
|
89
|
+
def run_specs(gitlab, release, rspec_args)
|
90
|
+
Component::Specs.perform do |specs|
|
91
|
+
specs.release = release
|
92
|
+
specs.suite = 'Test::Instance::All'
|
93
|
+
specs.hostname = "qa-e2e-specs.#{gitlab.network}"
|
94
|
+
specs.network = gitlab.network
|
95
|
+
specs.args = [gitlab.address, *rspec_args]
|
96
|
+
end
|
97
|
+
rescue Docker::Shellout::StatusError => e
|
98
|
+
raise e if release == current_release # only fail on current release
|
99
|
+
|
100
|
+
Runtime::Logger.warn("Test run for release '#{gitlab.release}' finished with errors!")
|
101
|
+
end
|
102
|
+
|
103
|
+
# Run specs on first release to populate database and release being tested
|
104
|
+
#
|
105
|
+
# @param [Gitlab::QA::Release] release
|
106
|
+
# @return [Boolean]
|
107
|
+
def run_specs?(release)
|
108
|
+
[upgrade_path.first, current_release].any? { |rel| rel == release }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/core_ext/module/delegation"
|
4
|
+
require "yaml"
|
5
|
+
|
6
|
+
module Gitlab
|
7
|
+
module QA
|
8
|
+
module Support
|
9
|
+
class GitlabUpgradePath
|
10
|
+
# Get upgrade path between N - 1 and current version not including current release
|
11
|
+
#
|
12
|
+
# @param [String] current_version
|
13
|
+
# @param [String] semver_component version number component for previous version detection - major|minor|patch
|
14
|
+
# @param [String] edition GitLab edition - ee or ce
|
15
|
+
def initialize(current_version, semver_component, edition)
|
16
|
+
@version_info = GitlabVersionInfo.new(current_version, edition)
|
17
|
+
@current_version = Gem::Version.new(current_version)
|
18
|
+
@semver_component = semver_component
|
19
|
+
@edition = edition
|
20
|
+
@logger = Runtime::Logger.logger
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get upgrade path between releases
|
24
|
+
#
|
25
|
+
# Return array with only previous version for updates from previous minor, patch versions
|
26
|
+
#
|
27
|
+
# @return [Array<QA::Release>]
|
28
|
+
def fetch
|
29
|
+
return [release(latest_patch(previous_version))] unless major_upgrade?
|
30
|
+
|
31
|
+
# get versions between previous major and current version in gitlab upgrade path
|
32
|
+
path = full_upgrade_path.each_with_object([]) do |ver, arr|
|
33
|
+
next if ver <= previous_version || ver >= current_version
|
34
|
+
|
35
|
+
arr << ver
|
36
|
+
end
|
37
|
+
|
38
|
+
[previous_version, *path].map do |ver|
|
39
|
+
release(version_info.latest_patch(ver))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
delegate :latest_patch, to: :version_info
|
46
|
+
|
47
|
+
attr_reader :version_info, :current_version, :semver_component, :edition, :logger
|
48
|
+
|
49
|
+
# Upgrade from previous major
|
50
|
+
#
|
51
|
+
# @return [Boolean]
|
52
|
+
def major_upgrade?
|
53
|
+
semver_component == "major"
|
54
|
+
end
|
55
|
+
|
56
|
+
# Docker release image
|
57
|
+
#
|
58
|
+
# @param [String] version
|
59
|
+
# @return [QA::Release]
|
60
|
+
def release(version)
|
61
|
+
QA::Release.new("gitlab/gitlab-#{edition}:#{version}-#{edition}.0")
|
62
|
+
end
|
63
|
+
|
64
|
+
# Previous gitlab version
|
65
|
+
#
|
66
|
+
# @return [Gem::Version]
|
67
|
+
def previous_version
|
68
|
+
@previous_version ||= version_info.previous_version(semver_component)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Gitlab upgrade path
|
72
|
+
#
|
73
|
+
# @return [Array<Gem::Version>]
|
74
|
+
def full_upgrade_path
|
75
|
+
@full_upgrade_path ||= ::YAML
|
76
|
+
.safe_load(upgrade_path_yml, symbolize_names: true)
|
77
|
+
.map { |version| Gem::Version.new("#{version[:major]}.#{version[:minor]}") }
|
78
|
+
end
|
79
|
+
|
80
|
+
# Upgrade path yml
|
81
|
+
#
|
82
|
+
# @return [String]
|
83
|
+
def upgrade_path_yml
|
84
|
+
@upgrade_path_yml ||= begin
|
85
|
+
logger.info("Fetching gitlab upgrade path from 'gitlab-com/support/toolbox/upgrade-path' project")
|
86
|
+
HttpRequest.make_http_request(
|
87
|
+
url: "https://gitlab.com/gitlab-com/support/toolbox/upgrade-path/-/raw/main/upgrade-path.yml"
|
88
|
+
).body
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Support
|
6
|
+
class GitlabVersionInfo
|
7
|
+
VERSION_PATTERN = /^(?<version>\d+\.\d+\.\d+)/.freeze
|
8
|
+
COMPONENT_PATTERN = /^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)/.freeze
|
9
|
+
|
10
|
+
# Get previous gitlab version
|
11
|
+
#
|
12
|
+
# @param [String] current_version
|
13
|
+
# @param [String] edition GitLab edition - ee or ce
|
14
|
+
def initialize(current_version, edition)
|
15
|
+
@current_version = current_version
|
16
|
+
@edition = edition
|
17
|
+
@logger = Runtime::Logger.logger
|
18
|
+
end
|
19
|
+
|
20
|
+
# Get N - 1 version number
|
21
|
+
#
|
22
|
+
# @param [String] semver_component version number component for previous version detection - major|minor|patch
|
23
|
+
# @return [Gem::Version]
|
24
|
+
def previous_version(semver_component)
|
25
|
+
case semver_component
|
26
|
+
when "major"
|
27
|
+
previous_major
|
28
|
+
when "minor"
|
29
|
+
previous_minor
|
30
|
+
when "patch"
|
31
|
+
previous_patch
|
32
|
+
else
|
33
|
+
raise("Unsupported semver component, must be major|minor|patch")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get latest patch for specific version number
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# latest_patch(Gem::Version.new("14.10")) => "14.10.5"
|
41
|
+
#
|
42
|
+
# @param [Gem::Version] version
|
43
|
+
# @return [String]
|
44
|
+
def latest_patch(version)
|
45
|
+
versions.find { |ver| ver.to_s.match?(/^#{version}/) }
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
attr_reader :current_version, :edition, :logger
|
51
|
+
|
52
|
+
# Current versions major version
|
53
|
+
#
|
54
|
+
# @return [Integer]
|
55
|
+
def current_major
|
56
|
+
@current_major ||= current_version.match(COMPONENT_PATTERN)[:major].to_i
|
57
|
+
end
|
58
|
+
|
59
|
+
# Current versions minor version
|
60
|
+
#
|
61
|
+
# @return [Integer]
|
62
|
+
def current_minor
|
63
|
+
@current_minor ||= current_version.match(COMPONENT_PATTERN)[:minor].to_i
|
64
|
+
end
|
65
|
+
|
66
|
+
# Current versions patch version
|
67
|
+
#
|
68
|
+
# @return [Integer]
|
69
|
+
def current_patch
|
70
|
+
@current_patch ||= current_version.match(COMPONENT_PATTERN)[:patch].to_i
|
71
|
+
end
|
72
|
+
|
73
|
+
# Previous major version
|
74
|
+
#
|
75
|
+
# @return [String]
|
76
|
+
def previous_major
|
77
|
+
return fallback_major unless tags
|
78
|
+
|
79
|
+
versions.find { |version| version.to_s.start_with?((current_major - 1).to_s) }
|
80
|
+
end
|
81
|
+
|
82
|
+
# Previous first major version image
|
83
|
+
#
|
84
|
+
# @return [String]
|
85
|
+
def fallback_major
|
86
|
+
previous_fallback_version(current_major - 1)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Previous minor version
|
90
|
+
#
|
91
|
+
# @return [String]
|
92
|
+
def previous_minor
|
93
|
+
return fallback_minor unless tags
|
94
|
+
return previous_major if current_minor.zero?
|
95
|
+
|
96
|
+
versions.find { |version| version.to_s.match?(/^#{current_major}\.#{current_minor - 1}/) }
|
97
|
+
end
|
98
|
+
|
99
|
+
# Previous first minor version
|
100
|
+
#
|
101
|
+
# @return [String]
|
102
|
+
def fallback_minor
|
103
|
+
return previous_fallback_version(current_major, current_minor - 1) unless current_minor.zero?
|
104
|
+
|
105
|
+
previous_major
|
106
|
+
end
|
107
|
+
|
108
|
+
# Previous patch version
|
109
|
+
#
|
110
|
+
# @return [String]
|
111
|
+
def previous_patch
|
112
|
+
return fallback_patch unless tags
|
113
|
+
return previous_minor if current_patch.zero?
|
114
|
+
|
115
|
+
versions.find { |version| version.to_s.match?(/^#{current_major}\.#{current_minor}\.#{current_patch - 1}/) }
|
116
|
+
end
|
117
|
+
|
118
|
+
# Previous first patch version
|
119
|
+
#
|
120
|
+
# @return [String]
|
121
|
+
def fallback_patch
|
122
|
+
return previous_fallback_version(current_major, current_minor, current_patch - 1) unless current_patch.zero?
|
123
|
+
|
124
|
+
previous_minor
|
125
|
+
end
|
126
|
+
|
127
|
+
# Version number from docker tag
|
128
|
+
#
|
129
|
+
# @param [String] tag
|
130
|
+
# @return [String]
|
131
|
+
def version(tag)
|
132
|
+
tag.match(VERSION_PATTERN)[:version]
|
133
|
+
end
|
134
|
+
|
135
|
+
# Fallback version
|
136
|
+
#
|
137
|
+
# @param [Integer] major_component
|
138
|
+
# @param [Integer] minor_component
|
139
|
+
# @param [Integer] patch_component
|
140
|
+
# @return [Gem::Version]
|
141
|
+
def previous_fallback_version(major_component, minor_component = 0, patch_component = 0)
|
142
|
+
Gem::Version.new("#{major_component}.#{minor_component}.#{patch_component}")
|
143
|
+
end
|
144
|
+
|
145
|
+
# All available gitlab versions
|
146
|
+
#
|
147
|
+
# @return [Array<String>]
|
148
|
+
def versions
|
149
|
+
@versions = tags
|
150
|
+
.map { |tag| Gem::Version.new(tag.match(VERSION_PATTERN)[:version]) }
|
151
|
+
.sort
|
152
|
+
.reverse # reverse array so first match by .find always returns latest version
|
153
|
+
end
|
154
|
+
|
155
|
+
# All available docker tags
|
156
|
+
#
|
157
|
+
# @return [Array<String>]
|
158
|
+
def tags
|
159
|
+
return @tags if defined?(@tags)
|
160
|
+
|
161
|
+
logger.info("Fetching docker tags from 'gitlab/gitlab-#{edition}' registry")
|
162
|
+
response = HttpRequest.make_http_request(
|
163
|
+
url: "https://registry.hub.docker.com/v1/repositories/gitlab/gitlab-#{edition}/tags",
|
164
|
+
fail_on_error: false
|
165
|
+
)
|
166
|
+
|
167
|
+
unless response.code == 200
|
168
|
+
logger.error(" failed to fetch docker tags - code: #{response.code}, response: '#{response.body}'")
|
169
|
+
return @tags = nil
|
170
|
+
end
|
171
|
+
|
172
|
+
@tags = JSON
|
173
|
+
.parse(response.body, symbolize_names: true)
|
174
|
+
.map { |tag| tag[:name] }
|
175
|
+
.select { |tag| tag.match?(VERSION_PATTERN) }
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
data/lib/gitlab/qa/version.rb
CHANGED
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.
|
4
|
+
version: 8.3.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-
|
11
|
+
date: 2022-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -358,7 +358,6 @@ files:
|
|
358
358
|
- lib/gitlab/qa/runtime/omnibus_configurations/decomposition_single_db.rb
|
359
359
|
- lib/gitlab/qa/runtime/omnibus_configurations/default.rb
|
360
360
|
- lib/gitlab/qa/runtime/omnibus_configurations/license_mode.rb
|
361
|
-
- lib/gitlab/qa/runtime/omnibus_configurations/metrics.rb
|
362
361
|
- lib/gitlab/qa/runtime/omnibus_configurations/object_storage.rb
|
363
362
|
- lib/gitlab/qa/runtime/omnibus_configurations/object_storage_aws.rb
|
364
363
|
- lib/gitlab/qa/runtime/omnibus_configurations/object_storage_gcs.rb
|
@@ -398,6 +397,7 @@ files:
|
|
398
397
|
- lib/gitlab/qa/scenario/test/integration/ldap_no_tls.rb
|
399
398
|
- lib/gitlab/qa/scenario/test/integration/ldap_tls.rb
|
400
399
|
- lib/gitlab/qa/scenario/test/integration/mattermost.rb
|
400
|
+
- lib/gitlab/qa/scenario/test/integration/metrics.rb
|
401
401
|
- lib/gitlab/qa/scenario/test/integration/mtls.rb
|
402
402
|
- lib/gitlab/qa/scenario/test/integration/opensearch.rb
|
403
403
|
- lib/gitlab/qa/scenario/test/integration/praefect.rb
|
@@ -410,11 +410,14 @@ files:
|
|
410
410
|
- lib/gitlab/qa/scenario/test/integration/ssh_tunnel.rb
|
411
411
|
- lib/gitlab/qa/scenario/test/omnibus/image.rb
|
412
412
|
- lib/gitlab/qa/scenario/test/omnibus/update.rb
|
413
|
+
- lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
|
413
414
|
- lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
|
414
415
|
- lib/gitlab/qa/scenario/test/sanity/version.rb
|
415
416
|
- lib/gitlab/qa/slack/post_to_slack.rb
|
416
417
|
- lib/gitlab/qa/support/dev_ee_qa_image.rb
|
417
418
|
- lib/gitlab/qa/support/get_request.rb
|
419
|
+
- lib/gitlab/qa/support/gitlab_upgrade_path.rb
|
420
|
+
- lib/gitlab/qa/support/gitlab_version_info.rb
|
418
421
|
- lib/gitlab/qa/support/http_request.rb
|
419
422
|
- lib/gitlab/qa/support/invalid_response_error.rb
|
420
423
|
- lib/gitlab/qa/test_logger.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Gitlab
|
4
|
-
module QA
|
5
|
-
module Runtime
|
6
|
-
module OmnibusConfigurations
|
7
|
-
class Metrics < Default
|
8
|
-
def configuration
|
9
|
-
<<~RUBY
|
10
|
-
puma['exporter_enabled'] = true
|
11
|
-
puma['exporter_port'] = 8083
|
12
|
-
sidekiq['metrics_enabled'] = true
|
13
|
-
sidekiq['listen_port'] = 8082
|
14
|
-
RUBY
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|