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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +106 -149
  3. data/.simplecov +9 -0
  4. data/Gemfile.lock +15 -1
  5. data/README.md +5 -4
  6. data/docs/what_tests_can_be_run.md +73 -35
  7. data/gitlab-qa.gemspec +3 -0
  8. data/lib/gitlab/qa/component/base.rb +8 -1
  9. data/lib/gitlab/qa/component/gitaly.rb +1 -1
  10. data/lib/gitlab/qa/component/gitlab.rb +2 -2
  11. data/lib/gitlab/qa/component/mock_server.rb +13 -0
  12. data/lib/gitlab/qa/report/gitlab_issue_client.rb +1 -1
  13. data/lib/gitlab/qa/report/relate_failure_issue.rb +95 -17
  14. data/lib/gitlab/qa/report/report_as_issue.rb +1 -1
  15. data/lib/gitlab/qa/runtime/env.rb +17 -4
  16. data/lib/gitlab/qa/runtime/omnibus_configurations/decomposition_multiple_db.rb +1 -1
  17. data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_aws.rb +1 -1
  18. data/lib/gitlab/qa/scenario/test/integration/oauth.rb +68 -0
  19. data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +3 -2
  20. data/lib/gitlab/qa/version.rb +1 -1
  21. data/scripts/build-package-and-test-env +15 -0
  22. metadata +47 -47
  23. data/.gitlab/ci/jobs/airgapped.gitlab-ci.yml +0 -23
  24. data/.gitlab/ci/jobs/base.gitlab-ci.yml +0 -273
  25. data/.gitlab/ci/jobs/chaos.gitlab-ci.yml +0 -22
  26. data/.gitlab/ci/jobs/cloud_activation.gitlab-ci.yml +0 -24
  27. data/.gitlab/ci/jobs/custom_parallel.gitlab-ci.yml +0 -21
  28. data/.gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml +0 -27
  29. data/.gitlab/ci/jobs/decomposition_single_db.gitlab-ci.yml +0 -25
  30. data/.gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml +0 -18
  31. data/.gitlab/ci/jobs/elasticsearch.gitlab-ci.yml +0 -20
  32. data/.gitlab/ci/jobs/geo.gitlab-ci.yml +0 -18
  33. data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -41
  34. data/.gitlab/ci/jobs/gitlab_pages.gitlab-ci.yml +0 -19
  35. data/.gitlab/ci/jobs/group_saml.gitlab-ci.yml +0 -20
  36. data/.gitlab/ci/jobs/instance.gitlab-ci.yml +0 -55
  37. data/.gitlab/ci/jobs/instance_saml.gitlab-ci.yml +0 -41
  38. data/.gitlab/ci/jobs/integrations.gitlab-ci.yml +0 -14
  39. data/.gitlab/ci/jobs/jira.gitlab-ci.yml +0 -41
  40. data/.gitlab/ci/jobs/large_setup.gitlab-ci.yml +0 -19
  41. data/.gitlab/ci/jobs/ldap_no_server.gitlab-ci.yml +0 -20
  42. data/.gitlab/ci/jobs/ldap_no_tls.gitlab-ci.yml +0 -41
  43. data/.gitlab/ci/jobs/ldap_tls.gitlab-ci.yml +0 -41
  44. data/.gitlab/ci/jobs/mattermost.gitlab-ci.yml +0 -41
  45. data/.gitlab/ci/jobs/metrics.gitlab-ci.yml +0 -41
  46. data/.gitlab/ci/jobs/mtls.gitlab-ci.yml +0 -19
  47. data/.gitlab/ci/jobs/object_storage.gitlab-ci.yml +0 -49
  48. data/.gitlab/ci/jobs/object_storage_aws.gitlab-ci.yml +0 -25
  49. data/.gitlab/ci/jobs/object_storage_gcs.gitlab-ci.yml +0 -23
  50. data/.gitlab/ci/jobs/object_storage_registry_tls.gitlab-ci.yml +0 -41
  51. data/.gitlab/ci/jobs/omnibus_image.gitlab-ci.yml +0 -15
  52. data/.gitlab/ci/jobs/omnibus_upgrade.gitlab-ci.yml +0 -28
  53. data/.gitlab/ci/jobs/opensearch.gitlab-ci.yml +0 -20
  54. data/.gitlab/ci/jobs/packages.gitlab-ci.yml +0 -25
  55. data/.gitlab/ci/jobs/praefect.gitlab-ci.yml +0 -71
  56. data/.gitlab/ci/jobs/registry.gitlab-ci.yml +0 -41
  57. data/.gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml +0 -55
  58. data/.gitlab/ci/jobs/relative_url.gitlab-ci.yml +0 -65
  59. data/.gitlab/ci/jobs/repository_storage.gitlab-ci.yml +0 -41
  60. data/.gitlab/ci/jobs/sanity_framework.gitlab-ci.yml +0 -24
  61. data/.gitlab/ci/jobs/service_ping_disabled.gitlab-ci.yml +0 -19
  62. data/.gitlab/ci/jobs/smtp.gitlab-ci.yml +0 -19
  63. data/.gitlab/ci/jobs/staging.gitlab-ci.yml +0 -10
  64. data/.gitlab/ci/jobs/update.gitlab-ci.yml +0 -60
  65. data/.gitlab/ci/rules.gitlab-ci.yml +0 -183
  66. data/lib/gitlab/qa/scenario/test/omnibus/update.rb +0 -72
  67. 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
- @commented_issue_list.include?(issue.web_url) ? (puts " => Failure already commented on issue.") : post_or_update_failed_job_note(issue, test)
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 find_relevant_failure_issues(test) # rubocop:disable Metrics/AbcSize
100
- ld = Class.new.extend(Gem::Text).method(:levenshtein_distance)
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
- clean_first_test_failure_stacktrace = remove_unique_resource_names(first_test_failure_stacktrace)
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
- relevant_issue_stacktrace = find_issue_stacktrace(issue)
107
- next unless relevant_issue_stacktrace
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#{relevant_issue_stacktrace}\n----------------\n"
124
- puts " => [DEBUG] Failure stacktrace:\n----------------\n#{first_test_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).each do |note|
206
- return note if note.body.include?('Failed most recently in')
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)
@@ -140,7 +140,7 @@ module Gitlab
140
140
  end
141
141
 
142
142
  def partial_file_path(path)
143
- path.match(/((api|browser_ui).*)/i)[1]
143
+ path.match(/((ee|api|browser_ui).*)/i)[1]
144
144
  end
145
145
 
146
146
  def title_from_test(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
- 'GITHUB_USERNAME' => :github_username,
77
- 'GITHUB_PASSWORD' => :github_password,
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: false)
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:structure:load:ci",
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'] = true
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '9.1.1'
5
+ VERSION = '10.0.0'
6
6
  end
7
7
  end
@@ -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: 9.1.1
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-03-06 00:00:00.000000000 Z
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/generate-qa-jobs.rb
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'"