gitlab-qa 9.1.1 → 10.0.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.yml +106 -149
- data/.simplecov +9 -0
- data/Gemfile.lock +15 -1
- data/README.md +5 -4
- data/docs/what_tests_can_be_run.md +73 -35
- data/gitlab-qa.gemspec +3 -0
- data/lib/gitlab/qa/component/base.rb +8 -1
- data/lib/gitlab/qa/component/gitaly.rb +1 -1
- data/lib/gitlab/qa/component/gitlab.rb +2 -2
- data/lib/gitlab/qa/component/mock_server.rb +13 -0
- data/lib/gitlab/qa/report/gitlab_issue_client.rb +1 -1
- data/lib/gitlab/qa/report/relate_failure_issue.rb +95 -17
- data/lib/gitlab/qa/report/report_as_issue.rb +1 -1
- data/lib/gitlab/qa/runtime/env.rb +17 -4
- data/lib/gitlab/qa/runtime/omnibus_configurations/decomposition_multiple_db.rb +1 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_aws.rb +1 -1
- data/lib/gitlab/qa/scenario/test/integration/oauth.rb +68 -0
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +3 -2
- data/lib/gitlab/qa/version.rb +1 -1
- data/scripts/build-package-and-test-env +15 -0
- metadata +47 -47
- data/.gitlab/ci/jobs/airgapped.gitlab-ci.yml +0 -23
- data/.gitlab/ci/jobs/base.gitlab-ci.yml +0 -273
- data/.gitlab/ci/jobs/chaos.gitlab-ci.yml +0 -22
- data/.gitlab/ci/jobs/cloud_activation.gitlab-ci.yml +0 -24
- data/.gitlab/ci/jobs/custom_parallel.gitlab-ci.yml +0 -21
- data/.gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml +0 -27
- data/.gitlab/ci/jobs/decomposition_single_db.gitlab-ci.yml +0 -25
- data/.gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml +0 -18
- data/.gitlab/ci/jobs/elasticsearch.gitlab-ci.yml +0 -20
- data/.gitlab/ci/jobs/geo.gitlab-ci.yml +0 -18
- data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/gitlab_pages.gitlab-ci.yml +0 -19
- data/.gitlab/ci/jobs/group_saml.gitlab-ci.yml +0 -20
- data/.gitlab/ci/jobs/instance.gitlab-ci.yml +0 -55
- data/.gitlab/ci/jobs/instance_saml.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/integrations.gitlab-ci.yml +0 -14
- data/.gitlab/ci/jobs/jira.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/large_setup.gitlab-ci.yml +0 -19
- data/.gitlab/ci/jobs/ldap_no_server.gitlab-ci.yml +0 -20
- data/.gitlab/ci/jobs/ldap_no_tls.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/ldap_tls.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/mattermost.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/metrics.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/mtls.gitlab-ci.yml +0 -19
- data/.gitlab/ci/jobs/object_storage.gitlab-ci.yml +0 -49
- data/.gitlab/ci/jobs/object_storage_aws.gitlab-ci.yml +0 -25
- data/.gitlab/ci/jobs/object_storage_gcs.gitlab-ci.yml +0 -23
- data/.gitlab/ci/jobs/object_storage_registry_tls.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/omnibus_image.gitlab-ci.yml +0 -15
- data/.gitlab/ci/jobs/omnibus_upgrade.gitlab-ci.yml +0 -28
- data/.gitlab/ci/jobs/opensearch.gitlab-ci.yml +0 -20
- data/.gitlab/ci/jobs/packages.gitlab-ci.yml +0 -25
- data/.gitlab/ci/jobs/praefect.gitlab-ci.yml +0 -71
- data/.gitlab/ci/jobs/registry.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml +0 -55
- data/.gitlab/ci/jobs/relative_url.gitlab-ci.yml +0 -65
- data/.gitlab/ci/jobs/repository_storage.gitlab-ci.yml +0 -41
- data/.gitlab/ci/jobs/sanity_framework.gitlab-ci.yml +0 -24
- data/.gitlab/ci/jobs/service_ping_disabled.gitlab-ci.yml +0 -19
- data/.gitlab/ci/jobs/smtp.gitlab-ci.yml +0 -19
- data/.gitlab/ci/jobs/staging.gitlab-ci.yml +0 -10
- data/.gitlab/ci/jobs/update.gitlab-ci.yml +0 -60
- data/.gitlab/ci/rules.gitlab-ci.yml +0 -183
- data/lib/gitlab/qa/scenario/test/omnibus/update.rb +0 -72
- data/scripts/generate-qa-jobs.rb +0 -99
@@ -13,8 +13,11 @@ module Gitlab
|
|
13
13
|
include FindSetDri
|
14
14
|
|
15
15
|
DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION = 0.15
|
16
|
+
SPAM_THRESHOLD_FOR_FAILURE_ISSUES = 3
|
16
17
|
FAILURE_STACKTRACE_REGEX = %r{((.*Failure\/Error:(?<stacktrace>.+))|(?<stacktrace>.+))}m.freeze
|
17
18
|
ISSUE_STACKTRACE_REGEX = /### Stack trace\s*(```)#{FAILURE_STACKTRACE_REGEX}(```)/m.freeze
|
19
|
+
FAILED_JOB_DESCRIPTION_REGEX = %r{First happened in https?:\/\/\S+\.}m.freeze
|
20
|
+
FAILED_JOB_NOTE_REGEX = %r{Failed most recently in \D+ pipeline: https?:\/\/\S+}.freeze
|
18
21
|
NEW_ISSUE_LABELS = Set.new(%w[QA Quality test failure::new priority::2]).freeze
|
19
22
|
IGNORE_EXCEPTIONS = ['Net::ReadTimeout'].freeze
|
20
23
|
|
@@ -60,17 +63,34 @@ module Gitlab
|
|
60
63
|
|
61
64
|
def find_and_link_issue(test)
|
62
65
|
issue, diff_ratio = find_failure_issue(test)
|
66
|
+
issue_already_commented = issue ? @commented_issue_list.include?(issue.web_url) : nil
|
63
67
|
|
64
|
-
if issue
|
68
|
+
if issue && !issue_already_commented
|
65
69
|
puts " => Found issue #{issue.web_url} for test '#{test.name}' with a diff ratio of #{(diff_ratio * 100).round(2)}%."
|
66
|
-
|
70
|
+
post_or_update_failed_job_note(issue, test)
|
67
71
|
@commented_issue_list.add(issue.web_url)
|
72
|
+
else
|
73
|
+
puts " => Failure already commented on issue." if issue_already_commented
|
74
|
+
|
75
|
+
return false
|
68
76
|
end
|
69
77
|
|
70
78
|
issue
|
71
79
|
end
|
72
80
|
|
73
81
|
def create_issue(test)
|
82
|
+
similar_issues = pipeline_issues_with_similar_stacktrace(test)
|
83
|
+
|
84
|
+
if similar_issues.size >= SPAM_THRESHOLD_FOR_FAILURE_ISSUES
|
85
|
+
puts " => Similar failure issues have already been opened for same pipeline environment"
|
86
|
+
puts " => Will not create new issue for this failing spec"
|
87
|
+
similar_issues.each do |similar_issue|
|
88
|
+
puts "Please check issue: #{similar_issue.web_url}"
|
89
|
+
gitlab.create_issue_note(iid: similar_issue.iid, note: "This failed job is most likely related: #{test.ci_job_url}")
|
90
|
+
end
|
91
|
+
return
|
92
|
+
end
|
93
|
+
|
74
94
|
issue = super
|
75
95
|
puts "for test '#{test.name}'."
|
76
96
|
|
@@ -81,6 +101,50 @@ module Gitlab
|
|
81
101
|
issue
|
82
102
|
end
|
83
103
|
|
104
|
+
def pipeline_issues_with_similar_stacktrace(test)
|
105
|
+
gitlab.find_issues(options: { state: 'opened', labels: 'QA,failure::new', created_after: past_timestamp(2) }).select do |issue|
|
106
|
+
job_url_from_issue = failed_issue_job_url(issue)
|
107
|
+
next unless pipeline == pipeline_env_from_job_url(job_url_from_issue)
|
108
|
+
|
109
|
+
stack_trace_from_issue = cleaned_stack_trace_from_issue(issue)
|
110
|
+
stack_trace_from_test = cleaned_stacktrace_from_test(test)
|
111
|
+
diff_ratio = compare_stack_traces(stack_trace_from_test, stack_trace_from_issue)
|
112
|
+
diff_ratio < max_diff_ratio
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def failed_issue_job_url(issue)
|
117
|
+
existing_note = existing_failure_note(issue)
|
118
|
+
if existing_note
|
119
|
+
job_url_string = existing_note.body
|
120
|
+
matched = job_url_string.match(FAILED_JOB_NOTE_REGEX)
|
121
|
+
else
|
122
|
+
job_url_string = issue.description
|
123
|
+
matched = job_url_string.match(FAILED_JOB_DESCRIPTION_REGEX)
|
124
|
+
end
|
125
|
+
|
126
|
+
return unless matched
|
127
|
+
|
128
|
+
job_url = matched[0].chop.split(" ").last
|
129
|
+
puts "=> Found failed job url in the issue: #{job_url}"
|
130
|
+
job_url
|
131
|
+
end
|
132
|
+
|
133
|
+
def pipeline_env_from_job_url(job_url)
|
134
|
+
return if job_url.nil?
|
135
|
+
|
136
|
+
if job_url.include?('/quality/')
|
137
|
+
job_url.partition('/quality/').last.partition('/').first
|
138
|
+
else
|
139
|
+
'master'
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def past_timestamp(hours_ago)
|
144
|
+
timestamp = Time.now - (hours_ago * 60 * 60)
|
145
|
+
timestamp.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
146
|
+
end
|
147
|
+
|
84
148
|
def failure_issues(test)
|
85
149
|
gitlab.find_issues(options: { state: 'opened', labels: 'QA' }).select do |issue|
|
86
150
|
issue_title = issue.title.strip
|
@@ -96,20 +160,36 @@ module Gitlab
|
|
96
160
|
end
|
97
161
|
end
|
98
162
|
|
99
|
-
def
|
100
|
-
|
163
|
+
def cleaned_stack_trace_from_issue(issue)
|
164
|
+
relevant_issue_stacktrace = find_issue_stacktrace(issue)
|
165
|
+
return unless relevant_issue_stacktrace
|
166
|
+
|
167
|
+
remove_unique_resource_names(relevant_issue_stacktrace)
|
168
|
+
end
|
169
|
+
|
170
|
+
def cleaned_stacktrace_from_test(test)
|
101
171
|
first_test_failure_stacktrace = sanitize_stacktrace(full_stacktrace(test), FAILURE_STACKTRACE_REGEX) || full_stacktrace(test)
|
102
|
-
|
172
|
+
remove_unique_resource_names(first_test_failure_stacktrace)
|
173
|
+
end
|
174
|
+
|
175
|
+
def compare_stack_traces(stack_trace_first, stack_trace_second)
|
176
|
+
calculate_diff_ratio(stack_trace_first, stack_trace_second)
|
177
|
+
end
|
103
178
|
|
179
|
+
def calculate_diff_ratio(stack_trace_first, stack_trace_second)
|
180
|
+
ld = Class.new.extend(Gem::Text).method(:levenshtein_distance)
|
181
|
+
distance = ld.call(stack_trace_first, stack_trace_second)
|
182
|
+
distance.zero? ? 0.0 : (distance.to_f / stack_trace_first.size).round(3)
|
183
|
+
end
|
184
|
+
|
185
|
+
def find_relevant_failure_issues(test) # rubocop:disable Metrics/AbcSize
|
186
|
+
clean_first_test_failure_stacktrace = cleaned_stacktrace_from_test(test)
|
104
187
|
# Search with the `search` param returns 500 errors, so we filter by ~QA and then filter further in Ruby
|
105
188
|
failure_issues(test).each_with_object({}) do |issue, memo|
|
106
|
-
|
107
|
-
next
|
108
|
-
|
109
|
-
clean_relevant_issue_stacktrace = remove_unique_resource_names(relevant_issue_stacktrace)
|
110
|
-
distance = ld.call(clean_first_test_failure_stacktrace, clean_relevant_issue_stacktrace)
|
111
|
-
diff_ratio = distance.zero? ? 0.0 : (distance.to_f / clean_first_test_failure_stacktrace.size).round(3)
|
189
|
+
clean_relevant_issue_stacktrace = cleaned_stack_trace_from_issue(issue)
|
190
|
+
next if clean_relevant_issue_stacktrace.nil?
|
112
191
|
|
192
|
+
diff_ratio = compare_stack_traces(clean_first_test_failure_stacktrace, clean_relevant_issue_stacktrace)
|
113
193
|
if diff_ratio <= max_diff_ratio
|
114
194
|
puts " => [DEBUG] Issue #{issue.web_url} has an acceptable diff ratio of #{(diff_ratio * 100).round(2)}%."
|
115
195
|
# The `Gitlab::ObjectifiedHash` class overrides `#hash` which is used by `Hash#[]=` to compute the hash key.
|
@@ -120,8 +200,8 @@ module Gitlab
|
|
120
200
|
memo[issue.to_h] = diff_ratio
|
121
201
|
else
|
122
202
|
puts " => [DEBUG] Found issue #{issue.web_url} but stacktraces are too different (#{(diff_ratio * 100).round(2)}%).\n"
|
123
|
-
puts " => [DEBUG] Issue stacktrace:\n----------------\n#{
|
124
|
-
puts " => [DEBUG] Failure stacktrace:\n----------------\n#{
|
203
|
+
puts " => [DEBUG] Issue stacktrace:\n----------------\n#{clean_relevant_issue_stacktrace}\n----------------\n"
|
204
|
+
puts " => [DEBUG] Failure stacktrace:\n----------------\n#{clean_first_test_failure_stacktrace}\n----------------\n"
|
125
205
|
end
|
126
206
|
end
|
127
207
|
end
|
@@ -202,11 +282,9 @@ module Gitlab
|
|
202
282
|
end
|
203
283
|
|
204
284
|
def existing_failure_note(issue)
|
205
|
-
gitlab.find_issue_notes(iid: issue.iid)
|
206
|
-
|
285
|
+
gitlab.find_issue_notes(iid: issue.iid)&.find do |note|
|
286
|
+
note.body.include?('Failed most recently in')
|
207
287
|
end
|
208
|
-
|
209
|
-
false
|
210
288
|
end
|
211
289
|
|
212
290
|
def screenshot_section(test)
|
@@ -73,8 +73,8 @@ module Gitlab
|
|
73
73
|
'GITLAB_QA_PASSWORD_1' => :gitlab_qa_password_1,
|
74
74
|
'GITLAB_QA_USERNAME_2' => :gitlab_qa_username_2,
|
75
75
|
'GITLAB_QA_PASSWORD_2' => :gitlab_qa_password_2,
|
76
|
-
'
|
77
|
-
'
|
76
|
+
'QA_GITHUB_USERNAME' => :qa_github_username,
|
77
|
+
'QA_GITHUB_PASSWORD' => :qa_github_password,
|
78
78
|
'KNAPSACK_GENERATE_REPORT' => :knapsack_generate_report,
|
79
79
|
'KNAPSACK_REPORT_PATH' => :knapsack_report_path,
|
80
80
|
'KNAPSACK_TEST_FILE_PATTERN' => :knapsack_test_file_pattern,
|
@@ -138,7 +138,13 @@ module Gitlab
|
|
138
138
|
'CHROME_DISABLE_DEV_SHM' => :chrome_disable_dev_shm,
|
139
139
|
'COLORIZED_LOGS' => :colorized_logs,
|
140
140
|
'FIPS' => :fips,
|
141
|
-
'JH_ENV' => :jh_env
|
141
|
+
'JH_ENV' => :jh_env,
|
142
|
+
'QA_GITHUB_OAUTH_APP_ID' => :github_oauth_app_id,
|
143
|
+
'QA_GITHUB_OAUTH_APP_SECRET' => :github_oauth_app_secret,
|
144
|
+
'QA_1P_EMAIL' => :qa_1p_email,
|
145
|
+
'QA_1P_PASSWORD' => :qa_1p_password,
|
146
|
+
'QA_1P_SECRET' => :qa_1p_secret,
|
147
|
+
'QA_1P_GITHUB_UUID' => :qa_1p_github_uuid
|
142
148
|
}.freeze
|
143
149
|
|
144
150
|
ENV_VARIABLES.each do |env_name, method_name|
|
@@ -304,6 +310,13 @@ module Gitlab
|
|
304
310
|
end
|
305
311
|
end
|
306
312
|
|
313
|
+
def require_oauth_environment!
|
314
|
+
%w[QA_GITHUB_OAUTH_APP_ID QA_GITHUB_OAUTH_APP_SECRET QA_GITHUB_USERNAME
|
315
|
+
QA_GITHUB_PASSWORD QA_1P_EMAIL QA_1P_PASSWORD QA_1P_SECRET QA_1P_GITHUB_UUID].each do |env_key|
|
316
|
+
raise ArgumentError, "Environment variable #{env_key} must be set to run OAuth specs" unless ENV.key?(env_key)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
307
320
|
def require_initial_password!
|
308
321
|
return unless env_var_value_if_defined('GITLAB_INITIAL_ROOT_PASSWORD').to_s.strip.empty?
|
309
322
|
|
@@ -406,7 +419,7 @@ module Gitlab
|
|
406
419
|
end
|
407
420
|
|
408
421
|
def mock_github_enabled?
|
409
|
-
enabled?(env_var_value_if_defined('QA_MOCK_GITHUB'), default:
|
422
|
+
enabled?(env_var_value_if_defined('QA_MOCK_GITHUB'), default: true)
|
410
423
|
end
|
411
424
|
|
412
425
|
private
|
@@ -32,7 +32,7 @@ module Gitlab
|
|
32
32
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension if not exists btree_gist'",
|
33
33
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension if not exists pg_trgm'",
|
34
34
|
# Load schema only if it does not exist.
|
35
|
-
"#{SCHEMA_EXISTENCE_CHECK_COMMAND} || gitlab-rake db:
|
35
|
+
"#{SCHEMA_EXISTENCE_CHECK_COMMAND} || DISABLE_DATABASE_ENVIRONMENT_CHECK=1 gitlab-rake db:schema:load:ci",
|
36
36
|
"gitlab-ctl restart"
|
37
37
|
].freeze
|
38
38
|
end
|
@@ -10,7 +10,7 @@ module Gitlab
|
|
10
10
|
|
11
11
|
<<~OMNIBUS
|
12
12
|
gitlab_rails['object_store']['enabled'] = true
|
13
|
-
gitlab_rails['object_store']['proxy_download'] =
|
13
|
+
gitlab_rails['object_store']['proxy_download'] = false
|
14
14
|
gitlab_rails['object_store']['connection'] = { 'provider' => 'AWS', 'region' => '#{Runtime::Env.aws_s3_region}', 'aws_access_key_id' => '#{Runtime::Env.aws_s3_key_id}', 'aws_secret_access_key' => '#{Runtime::Env.aws_s3_access_key}' }
|
15
15
|
|
16
16
|
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Gitlab
|
6
|
+
module QA
|
7
|
+
module Scenario
|
8
|
+
module Test
|
9
|
+
module Integration
|
10
|
+
class OAuth < Scenario::Template
|
11
|
+
attr_reader :gitlab_name
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@gitlab_name = 'gitlab-oauth'
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform(release, *rspec_args)
|
18
|
+
Runtime::Env.require_oauth_environment!
|
19
|
+
|
20
|
+
release = Release.new(release)
|
21
|
+
|
22
|
+
Component::Gitlab.perform do |gitlab|
|
23
|
+
gitlab.release = release
|
24
|
+
gitlab.network = 'test'
|
25
|
+
gitlab.name = gitlab_name
|
26
|
+
|
27
|
+
gitlab.omnibus_configuration << gitlab_omnibus_configuration
|
28
|
+
|
29
|
+
gitlab.instance do
|
30
|
+
Runtime::Logger.info('Running OAuth specs!')
|
31
|
+
|
32
|
+
Component::Specs.perform do |specs|
|
33
|
+
rspec_args << '--' unless rspec_args.include?('--')
|
34
|
+
rspec_args << %w[--tag oauth]
|
35
|
+
specs.suite = 'Test::Instance::All'
|
36
|
+
specs.release = release
|
37
|
+
specs.network = gitlab.network
|
38
|
+
specs.args = [gitlab.address, *rspec_args]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def gitlab_omnibus_configuration
|
47
|
+
<<~OMNIBUS
|
48
|
+
gitlab_rails['omniauth_enabled'] = true;
|
49
|
+
gitlab_rails['omniauth_allow_single_sign_on'] = ['github'];
|
50
|
+
gitlab_rails['omniauth_block_auto_created_users'] = false;
|
51
|
+
gitlab_rails['omniauth_providers'] = [
|
52
|
+
{
|
53
|
+
name: 'github',
|
54
|
+
app_id: '$QA_GITHUB_OAUTH_APP_ID',
|
55
|
+
app_secret: '$QA_GITHUB_OAUTH_APP_SECRET',
|
56
|
+
url: 'https://github.com/',
|
57
|
+
verify_ssl: false,
|
58
|
+
args: { scope: 'user:email' }
|
59
|
+
}
|
60
|
+
];
|
61
|
+
OMNIBUS
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -18,14 +18,15 @@ module Gitlab
|
|
18
18
|
# @param [String] release current release docker image
|
19
19
|
# @param [String] current_version current gitlab version associated with docker image
|
20
20
|
# @param [String] semver_component semver component for N - 1 version detection, major|minor|patch
|
21
|
+
# @param [String] from_edition gitlab edition to update from
|
21
22
|
# @param [Array] *rspec_args rspec arguments
|
22
23
|
# @return [void]
|
23
|
-
def perform(release, current_version, semver_component, *rspec_args)
|
24
|
+
def perform(release, current_version, semver_component, from_edition = nil, *rspec_args)
|
24
25
|
@current_release = QA::Release.new(release)
|
25
26
|
@upgrade_path = Support::GitlabUpgradePath.new(
|
26
27
|
current_version,
|
27
28
|
semver_component,
|
28
|
-
@current_release.edition
|
29
|
+
from_edition || @current_release.edition
|
29
30
|
).fetch
|
30
31
|
|
31
32
|
upgrade_info = "#{[*upgrade_path, current_release].join(' => ')} (#{current_version})".bright
|
data/lib/gitlab/qa/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# set custom qa cache key because upstream template by default installs gitlab-qa from rubygems and uses cache key
|
4
|
+
# based on globally defined gitlab-qa version
|
5
|
+
#
|
6
|
+
# UPDATE_QA_CACHE needs to be passed to included child pipeline because e2e specs run on separate runners which don't share
|
7
|
+
# same infrastructure and this variable allows to populate cache for e2e spec specific runners
|
8
|
+
qa_cache_key="${RUBY_VERSION}-$(md5sum Gemfile.lock | awk '{ print $1 }')"
|
9
|
+
|
10
|
+
echo "Saving environment variables for package-and-test trigger"
|
11
|
+
echo "GITLAB_QA_CACHE_KEY=$qa_cache_key" > $BUILD_ENV
|
12
|
+
echo "UPDATE_QA_CACHE=$UPDATE_QA_CACHE" >> $BUILD_ENV
|
13
|
+
|
14
|
+
echo "Created $BUILD_ENV file:"
|
15
|
+
cat $BUILD_ENV
|
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:
|
4
|
+
version: 10.0.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: 2023-
|
11
|
+
date: 2023-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '3.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.22'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.22'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov-cobertura
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.1'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.1'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: solargraph
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +150,20 @@ dependencies:
|
|
122
150
|
- - "~>"
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0.41'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: timecop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.9.5
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.9.5
|
125
167
|
- !ruby/object:Gem::Dependency
|
126
168
|
name: webmock
|
127
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -278,55 +320,13 @@ files:
|
|
278
320
|
- ".dockerignore"
|
279
321
|
- ".gitignore"
|
280
322
|
- ".gitlab-ci.yml"
|
281
|
-
- ".gitlab/ci/jobs/airgapped.gitlab-ci.yml"
|
282
|
-
- ".gitlab/ci/jobs/base.gitlab-ci.yml"
|
283
|
-
- ".gitlab/ci/jobs/chaos.gitlab-ci.yml"
|
284
|
-
- ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
|
285
|
-
- ".gitlab/ci/jobs/custom_parallel.gitlab-ci.yml"
|
286
|
-
- ".gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml"
|
287
|
-
- ".gitlab/ci/jobs/decomposition_single_db.gitlab-ci.yml"
|
288
|
-
- ".gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml"
|
289
|
-
- ".gitlab/ci/jobs/elasticsearch.gitlab-ci.yml"
|
290
|
-
- ".gitlab/ci/jobs/geo.gitlab-ci.yml"
|
291
|
-
- ".gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml"
|
292
|
-
- ".gitlab/ci/jobs/gitlab_pages.gitlab-ci.yml"
|
293
|
-
- ".gitlab/ci/jobs/group_saml.gitlab-ci.yml"
|
294
|
-
- ".gitlab/ci/jobs/instance.gitlab-ci.yml"
|
295
|
-
- ".gitlab/ci/jobs/instance_saml.gitlab-ci.yml"
|
296
|
-
- ".gitlab/ci/jobs/integrations.gitlab-ci.yml"
|
297
|
-
- ".gitlab/ci/jobs/jira.gitlab-ci.yml"
|
298
|
-
- ".gitlab/ci/jobs/large_setup.gitlab-ci.yml"
|
299
|
-
- ".gitlab/ci/jobs/ldap_no_server.gitlab-ci.yml"
|
300
|
-
- ".gitlab/ci/jobs/ldap_no_tls.gitlab-ci.yml"
|
301
|
-
- ".gitlab/ci/jobs/ldap_tls.gitlab-ci.yml"
|
302
|
-
- ".gitlab/ci/jobs/mattermost.gitlab-ci.yml"
|
303
|
-
- ".gitlab/ci/jobs/metrics.gitlab-ci.yml"
|
304
|
-
- ".gitlab/ci/jobs/mtls.gitlab-ci.yml"
|
305
|
-
- ".gitlab/ci/jobs/object_storage.gitlab-ci.yml"
|
306
|
-
- ".gitlab/ci/jobs/object_storage_aws.gitlab-ci.yml"
|
307
|
-
- ".gitlab/ci/jobs/object_storage_gcs.gitlab-ci.yml"
|
308
|
-
- ".gitlab/ci/jobs/object_storage_registry_tls.gitlab-ci.yml"
|
309
|
-
- ".gitlab/ci/jobs/omnibus_image.gitlab-ci.yml"
|
310
|
-
- ".gitlab/ci/jobs/omnibus_upgrade.gitlab-ci.yml"
|
311
|
-
- ".gitlab/ci/jobs/opensearch.gitlab-ci.yml"
|
312
|
-
- ".gitlab/ci/jobs/packages.gitlab-ci.yml"
|
313
|
-
- ".gitlab/ci/jobs/praefect.gitlab-ci.yml"
|
314
|
-
- ".gitlab/ci/jobs/registry.gitlab-ci.yml"
|
315
|
-
- ".gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml"
|
316
|
-
- ".gitlab/ci/jobs/relative_url.gitlab-ci.yml"
|
317
|
-
- ".gitlab/ci/jobs/repository_storage.gitlab-ci.yml"
|
318
|
-
- ".gitlab/ci/jobs/sanity_framework.gitlab-ci.yml"
|
319
|
-
- ".gitlab/ci/jobs/service_ping_disabled.gitlab-ci.yml"
|
320
|
-
- ".gitlab/ci/jobs/smtp.gitlab-ci.yml"
|
321
|
-
- ".gitlab/ci/jobs/staging.gitlab-ci.yml"
|
322
|
-
- ".gitlab/ci/jobs/update.gitlab-ci.yml"
|
323
|
-
- ".gitlab/ci/rules.gitlab-ci.yml"
|
324
323
|
- ".gitlab/issue_templates/Default.md"
|
325
324
|
- ".gitlab/merge_request_templates/Default.md"
|
326
325
|
- ".gitlab/merge_request_templates/Release.md"
|
327
326
|
- ".rspec"
|
328
327
|
- ".rubocop.yml"
|
329
328
|
- ".rubocop_todo.yml"
|
329
|
+
- ".simplecov"
|
330
330
|
- CONTRIBUTING.md
|
331
331
|
- Dangerfile
|
332
332
|
- Gemfile
|
@@ -459,6 +459,7 @@ files:
|
|
459
459
|
- lib/gitlab/qa/scenario/test/integration/mattermost.rb
|
460
460
|
- lib/gitlab/qa/scenario/test/integration/metrics.rb
|
461
461
|
- lib/gitlab/qa/scenario/test/integration/mtls.rb
|
462
|
+
- lib/gitlab/qa/scenario/test/integration/oauth.rb
|
462
463
|
- lib/gitlab/qa/scenario/test/integration/opensearch.rb
|
463
464
|
- lib/gitlab/qa/scenario/test/integration/praefect.rb
|
464
465
|
- lib/gitlab/qa/scenario/test/integration/registry.rb
|
@@ -469,7 +470,6 @@ files:
|
|
469
470
|
- lib/gitlab/qa/scenario/test/integration/smtp.rb
|
470
471
|
- lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
|
471
472
|
- lib/gitlab/qa/scenario/test/omnibus/image.rb
|
472
|
-
- lib/gitlab/qa/scenario/test/omnibus/update.rb
|
473
473
|
- lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
|
474
474
|
- lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
|
475
475
|
- lib/gitlab/qa/scenario/test/sanity/version.rb
|
@@ -487,7 +487,7 @@ files:
|
|
487
487
|
- lib/gitlab/qa/support/shellout.rb
|
488
488
|
- lib/gitlab/qa/test_logger.rb
|
489
489
|
- lib/gitlab/qa/version.rb
|
490
|
-
- scripts/
|
490
|
+
- scripts/build-package-and-test-env
|
491
491
|
- support/data/admin_access_token_seed.rb
|
492
492
|
- support/data/license_usage_seed.rb
|
493
493
|
- support/manifests/suggested_reviewer/authenticator.yaml
|
@@ -1,23 +0,0 @@
|
|
1
|
-
ce:airgapped:
|
2
|
-
extends:
|
3
|
-
- .rules:ce-never-when-triggered-by-feature-flag-definition-change
|
4
|
-
- .test
|
5
|
-
- .high-capacity
|
6
|
-
- .ce-variables
|
7
|
-
- .rspec-report-opts
|
8
|
-
parallel: 10
|
9
|
-
variables:
|
10
|
-
QA_SCENARIO: "Test::Instance::Airgapped"
|
11
|
-
QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
|
12
|
-
|
13
|
-
ee:airgapped:
|
14
|
-
extends:
|
15
|
-
- .rules:ee-never-when-triggered-by-feature-flag-definition-change
|
16
|
-
- .test
|
17
|
-
- .high-capacity
|
18
|
-
- .ee-variables
|
19
|
-
- .rspec-report-opts
|
20
|
-
parallel: 10
|
21
|
-
variables:
|
22
|
-
QA_SCENARIO: "Test::Instance::Airgapped"
|
23
|
-
QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
|