gitlab-qa 7.25.1 → 7.27.1

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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab/ci/jobs/ci_decomposition.gitlab-ci.yml +25 -0
  3. data/.gitlab/ci/jobs/cloud_activation.gitlab-ci.yml +2 -2
  4. data/.gitlab/issue_templates/Default.md +2 -0
  5. data/.gitlab/merge_request_templates/Default.md +2 -0
  6. data/.gitlab-ci.yml +2 -3
  7. data/docs/configuring_omnibus.md +4 -4
  8. data/docs/what_tests_can_be_run.md +10 -0
  9. data/lib/gitlab/qa/component/base.rb +17 -5
  10. data/lib/gitlab/qa/component/elasticsearch.rb +1 -0
  11. data/lib/gitlab/qa/component/gitlab.rb +17 -7
  12. data/lib/gitlab/qa/report/gitlab_issue_client.rb +12 -0
  13. data/lib/gitlab/qa/report/relate_failure_issue.rb +28 -4
  14. data/lib/gitlab/qa/report/test_result.rb +8 -0
  15. data/lib/gitlab/qa/report/update_screenshot_path.rb +28 -6
  16. data/lib/gitlab/qa/runner.rb +7 -0
  17. data/lib/gitlab/qa/runtime/omnibus_configuration.rb +1 -1
  18. data/lib/gitlab/qa/runtime/omnibus_configurations/ci_decomposition.rb +32 -0
  19. data/lib/gitlab/qa/scenario/test/instance/deployment_base.rb +5 -0
  20. data/lib/gitlab/qa/scenario/test/instance/image.rb +3 -1
  21. data/lib/gitlab/qa/scenario/test/integration/geo.rb +2 -1
  22. data/lib/gitlab/qa/scenario/test/integration/gitaly_cluster.rb +2 -0
  23. data/lib/gitlab/qa/scenario/test/integration/mtls.rb +1 -0
  24. data/lib/gitlab/qa/scenario/test/omnibus/update.rb +1 -0
  25. data/lib/gitlab/qa/scenario/test/omnibus/upgrade.rb +1 -0
  26. data/lib/gitlab/qa/version.rb +1 -1
  27. data/lib/gitlab/qa.rb +1 -0
  28. data/scripts/generate-qa-jobs.rb +1 -0
  29. data/support/data/admin_access_token_seed.rb +24 -0
  30. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d38407d98e8584368fc76399d9b317935ff72c3db389678582ea498dab1aa2e
4
- data.tar.gz: e8d15459029b84436c36394372084d7a28607e1836dc34ef6ee3445b549d283b
3
+ metadata.gz: d08b53ffc75578165d38ea6c735882e0fdf9059ece88c1aa91ecdac67df8fa1d
4
+ data.tar.gz: 35091d5ab69c1a88a21ffe839c73d7fc23744517e28f4d6d193c92a7c1bb3252
5
5
  SHA512:
6
- metadata.gz: 25d386ced265585364f4482544d9d0ba72bb85dd2af7236caaae8ea1c7ac4c2af8701362eefbdd1a76ebaec8a80c7ca7b2e9cbd0fd2e935656a54f0183bb19ab
7
- data.tar.gz: 48a6a13c849393cb3d3ed7ef27b5f3fab21041e1a2073fa6dc95c8b973fb34e33183b7081388ac1e5db77fc9a223f9c45e3aefb6bb8dd306fbf41f2219b8c165
6
+ metadata.gz: 56119714620bfa55ed88e9136d4e5a35e72606996c6bab5e0a613ea16e14653dc50055a54cc4302d26dbd01ceb614ebbf85bca1d8237ffc5f402e36586e6e37e
7
+ data.tar.gz: 47ba7c6b6603cc8982b5fb5a54732550d13c40eea076f0fd46054a104093c2c97016d3e84a468e073e925ed1633f83085414667740230a2b6511ce2d3836b9c8
@@ -0,0 +1,25 @@
1
+ ce:ci_decomposition:
2
+ extends:
3
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
4
+ - .rules:ce-never-when-qa-tests-specified
5
+ - .test
6
+ - .high-capacity
7
+ - .ce-variables
8
+ - .rspec-report-opts
9
+ - .combined-gitlab-qa-options-script
10
+ parallel: 5
11
+ variables:
12
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config ci_decomposition"
13
+
14
+ ee:ci_decomposition:
15
+ extends:
16
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
17
+ - .rules:ee-never-when-qa-tests-specified
18
+ - .test
19
+ - .ee-variables
20
+ - .high-capacity
21
+ - .rspec-report-opts
22
+ - .combined-gitlab-qa-options-script
23
+ parallel: 5
24
+ variables:
25
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config ci_decomposition"
@@ -11,7 +11,7 @@ ee:cloud-activation:
11
11
  - .combined-gitlab-qa-options-script
12
12
  variables:
13
13
  QA_RSPEC_TAGS: "--tag cloud_activation"
14
- GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --seed-db license*.rb"
14
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --no-admin-token --seed-db license*.rb"
15
15
 
16
16
  ee:cloud-activation-quarantine:
17
17
  before_script:
@@ -27,4 +27,4 @@ ee:cloud-activation-quarantine:
27
27
  - .combined-gitlab-qa-options-script
28
28
  variables:
29
29
  QA_RSPEC_TAGS: "--tag cloud_activation"
30
- GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --seed-db license*.rb"
30
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --no-admin-token --seed-db license*.rb"
@@ -11,3 +11,5 @@ If you feel that your issue can be categorized as a reproducible bug or a featur
11
11
 
12
12
  Thank you for helping to make GitLab a better product.
13
13
  -->
14
+
15
+ <!-- template sourced from https://gitlab.com/gitlab-org/gitlab-qa/-/blob/master/.gitlab/issue_templates/Default.md -->
@@ -44,3 +44,5 @@ This checklist encourages us to confirm any changes have been analyzed to reduce
44
44
  * [ ] I have evaluated the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist) for this MR.
45
45
 
46
46
  /label ~QA ~Quality
47
+
48
+ <!-- template sourced from https://gitlab.com/gitlab-org/gitlab-qa/-/blob/master/.gitlab/merge_request_templates/Default.md -->
data/.gitlab-ci.yml CHANGED
@@ -50,9 +50,8 @@ prepare:
50
50
  extends: .rules:never-on-version-change-or-tag
51
51
  script:
52
52
  - |
53
- if [[ $TOP_UPSTREAM_SOURCE_PROJECT == "gitlab-org/gitlab" && -n $TOP_UPSTREAM_SOURCE_REF ]]; then
54
- # Replace '\' with '-' and convert to downcase
55
- export QA_IMAGE_TAG=$(echo "${TOP_UPSTREAM_SOURCE_REF//\//-}" | tr '[:upper:]' '[:lower:]')
53
+ if [[ $TOP_UPSTREAM_SOURCE_PROJECT == "gitlab-org/gitlab" && -n $TOP_UPSTREAM_SOURCE_SHA ]]; then
54
+ export QA_IMAGE_TAG=${TOP_UPSTREAM_SOURCE_SHA}
56
55
  else
57
56
  export QA_IMAGE_TAG=master
58
57
  fi
@@ -106,7 +106,7 @@ Multiple Configurators may be specified and the order will be preserved in which
106
106
 
107
107
  E.g., given the arguments:
108
108
 
109
- ```
109
+ ```ruby
110
110
  exe/gitlab-qa Test::Instance::Image EE --omnibus-config packages,registry
111
111
  # or
112
112
  exe/gitlab-qa Test::Instance::Image EE --omnibus-config packages --omnibus-config registry
@@ -136,7 +136,7 @@ Component::Gitlab.perform do |primary|
136
136
  primary.omnibus_configuration << <<~OMNIBUS
137
137
  geo_primary_role['enable'] = true
138
138
  OMNIBUS
139
-
139
+
140
140
  primary.instance do
141
141
  Component::Gitlab.perform do |secondary|
142
142
  secondary.omnibus_configuration << <<~OMNIBUS
@@ -181,10 +181,10 @@ one Omnibus configuration that might be unneccesary or Invalid for the Second In
181
181
 
182
182
  1. `Runtime::OmnibusConfigurations::Default`
183
183
  1. `Runtime::OmnibusConfigurations::[A,B,...]` where `A` and `B` are Configurators specified through the positional arguments `--a --b`
184
- 1. Custom written `Scenario::Template` (such as `Test::Integation::Geo`)
184
+ 1. Custom written `Scenario::Template` (such as `Test::Integration::Geo`)
185
185
  1. `lib/gitlab/qa/component/gitlab.rb`
186
186
 
187
- From top to bottom, configurations will be loaded and any configurations that are superceded, will take precedence over the one before it, and so on.
187
+ From top to bottom, configurations will be loaded and any configurations that are superseded, will take precedence over the one before it, and so on.
188
188
 
189
189
  ### Executing arbitrary shell commands within the GitLab Instance
190
190
 
@@ -637,6 +637,8 @@ container is spun up and tests are run from it by running the
637
637
  - `JIRA_ADMIN_USERNAME`: Username for authenticating with Jira server as admin.
638
638
  - `JIRA_ADMIN_PASSWORD`: Password for authenticating with Jira server as admin.
639
639
 
640
+ These values can be found in the shared GitLab QA 1Password vault.
641
+
640
642
  Example:
641
643
 
642
644
  ```
@@ -942,6 +944,14 @@ This scenario is a composition of two orchestrated scenarios. It tests the conta
942
944
  GITLAB_TLS_CERTIFICATE=$(cat /path/to/certificate.crt) gitlab-qa Test::Integration::RegistryTLS EE --omnibus-config object_storage_aws
943
945
  ```
944
946
 
947
+ ### Test::Instance::Image EE --omnibus-config ci_decomposition
948
+
949
+ This scenario is to run tests against GitLab instance with [decomposed database](https://gitlab.com/groups/gitlab-org/-/epics/6160) on a single Postgres:
950
+
951
+ ```ruby
952
+ gitlab-qa Test::Instance::Image EE --omnibus-config ci_decomposition
953
+ ```
954
+
945
955
  ### `Test::Instance::Geo EE|<full image address>:nightly|latest|any_tag http://geo-primary.gitlab http://geo-secondary.gitlab`
946
956
 
947
957
  This scenario will run tests tagged `:geo` against a live Geo deployment, by spinning up a GitLab QA (`gitlab/gitlab-qa`)
@@ -146,11 +146,23 @@ module Gitlab
146
146
  end
147
147
 
148
148
  def instance_no_teardown
149
- prepare
150
- start
151
- reconfigure
152
- wait_until_ready
153
- process_exec_commands
149
+ begin
150
+ retries ||= 0
151
+ prepare
152
+ start
153
+ reconfigure
154
+ wait_until_ready
155
+ process_exec_commands
156
+ rescue Docker::Shellout::StatusError => e
157
+ # for scenarios where a service fails during startup, attempt to retry to avoid flaky failures
158
+ if (retries += 1) < 3
159
+ puts "Retry instance_no_teardown due to Docker::Shellout::StatusError -- attempt #{retries}"
160
+ teardown!
161
+ retry
162
+ end
163
+
164
+ raise e
165
+ end
154
166
 
155
167
  yield self if block_given?
156
168
  end
@@ -22,6 +22,7 @@ module Gitlab
22
22
 
23
23
  command.env("discovery.type", "single-node")
24
24
  command.env("ES_JAVA_OPTS", "-Xms512m -Xmx512m")
25
+ command.env("xpack.security.enabled", "false")
25
26
  end
26
27
  end
27
28
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:disable Metrics/AbcSize
2
3
 
3
4
  require 'securerandom'
4
5
  require 'net/http'
@@ -14,7 +15,7 @@ module Gitlab
14
15
  extend Forwardable
15
16
 
16
17
  attr_reader :release, :omnibus_configuration, :omnibus_gitlab_rails_env
17
- attr_accessor :tls, :skip_availability_check, :runner_network
18
+ attr_accessor :tls, :skip_availability_check, :runner_network, :seed_admin_token, :seed_db
18
19
  attr_writer :name, :relative_path
19
20
 
20
21
  def_delegators :release, :tag, :image, :edition
@@ -42,8 +43,10 @@ module Gitlab
42
43
  @volumes[@gitlab_cert_path] = SSL_PATH
43
44
  @volumes[@authority_cert_path] = TRUSTED_PATH
44
45
 
46
+ @seed_admin_token = Runtime::Scenario.seed_admin_token
47
+ @seed_db = Runtime::Scenario.seed_db
48
+
45
49
  self.release = 'CE'
46
- self.exec_commands += seed_test_data_command if Runtime::Scenario.seed_db
47
50
  end
48
51
 
49
52
  def set_formless_login_token
@@ -154,8 +157,7 @@ module Gitlab
154
157
  @docker.attach(name) do |line, wait|
155
158
  puts line
156
159
  # TODO, workaround which allows to detach from the container
157
- #
158
- break if line =~ /gitlab Reconfigured!/
160
+ break if /gitlab Reconfigured!/.match?(line)
159
161
  end
160
162
  end
161
163
 
@@ -163,7 +165,6 @@ module Gitlab
163
165
  return if skip_availability_check
164
166
 
165
167
  if Availability.new(name, relative_path: relative_path, scheme: scheme, protocol_port: port.to_i).check(Runtime::Env.gitlab_availability_timeout)
166
- sleep 12 # TODO, handle that better
167
168
  puts ' -> GitLab is available.'
168
169
  else
169
170
  abort ' -> GitLab unavailable!'
@@ -171,9 +172,13 @@ module Gitlab
171
172
  end
172
173
 
173
174
  def process_exec_commands
174
- @docker.copy(name, DATA_SEED_PATH, DATA_PATH) if Runtime::Scenario.seed_db
175
+ @docker.copy(name, DATA_SEED_PATH, DATA_PATH) if seed_admin_token || seed_db
176
+
177
+ self.exec_commands += seed_admin_token_command if seed_admin_token
178
+ self.exec_commands += seed_test_data_command if seed_db
175
179
 
176
- exec_commands.each { |command| @docker.exec(name, command) }
180
+ Runtime::Logger.info("Running exec_commands...")
181
+ exec_commands.flatten.uniq.each { |command| @docker.exec(name, command) }
177
182
  end
178
183
 
179
184
  def sha_version
@@ -231,6 +236,10 @@ module Gitlab
231
236
  cmd.uniq
232
237
  end
233
238
 
239
+ def seed_admin_token_command
240
+ ["gitlab-rails runner #{DATA_PATH}/admin_access_token_seed.rb"]
241
+ end
242
+
234
243
  class Availability
235
244
  def initialize(name, relative_path: '', scheme: 'http', protocol_port: 80)
236
245
  @docker = Docker::Engine.new
@@ -276,3 +285,4 @@ module Gitlab
276
285
  end
277
286
  end
278
287
  end
288
+ # rubocop:enable Metrics/AbcSize
@@ -101,6 +101,18 @@ module Gitlab
101
101
  end
102
102
  end
103
103
 
104
+ def upload_file(file_fullpath:)
105
+ ignore_gitlab_client_exceptions do
106
+ Gitlab.upload_file(project, file_fullpath)
107
+ end
108
+ end
109
+
110
+ def ignore_gitlab_client_exceptions
111
+ yield
112
+ rescue StandardError, SystemCallError, OpenSSL::SSL::SSLError, Net::OpenTimeout, Net::ReadTimeout, Gitlab::Error::Error => e
113
+ puts "Ignoring the following error: #{e}"
114
+ end
115
+
104
116
  def handle_gitlab_client_exceptions
105
117
  yield
106
118
  rescue Gitlab::Error::NotFound
@@ -72,6 +72,8 @@ module Gitlab
72
72
  issue = super
73
73
  puts "for test '#{test.name}'."
74
74
 
75
+ post_or_update_failed_job_note(issue, test)
76
+
75
77
  issue
76
78
  end
77
79
 
@@ -82,10 +84,17 @@ module Gitlab
82
84
  end
83
85
  end
84
86
 
87
+ def full_stacktrace(test)
88
+ if test.failures.first['message_lines'].empty?
89
+ test.failures.first['message']
90
+ else
91
+ test.failures.first['message_lines'].join("\n")
92
+ end
93
+ end
94
+
85
95
  def find_relevant_failure_issues(test) # rubocop:disable Metrics/AbcSize
86
96
  ld = Class.new.extend(Gem::Text).method(:levenshtein_distance)
87
- full_stacktrace = test.failures.first['message_lines'].join("\n")
88
- first_test_failure_stacktrace = sanitize_stacktrace(full_stacktrace, FAILURE_STACKTRACE_REGEX) || full_stacktrace
97
+ first_test_failure_stacktrace = sanitize_stacktrace(full_stacktrace(test), FAILURE_STACKTRACE_REGEX) || full_stacktrace(test)
89
98
  clean_first_test_failure_stacktrace = remove_unique_resource_names(first_test_failure_stacktrace)
90
99
 
91
100
  # Search with the `search` param returns 500 errors, so we filter by ~QA and then filter further in Ruby
@@ -156,9 +165,10 @@ module Gitlab
156
165
  def new_issue_description(test)
157
166
  super + [
158
167
  "\n\n### Stack trace",
159
- "```\n#{test.failures.first['message_lines'].join("\n")}\n```",
168
+ "```\n#{full_stacktrace(test)}\n```",
160
169
  "First happened in #{test.ci_job_url}.",
161
- "Related test case: #{test.testcase}."
170
+ "Related test case: #{test.testcase}.",
171
+ screenshot_section(test)
162
172
  ].join("\n\n")
163
173
  end
164
174
 
@@ -194,6 +204,20 @@ module Gitlab
194
204
 
195
205
  false
196
206
  end
207
+
208
+ def screenshot_section(test)
209
+ section = ''
210
+
211
+ failure = full_stacktrace(test)
212
+
213
+ if test.screenshot? && !failure.include?('500 Internal Server Error') && !failure.include?('fabricate_via_api!')
214
+ relative_url = gitlab.upload_file(file_fullpath: test.failure_screenshot)
215
+
216
+ section = "### Screenshot: #{relative_url.markdown}"
217
+ end
218
+
219
+ section
220
+ end
197
221
  end
198
222
  end
199
223
  end
@@ -95,6 +95,14 @@ module Gitlab
95
95
  report['quarantine']['issue'] if quarantine?
96
96
  end
97
97
 
98
+ def screenshot?
99
+ report['screenshot'].present?
100
+ end
101
+
102
+ def failure_screenshot
103
+ report['screenshot']['image'] if screenshot?
104
+ end
105
+
98
106
  private
99
107
 
100
108
  # rubocop:disable Metrics/AbcSize
@@ -1,4 +1,6 @@
1
1
  require 'nokogiri'
2
+ require 'json'
3
+ require 'active_support/core_ext/object/blank'
2
4
 
3
5
  module Gitlab
4
6
  module QA
@@ -9,30 +11,50 @@ module Gitlab
9
11
  end
10
12
 
11
13
  REGEX = %r{(?<gitlab_qa_run>gitlab-qa-run-.*?(?=\/))\/(?<gitlab_ce_ee_qa>gitlab-(ee|ce)-qa-.*?(?=\/))}
14
+ CONTAINER_PATH = File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'tmp').freeze
12
15
 
13
16
  def invoke!
14
17
  Dir.glob(@files).each do |rspec_report_file|
15
- report = rewrite_each_screenshot_path(rspec_report_file)
18
+ match_data = rspec_report_file.match(REGEX)
19
+ artifact_path = "#{match_data[:gitlab_qa_run]}/#{match_data[:gitlab_ce_ee_qa]}"
16
20
 
17
- File.write(rspec_report_file, report)
21
+ xml_report = rewrite_each_xml_screenshot_path(rspec_report_file, artifact_path)
22
+
23
+ File.write(rspec_report_file, xml_report)
18
24
 
19
25
  puts "Saved #{rspec_report_file}"
26
+
27
+ json_rspec_report_file = rspec_report_file.gsub('.xml', '.json')
28
+ json_report = rewrite_each_json_screenshot_path(json_rspec_report_file, artifact_path)
29
+
30
+ File.write(json_rspec_report_file, json_report)
31
+
32
+ puts "Saved #{json_rspec_report_file}"
20
33
  end
21
34
  end
22
35
 
23
36
  private
24
37
 
25
- def rewrite_each_screenshot_path(rspec_report_file)
38
+ def rewrite_each_xml_screenshot_path(rspec_report_file, artifact_path)
26
39
  report = Nokogiri::XML(File.open(rspec_report_file))
27
40
 
28
- match_data = rspec_report_file.match(REGEX)
29
-
30
41
  report.xpath('//system-out').each do |system_out|
31
- system_out.content = system_out.content.gsub(File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'tmp'), "#{match_data[:gitlab_qa_run]}/#{match_data[:gitlab_ce_ee_qa]}")
42
+ system_out.content = system_out.content.gsub(CONTAINER_PATH, artifact_path)
32
43
  end
33
44
 
34
45
  report.to_s
35
46
  end
47
+
48
+ def rewrite_each_json_screenshot_path(json_rspec_report_file, artifact_path)
49
+ report = JSON.parse(File.read(json_rspec_report_file))
50
+ examples = report['examples']
51
+
52
+ examples.each do |example|
53
+ example['screenshot']['image'] = example['screenshot']['image'].gsub(CONTAINER_PATH, artifact_path) if example['screenshot'].present?
54
+ end
55
+
56
+ JSON.pretty_generate(report)
57
+ end
36
58
  end
37
59
  end
38
60
  end
@@ -13,6 +13,8 @@ module Gitlab
13
13
  Runtime::Scenario.define(:qa_image, Runtime::Env.qa_image) if Runtime::Env.qa_image
14
14
  Runtime::Scenario.define(:omnibus_configuration, Runtime::OmnibusConfiguration.new)
15
15
  Runtime::Scenario.define(:seed_db, false)
16
+ Runtime::Scenario.define(:seed_admin_token, true) # Create an admin access token for root user by default
17
+ Runtime::Scenario.define(:omnibus_exec_commands, [])
16
18
 
17
19
  # Omnibus Configurators specified by flags
18
20
  @active_configurators = []
@@ -31,6 +33,10 @@ module Gitlab
31
33
  Runtime::Scenario.define(:teardown, false)
32
34
  end
33
35
 
36
+ opts.on('--no-admin-token', 'Skip admin token creation for root user') do
37
+ Runtime::Scenario.define(:seed_admin_token, false)
38
+ end
39
+
34
40
  opts.on('--qa-image QA_IMAGE', String, 'Specifies a QA image to be used instead of inferring it from the GitLab image. See Gitlab::QA::Release#qa_image') do |value|
35
41
  Runtime::Scenario.define(:qa_image, value)
36
42
  end
@@ -135,6 +141,7 @@ module Gitlab
135
141
  # # Runtime::OmnibusConfiguration::Packages
136
142
  # gitlab_rails['packages_enabled'] = true
137
143
  Runtime::Scenario.omnibus_configuration << "# #{configurator.class.name}"
144
+ Runtime::Scenario.omnibus_exec_commands << configurator.exec_commands
138
145
 
139
146
  # Load the configuration
140
147
  configurator.configuration.split("\n").each { |c| Runtime::Scenario.omnibus_configuration << c }
@@ -33,7 +33,7 @@ module Gitlab
33
33
  # @return Any instance of [Gitlab::QA::Component::Base]
34
34
  def prepare; end
35
35
 
36
- # Commands to execute before GitLab boots
36
+ # Commands to execute before tests are run against GitLab (after reconfigure)
37
37
  def exec_commands
38
38
  []
39
39
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Runtime
6
+ module OmnibusConfigurations
7
+ class CiDecomposition < Default
8
+ def configuration
9
+ # HACK: commenting commands out as these commands should be run *after* the first
10
+ # reconfiguration (see first command in #exec_commands)
11
+ <<~OMNIBUS
12
+ #gitlab_rails['databases']['main']['enable'] = true
13
+ #gitlab_rails['databases']['ci']['enable'] = true
14
+ #gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production_ci'
15
+ OMNIBUS
16
+ end
17
+
18
+ def exec_commands
19
+ [
20
+ "sed -i 's/#gitlab_rails/gitlab_rails/g' /etc/gitlab/gitlab.rb",
21
+ "gitlab-ctl reconfigure",
22
+ "gitlab-psql -c 'create database gitlabhq_production_ci owner gitlab'",
23
+ "gitlab-psql -d gitlabhq_production_ci -c 'create extension btree_gist'",
24
+ "gitlab-psql -d gitlabhq_production_ci -c 'create extension pg_trgm'",
25
+ "gitlab-rake db:structure:load:ci"
26
+ ].freeze
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -27,6 +27,7 @@ module Gitlab
27
27
  specs.suite = @suite
28
28
  specs.release = release
29
29
  specs.args = non_rspec_args.push(*args)
30
+ specs.volumes[host_knapsack_report_path] = "/home/gitlab/qa/knapsack" if host_knapsack_report_path
30
31
  end
31
32
  end
32
33
 
@@ -37,6 +38,10 @@ module Gitlab
37
38
  def deployment_component
38
39
  raise NotImplementedError, 'Please define the Component for the deployment environment associated with this scenario.'
39
40
  end
41
+
42
+ def host_knapsack_report_path
43
+ ENV["QA_KNAPSACK_REPORT_PATH"]
44
+ end
40
45
  end
41
46
  end
42
47
  end
@@ -4,10 +4,11 @@ module Gitlab
4
4
  module Test
5
5
  module Instance
6
6
  class Image < Scenario::Template
7
- attr_writer :volumes
7
+ attr_writer :volumes, :seed_admin_token
8
8
 
9
9
  def initialize
10
10
  @volumes = {}
11
+ @seed_admin_token = true
11
12
  end
12
13
 
13
14
  def perform(release, *rspec_args)
@@ -15,6 +16,7 @@ module Gitlab
15
16
  gitlab.release = release
16
17
  gitlab.volumes = @volumes
17
18
  gitlab.network = 'test'
19
+ gitlab.seed_admin_token = @seed_admin_token
18
20
 
19
21
  gitlab.instance do
20
22
  Component::Specs.perform do |specs|
@@ -16,6 +16,7 @@ module Gitlab
16
16
  primary.release = release
17
17
  primary.name = 'gitlab-primary'
18
18
  primary.network = 'geo'
19
+ primary.seed_admin_token = false
19
20
  primary.omnibus_configuration << <<~OMNIBUS
20
21
  gitlab_rails['db_key_base'] = '4dd58204865eb41bca93bd38131d51cc';
21
22
  geo_primary_role['enable'] = true;
@@ -54,7 +55,7 @@ module Gitlab
54
55
  sidekiq['concurrency'] = 2;
55
56
  puma['worker_processes'] = 2;
56
57
  OMNIBUS
57
- secondary.exec_commands = fast_ssh_key_lookup_commands + QA::Scenario::CLICommands.git_lfs_install_commands
58
+ secondary.exec_commands += fast_ssh_key_lookup_commands + QA::Scenario::CLICommands.git_lfs_install_commands
58
59
 
59
60
  secondary.act do
60
61
  # TODO, we do not wait for secondary to start because of
@@ -37,6 +37,7 @@ module Gitlab
37
37
  praefect.name = @praefect_node_name
38
38
  praefect.network = @network
39
39
  praefect.skip_availability_check = true
40
+ praefect.seed_admin_token = false
40
41
 
41
42
  praefect.omnibus_configuration << praefect_omnibus_configuration
42
43
 
@@ -196,6 +197,7 @@ module Gitlab
196
197
  gitaly.name = name
197
198
  gitaly.network = @network
198
199
  gitaly.skip_availability_check = true
200
+ gitaly.seed_admin_token = false
199
201
  gitaly.omnibus_configuration << gitaly_omnibus_configuration
200
202
  gitaly.instance(skip_teardown: true)
201
203
  end
@@ -19,6 +19,7 @@ module Gitlab
19
19
  gitaly.name = @gitaly_name
20
20
  gitaly.network = @network
21
21
  gitaly.skip_availability_check = true
22
+ gitaly.seed_admin_token = false
22
23
 
23
24
  gitaly.omnibus_configuration << gitaly_omnibus
24
25
  gitaly.gitaly_tls
@@ -16,6 +16,7 @@ module Gitlab
16
16
  gitlab.release = previous_release
17
17
  gitlab.volumes = volumes
18
18
  gitlab.network = 'test'
19
+ gitlab.seed_admin_token = false
19
20
  gitlab.launch_and_teardown_instance
20
21
  end
21
22
 
@@ -23,6 +23,7 @@ module Gitlab
23
23
  Scenario::Test::Instance::Image
24
24
  .perform(ce_release.to_ee, *rspec_args) do |scenario|
25
25
  scenario.volumes = volumes
26
+ scenario.seed_admin_token = false
26
27
  end
27
28
  end
28
29
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '7.25.1'
5
+ VERSION = '7.27.1'
6
6
  end
7
7
  end
data/lib/gitlab/qa.rb CHANGED
@@ -20,6 +20,7 @@ module Gitlab
20
20
  autoload :ObjectStorageGcs, 'gitlab/qa/runtime/omnibus_configurations/object_storage_gcs'
21
21
  autoload :LicenseMode, 'gitlab/qa/runtime/omnibus_configurations/license_mode'
22
22
  autoload :RegistryObjectStorage, 'gitlab/qa/runtime/omnibus_configurations/registry_object_storage'
23
+ autoload :CiDecomposition, 'gitlab/qa/runtime/omnibus_configurations/ci_decomposition'
23
24
  end
24
25
  end
25
26
 
@@ -15,6 +15,7 @@ class GenerateQAJobs
15
15
  jobs.concat(load_yml_contents('custom_parallel'))
16
16
  jobs.concat(load_yml_contents('instance')) if should_run?('test_instance_all')
17
17
  jobs.concat(load_yml_contents('relative_url')) if should_run?('test_instance_all')
18
+ jobs.concat(load_yml_contents('ci_decomposition')) if should_run?('test_instance_all')
18
19
  jobs.concat(load_yml_contents('repository_storage')) if should_run?('test_instance_all_repository_storage')
19
20
  jobs.concat(load_yml_contents('omnibus_image'))
20
21
  jobs.concat(load_yml_contents('update')) if should_run?('test_instance_all')
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AdminAccessTokenSeed
4
+ TOKEN_VALUE = 'yF4CpxN55A1V0sHMuYQa'
5
+ SCOPES = Gitlab::Auth.all_available_scopes
6
+
7
+ def self.seed!
8
+ admin_user = User.find_by(username: 'root')
9
+
10
+ token_params = {
11
+ scopes: SCOPES.map(&:to_s),
12
+ name: 'admin-api-token'
13
+ }
14
+
15
+ admin_user.personal_access_tokens.build(token_params).tap do |pat|
16
+ pat.set_token(TOKEN_VALUE)
17
+ pat.save!
18
+ end
19
+
20
+ puts 'Personal access token seeded for root user.'
21
+ end
22
+ end
23
+
24
+ AdminAccessTokenSeed.seed!
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: 7.25.1
4
+ version: 7.27.1
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-05-03 00:00:00.000000000 Z
11
+ date: 2022-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -220,6 +220,7 @@ files:
220
220
  - ".gitlab-ci.yml"
221
221
  - ".gitlab/ci/jobs/actioncable.gitlab-ci.yml"
222
222
  - ".gitlab/ci/jobs/base.gitlab-ci.yml"
223
+ - ".gitlab/ci/jobs/ci_decomposition.gitlab-ci.yml"
223
224
  - ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
224
225
  - ".gitlab/ci/jobs/custom_parallel.gitlab-ci.yml"
225
226
  - ".gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml"
@@ -335,6 +336,7 @@ files:
335
336
  - lib/gitlab/qa/runtime/env.rb
336
337
  - lib/gitlab/qa/runtime/logger.rb
337
338
  - lib/gitlab/qa/runtime/omnibus_configuration.rb
339
+ - lib/gitlab/qa/runtime/omnibus_configurations/ci_decomposition.rb
338
340
  - lib/gitlab/qa/runtime/omnibus_configurations/default.rb
339
341
  - lib/gitlab/qa/runtime/omnibus_configurations/license_mode.rb
340
342
  - lib/gitlab/qa/runtime/omnibus_configurations/object_storage.rb
@@ -398,6 +400,7 @@ files:
398
400
  - lib/gitlab/qa/test_logger.rb
399
401
  - lib/gitlab/qa/version.rb
400
402
  - scripts/generate-qa-jobs.rb
403
+ - support/data/admin_access_token_seed.rb
401
404
  - support/data/license_usage_seed.rb
402
405
  - tls_certificates/authority/ca.crt
403
406
  - tls_certificates/authority/ca.key