gitlab-qa 10.3.0 → 12.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.gitlab/changelog_config.yml +13 -0
  4. data/.gitlab/merge_request_templates/Release.md +13 -34
  5. data/.gitlab-ci.yml +3 -1
  6. data/.rubocop.yml +13 -2
  7. data/.rubocop_todo.yml +57 -97
  8. data/Dangerfile +1 -5
  9. data/Gemfile.lock +47 -39
  10. data/README.md +1 -2
  11. data/docs/release_process.md +1 -1
  12. data/docs/running_against_remote_grid.md +42 -3
  13. data/docs/what_tests_can_be_run.md +5 -2
  14. data/gitlab-qa.gemspec +5 -3
  15. data/lib/gitlab/qa/component/base.rb +9 -9
  16. data/lib/gitlab/qa/component/gitaly.rb +7 -5
  17. data/lib/gitlab/qa/component/gitaly_cluster.rb +15 -9
  18. data/lib/gitlab/qa/component/gitlab.rb +48 -21
  19. data/lib/gitlab/qa/component/mail_hog.rb +1 -0
  20. data/lib/gitlab/qa/component/praefect.rb +41 -31
  21. data/lib/gitlab/qa/component/selenoid.rb +14 -7
  22. data/lib/gitlab/qa/component/specs.rb +11 -5
  23. data/lib/gitlab/qa/component/staging.rb +4 -4
  24. data/lib/gitlab/qa/component/telegraf.rb +2 -1
  25. data/lib/gitlab/qa/docker/engine.rb +6 -3
  26. data/lib/gitlab/qa/docker/volumes.rb +1 -1
  27. data/lib/gitlab/qa/release.rb +4 -4
  28. data/lib/gitlab/qa/runner.rb +10 -3
  29. data/lib/gitlab/qa/runtime/env.rb +47 -62
  30. data/lib/gitlab/qa/runtime/logger.rb +1 -1
  31. data/lib/gitlab/qa/runtime/omnibus_configuration.rb +1 -0
  32. data/lib/gitlab/qa/runtime/omnibus_configurations/decomposition_single_db.rb +1 -2
  33. data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_gcs.rb +2 -1
  34. data/lib/gitlab/qa/runtime/scenario.rb +1 -5
  35. data/lib/gitlab/qa/scenario/actable.rb +4 -4
  36. data/lib/gitlab/qa/scenario/test/instance/airgapped.rb +2 -4
  37. data/lib/gitlab/qa/scenario/test/instance/deployment_base.rb +2 -1
  38. data/lib/gitlab/qa/scenario/test/integration/gitaly_cluster.rb +0 -2
  39. data/lib/gitlab/qa/scenario/test/integration/group_saml.rb +1 -1
  40. data/lib/gitlab/qa/scenario/test/integration/ldap.rb +5 -6
  41. data/lib/gitlab/qa/scenario/test/integration/mtls.rb +20 -6
  42. data/lib/gitlab/qa/scenario/test/integration/oauth.rb +13 -4
  43. data/lib/gitlab/qa/scenario/test/integration/praefect.rb +16 -10
  44. data/lib/gitlab/qa/scenario/test/integration/registry_with_cdn.rb +5 -2
  45. data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +1 -1
  46. data/lib/gitlab/qa/scenario/test/omnibus/upgrade.rb +1 -3
  47. data/lib/gitlab/qa/scenario/test/sanity/version.rb +1 -1
  48. data/lib/gitlab/qa/support/config_scripts.rb +1 -1
  49. data/lib/gitlab/qa/support/gitlab_version_info.rb +30 -10
  50. data/lib/gitlab/qa/support/shell_command.rb +1 -0
  51. data/lib/gitlab/qa/test_logger.rb +2 -2
  52. data/lib/gitlab/qa/version.rb +1 -1
  53. data/lib/gitlab/qa.rb +0 -1
  54. data/support/data/admin_access_token_seed.rb +5 -1
  55. data/support/data/license_usage_seed.rb +3 -1
  56. metadata +16 -45
  57. data/bin/slack +0 -14
  58. data/exe/gitlab-qa-report +0 -10
  59. data/lib/gitlab/qa/report/base_test_results.rb +0 -39
  60. data/lib/gitlab/qa/report/find_set_dri.rb +0 -43
  61. data/lib/gitlab/qa/report/generate_test_session.rb +0 -275
  62. data/lib/gitlab/qa/report/gitlab_issue_client.rb +0 -190
  63. data/lib/gitlab/qa/report/gitlab_issue_dry_client.rb +0 -28
  64. data/lib/gitlab/qa/report/j_unit_test_results.rb +0 -27
  65. data/lib/gitlab/qa/report/json_test_results.rb +0 -29
  66. data/lib/gitlab/qa/report/prepare_stage_reports.rb +0 -86
  67. data/lib/gitlab/qa/report/relate_failure_issue.rb +0 -374
  68. data/lib/gitlab/qa/report/report_as_issue.rb +0 -176
  69. data/lib/gitlab/qa/report/report_results.rb +0 -64
  70. data/lib/gitlab/qa/report/results_in_issues.rb +0 -126
  71. data/lib/gitlab/qa/report/results_in_testcases.rb +0 -111
  72. data/lib/gitlab/qa/report/results_reporter_shared.rb +0 -70
  73. data/lib/gitlab/qa/report/summary_table.rb +0 -43
  74. data/lib/gitlab/qa/report/test_result.rb +0 -184
  75. data/lib/gitlab/qa/report/update_screenshot_path.rb +0 -63
  76. data/lib/gitlab/qa/reporter.rb +0 -131
  77. data/lib/gitlab/qa/runtime/omnibus_configurations/packages.rb +0 -17
  78. data/lib/gitlab/qa/runtime/token_finder.rb +0 -44
  79. data/lib/gitlab/qa/slack/post_to_slack.rb +0 -30
  80. data/lib/gitlab/qa/system_logs/finders/json_log_finder.rb +0 -65
  81. data/lib/gitlab/qa/system_logs/finders/rails/api_log_finder.rb +0 -21
  82. data/lib/gitlab/qa/system_logs/finders/rails/application_log_finder.rb +0 -21
  83. data/lib/gitlab/qa/system_logs/finders/rails/exception_log_finder.rb +0 -21
  84. data/lib/gitlab/qa/system_logs/finders/rails/graphql_log_finder.rb +0 -21
  85. data/lib/gitlab/qa/system_logs/log_types/log.rb +0 -38
  86. data/lib/gitlab/qa/system_logs/log_types/rails/api_log.rb +0 -34
  87. data/lib/gitlab/qa/system_logs/log_types/rails/application_log.rb +0 -27
  88. data/lib/gitlab/qa/system_logs/log_types/rails/exception_log.rb +0 -23
  89. data/lib/gitlab/qa/system_logs/log_types/rails/graphql_log.rb +0 -30
  90. data/lib/gitlab/qa/system_logs/shared_fields.rb +0 -29
  91. data/lib/gitlab/qa/system_logs/system_logs_formatter.rb +0 -65
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support'
3
4
  require 'active_support/core_ext/object/blank'
4
5
  require 'securerandom'
5
6
 
@@ -22,12 +23,17 @@ module Gitlab
22
23
  'QA_REMOTE_MOBILE_DEVICE_NAME' => :remote_mobile_device_name,
23
24
  'QA_REMOTE_TUNNEL_ID' => :remote_tunnel_id,
24
25
  'QA_BROWSER' => :browser,
26
+ 'QA_SELENOID_BROWSER_VERSION' => :selenoid_browser_version,
27
+ 'QA_RECORD_VIDEO' => :record_video,
28
+ 'QA_LAYOUT' => :layout,
29
+ 'QA_VIDEO_RECORDER_IMAGE' => :video_recorder_image,
30
+ 'QA_VIDEO_RECORDER_VERSION' => :video_recorder_version,
31
+ 'QA_SELENOID_BROWSER_IMAGE' => :selenoid_browser_image,
25
32
  'QA_ADDITIONAL_REPOSITORY_STORAGE' => :qa_additional_repository_storage,
26
33
  'QA_PRAEFECT_REPOSITORY_STORAGE' => :qa_praefect_repository_storage,
27
34
  'QA_GITALY_NON_CLUSTER_STORAGE' => :qa_gitaly_non_cluster_storage,
28
35
  'QA_COOKIES' => :qa_cookie,
29
36
  'QA_DEBUG' => :qa_debug,
30
- 'QA_DEFAULT_BRANCH' => :qa_default_branch,
31
37
  'QA_CAN_TEST_ADMIN_FEATURES' => :qa_can_test_admin_features,
32
38
  'QA_CAN_TEST_GIT_PROTOCOL_V2' => :qa_can_test_git_protocol_v2,
33
39
  'QA_CAN_TEST_PRAEFECT' => :qa_can_test_praefect,
@@ -42,7 +48,6 @@ module Gitlab
42
48
  'QA_SKIP_PULL' => :qa_skip_pull,
43
49
  'QA_VALIDATE_RESOURCE_REUSE' => :qa_validate_resource_reuse,
44
50
  'WEBDRIVER_HEADLESS' => :webdriver_headless,
45
- 'GITLAB_API_BASE' => :api_base,
46
51
  'GITLAB_ADMIN_USERNAME' => :admin_username,
47
52
  'GITLAB_ADMIN_PASSWORD' => :admin_password,
48
53
  'GITLAB_USERNAME' => :user_username,
@@ -57,7 +62,6 @@ module Gitlab
57
62
  'GITLAB_QA_ADMIN_ACCESS_TOKEN' => :qa_admin_access_token,
58
63
  'GITLAB_QA_DEV_ACCESS_TOKEN' => :qa_dev_access_token,
59
64
  'GITLAB_QA_CONTAINER_REGISTRY_ACCESS_TOKEN' => :qa_container_registry_access_token,
60
- 'GITLAB_QA_ISSUE_URL' => :qa_issue_url,
61
65
  'GITHUB_ACCESS_TOKEN' => :github_access_token,
62
66
  'GITLAB_URL' => :gitlab_url,
63
67
  'SIMPLE_SAML_HOSTNAME' => :simple_saml_hostname,
@@ -69,22 +73,26 @@ module Gitlab
69
73
  'CLOUDSDK_CORE_PROJECT' => :cloudsdk_core_project,
70
74
  'GCLOUD_REGION' => :gcloud_region,
71
75
  'SIGNUP_DISABLED' => :signup_disabled,
72
- 'GITLAB_CI_API_TOKEN' => :gitlab_ci_api_token,
73
76
  'GITLAB_QA_USERNAME_1' => :gitlab_qa_username_1,
74
77
  'GITLAB_QA_PASSWORD_1' => :gitlab_qa_password_1,
75
78
  'GITLAB_QA_USERNAME_2' => :gitlab_qa_username_2,
76
79
  'GITLAB_QA_PASSWORD_2' => :gitlab_qa_password_2,
77
80
  'QA_GITHUB_USERNAME' => :qa_github_username,
78
81
  'QA_GITHUB_PASSWORD' => :qa_github_password,
82
+ 'QA_FACEBOOK_USERNAME' => :qa_facebook_username,
83
+ 'QA_FACEBOOK_PASSWORD' => :qa_facebook_password,
79
84
  'KNAPSACK_GENERATE_REPORT' => :knapsack_generate_report,
80
85
  'KNAPSACK_REPORT_PATH' => :knapsack_report_path,
81
86
  'KNAPSACK_TEST_FILE_PATTERN' => :knapsack_test_file_pattern,
82
87
  'KNAPSACK_TEST_DIR' => :knapsack_test_dir,
83
88
  'QA_KNAPSACK_REPORT_GCS_CREDENTIALS' => :qa_knapsack_report_gcs_credentials,
84
89
  'QA_KNAPSACK_REPORT_PATH' => :qa_knapsack_report_path,
90
+ 'QA_RSPEC_REPORT_PATH' => :qa_rspec_report_path,
91
+ 'RSPEC_FAST_QUARANTINE_PATH' => :rspec_fast_quarantine_path,
92
+ 'RSPEC_SKIPPED_TESTS_REPORT_PATH' => :skipped_tests_report_path,
85
93
  'CI' => :ci,
86
- 'CI_COMMIT_REF_NAME' => :ci_commit_ref_name,
87
94
  'CI_JOB_NAME' => :ci_job_name,
95
+ 'CI_JOB_NAME_SLUG' => :ci_job_name_slug,
88
96
  'CI_JOB_URL' => :ci_job_url,
89
97
  'CI_JOB_TOKEN' => :ci_job_token,
90
98
  'CI_RUNNER_ID' => :ci_runner_id,
@@ -92,22 +100,16 @@ module Gitlab
92
100
  'CI_SERVER_PERSONAL_ACCESS_TOKEN' => :ci_server_personal_access_token,
93
101
  'CI_NODE_INDEX' => :ci_node_index,
94
102
  'CI_NODE_TOTAL' => :ci_node_total,
95
- 'CI_PROJECT_ID' => :ci_project_id,
96
103
  'CI_PROJECT_NAME' => :ci_project_name,
97
104
  'CI_PROJECT_PATH' => :ci_project_path,
98
- 'CI_SLACK_WEBHOOK_URL' => :ci_slack_webhook_url,
99
- 'CI_PIPELINE_ID' => :ci_pipeline_id,
100
105
  'CI_PIPELINE_SOURCE' => :ci_pipeline_source,
101
106
  'CI_PIPELINE_URL' => :ci_pipeline_url,
102
107
  'CI_PIPELINE_CREATED_AT' => :ci_pipeline_created_at,
103
108
  'CI_MERGE_REQUEST_IID' => :ci_merge_request_iid,
104
- 'CI_API_V4_URL' => :ci_api_v4_url,
105
109
  'GITLAB_CI' => :gitlab_ci,
106
110
  'ELASTIC_URL' => :elastic_url,
107
111
  'GITLAB_QA_LOOP_RUNNER_MINUTES' => :gitlab_qa_loop_runner_minutes,
108
112
  'MAILHOG_HOSTNAME' => :mailhog_hostname,
109
- 'SLACK_QA_CHANNEL' => :slack_qa_channel,
110
- 'SLACK_ICON_EMOJI' => :slack_icon_emoji,
111
113
  'GITLAB_QA_FORMLESS_LOGIN_TOKEN' => :gitlab_qa_formless_login_token,
112
114
  'GEO_MAX_FILE_REPLICATION_TIME' => :geo_max_file_replication_time,
113
115
  'GEO_MAX_DB_REPLICATION_TIME' => :geo_max_db_replication_time,
@@ -115,7 +117,6 @@ module Gitlab
115
117
  'JIRA_ADMIN_USERNAME' => :jira_admin_username,
116
118
  'JIRA_ADMIN_PASSWORD' => :jira_admin_password,
117
119
  'CACHE_NAMESPACE_NAME' => :cache_namespace_name,
118
- 'DEPLOY_VERSION' => :deploy_version,
119
120
  'GITLAB_QA_USER_AGENT' => :gitlab_qa_user_agent,
120
121
  'GEO_FAILOVER' => :geo_failover,
121
122
  'GITLAB_INITIAL_ROOT_PASSWORD' => :initial_root_password,
@@ -142,6 +143,8 @@ module Gitlab
142
143
  'JH_ENV' => :jh_env,
143
144
  'QA_GITHUB_OAUTH_APP_ID' => :github_oauth_app_id,
144
145
  'QA_GITHUB_OAUTH_APP_SECRET' => :github_oauth_app_secret,
146
+ 'QA_FACEBOOK_OAUTH_APP_ID' => :facebook_oauth_app_id,
147
+ 'QA_FACEBOOK_OAUTH_APP_SECRET' => :facebook_oauth_app_secret,
145
148
  'QA_1P_EMAIL' => :qa_1p_email,
146
149
  'QA_1P_PASSWORD' => :qa_1p_password,
147
150
  'QA_1P_SECRET' => :qa_1p_secret,
@@ -151,16 +154,15 @@ module Gitlab
151
154
  'RELEASE_REGISTRY_USERNAME' => :release_registry_username,
152
155
  'RELEASE_REGISTRY_PASSWORD' => :release_registry_password,
153
156
  'SELENOID_DIRECTORY' => :selenoid_directory,
154
- 'USE_SELENOID' => :use_selenoid
157
+ 'USE_SELENOID' => :use_selenoid,
158
+ 'SCHEDULE_TYPE' => :schedule_type
155
159
  }.freeze
156
160
 
157
161
  ENV_VARIABLES.each do |env_name, method_name|
158
162
  attr_writer(method_name)
159
163
 
160
164
  define_method(method_name) do
161
- env_var_value_if_defined(env_name) || (if instance_variable_defined?("@#{method_name}")
162
- instance_variable_get("@#{method_name}")
163
- end)
165
+ env_var_value_if_defined(env_name) || (instance_variable_get("@#{method_name}") if instance_variable_defined?("@#{method_name}"))
164
166
  end
165
167
  end
166
168
 
@@ -171,7 +173,7 @@ module Gitlab
171
173
  value = env_var_name_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
172
174
  vars[name] = value if value
173
175
  end
174
- qa_variables = ENV.each_with_object({}) do |(name, value), vars|
176
+ qa_variables = ENV.each_with_object({}) do |(name, _value), vars|
175
177
  next unless name.start_with?('QA_')
176
178
 
177
179
  var_name = env_var_name_if_defined(name)
@@ -182,7 +184,7 @@ module Gitlab
182
184
  end
183
185
 
184
186
  def debug?
185
- enabled?(ENV['QA_DEBUG'], default: true)
187
+ enabled?(ENV.fetch('QA_DEBUG', nil), default: true)
186
188
  end
187
189
 
188
190
  def log_level
@@ -193,10 +195,6 @@ module Gitlab
193
195
  env_var_value_if_defined('QA_LOG_PATH') || host_artifacts_dir
194
196
  end
195
197
 
196
- def default_branch
197
- env_var_value_if_defined('QA_DEFAULT_BRANCH') || 'main'
198
- end
199
-
200
198
  def gitlab_availability_timeout
201
199
  (env_var_value_if_defined('GITLAB_QA_AVAILABILITY_TIMEOUT') || 360).to_i
202
200
  end
@@ -209,20 +207,12 @@ module Gitlab
209
207
  env_var_value_if_defined('GITLAB_DEV_USERNAME') || 'gitlab-qa-bot'
210
208
  end
211
209
 
212
- def gitlab_api_base
213
- env_var_value_if_defined('GITLAB_API_BASE') || 'https://gitlab.com/api/v4'
214
- end
215
-
216
- def pipeline_from_project_name
217
- ci_project_name.to_s.start_with?('gitlab') ? QA::Runtime::Env.default_branch : ci_project_name
218
- end
219
-
220
210
  def run_id
221
211
  @run_id ||= "gitlab-qa-run-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}-#{SecureRandom.hex(4)}"
222
212
  end
223
213
 
224
214
  def colorized_logs?
225
- enabled?(ENV['COLORIZED_LOGS'], default: false)
215
+ enabled?(ENV.fetch('COLORIZED_LOGS', nil), default: false)
226
216
  end
227
217
 
228
218
  def dev_access_token_variable
@@ -233,10 +223,6 @@ module Gitlab
233
223
  env_var_value_if_defined('GITLAB_INITIAL_ROOT_PASSWORD') || '5iveL!fe'
234
224
  end
235
225
 
236
- def deploy_environment
237
- env_var_value_if_defined('DEPLOY_ENVIRONMENT') || pipeline_from_project_name
238
- end
239
-
240
226
  def host_artifacts_dir
241
227
  @host_artifacts_dir ||= File.join(
242
228
  env_var_value_if_defined('QA_ARTIFACTS_DIR') || '/tmp/gitlab-qa', Runtime::Env.run_id
@@ -275,18 +261,6 @@ module Gitlab
275
261
  raise ArgumentError, "Please provide GITLAB_QA_DEV_ACCESS_TOKEN"
276
262
  end
277
263
 
278
- def require_slack_qa_channel!
279
- return unless env_var_value_if_defined('SLACK_QA_CHANNEL').to_s.strip.empty?
280
-
281
- raise ArgumentError, "Please provide SLACK_QA_CHANNEL"
282
- end
283
-
284
- def require_ci_slack_webhook_url!
285
- return unless env_var_value_if_defined('CI_SLACK_WEBHOOK_URL').to_s.strip.empty?
286
-
287
- raise ArgumentError, "Please provide CI_SLACK_WEBHOOK_URL"
288
- end
289
-
290
264
  def require_qa_container_registry_access_token!
291
265
  return unless env_var_value_if_defined('GITLAB_QA_CONTAINER_REGISTRY_ACCESS_TOKEN').to_s.strip.empty?
292
266
 
@@ -295,32 +269,31 @@ module Gitlab
295
269
 
296
270
  def require_aws_s3_environment!
297
271
  %w[AWS_S3_REGION AWS_S3_KEY_ID AWS_S3_ACCESS_KEY AWS_S3_BUCKET_NAME].each do |env_key|
298
- unless ENV.key?(env_key)
299
- raise ArgumentError, "Environment variable #{env_key} must be set to run AWS S3 object storage specs"
300
- end
272
+ raise ArgumentError, "Environment variable #{env_key} must be set to run AWS S3 object storage specs" unless ENV.key?(env_key)
301
273
  end
302
274
  end
303
275
 
304
276
  def require_gcs_environment!
305
277
  %w[GOOGLE_PROJECT GOOGLE_CLIENT_EMAIL GOOGLE_JSON_KEY GCS_BUCKET_NAME].each do |env_key|
306
- unless ENV.key?(env_key)
307
- raise ArgumentError, "Environment variable #{env_key} must be set to run GCS object storage specs"
308
- end
278
+ raise ArgumentError, "Environment variable #{env_key} must be set to run GCS object storage specs" unless ENV.key?(env_key)
309
279
  end
310
280
  end
311
281
 
312
282
  def require_gcs_with_cdn_environment!
313
- %w[GOOGLE_CDN_JSON_KEY GCS_CDN_BUCKET_NAME GOOGLE_CDN_LB GOOGLE_CDN_SIGNURL_KEY GOOGLE_CDN_SIGNURL_KEY_NAME].each do |env_key|
314
- unless ENV.key?(env_key)
315
- raise ArgumentError, "Environment variable #{env_key} must be set to run GCS with CDN enabled scenario"
316
- end
283
+ %w[GOOGLE_CDN_JSON_KEY GCS_CDN_BUCKET_NAME GOOGLE_CDN_LB GOOGLE_CDN_SIGNURL_KEY
284
+ GOOGLE_CDN_SIGNURL_KEY_NAME].each do |env_key|
285
+ raise ArgumentError, "Environment variable #{env_key} must be set to run GCS with CDN enabled scenario" unless ENV.key?(env_key)
317
286
  end
318
287
  end
319
288
 
320
289
  def require_oauth_environment!
321
290
  %w[QA_GITHUB_OAUTH_APP_ID QA_GITHUB_OAUTH_APP_SECRET QA_GITHUB_USERNAME
322
- QA_GITHUB_PASSWORD QA_1P_EMAIL QA_1P_PASSWORD QA_1P_SECRET QA_1P_GITHUB_UUID].each do |env_key|
323
- raise ArgumentError, "Environment variable #{env_key} must be set to run OAuth specs" unless ENV.key?(env_key)
291
+ QA_GITHUB_PASSWORD QA_1P_EMAIL QA_1P_PASSWORD QA_1P_SECRET QA_1P_GITHUB_UUID QA_FACEBOOK_USERNAME
292
+ QA_FACEBOOK_PASSWORD QA_FACEBOOK_OAUTH_APP_SECRET QA_FACEBOOK_OAUTH_APP_ID].each do |env_key|
293
+ unless ENV.key?(env_key)
294
+ raise ArgumentError,
295
+ "Environment variable #{env_key} must be set to run OAuth specs"
296
+ end
324
297
  end
325
298
  end
326
299
 
@@ -364,8 +337,20 @@ module Gitlab
364
337
  env_var_value_if_defined('QA_LAYOUT')&.match?(/tablet|phone/i)
365
338
  end
366
339
 
367
- def browser_version
368
- env_var_value_if_defined('QA_BROWSER_VERSION')
340
+ def video_recorder_image
341
+ env_var_value_if_defined('QA_VIDEO_RECORDER_IMAGE') || 'presidenten/selenoid-manual-video-recorder'
342
+ end
343
+
344
+ def video_recorder_version
345
+ env_var_value_if_defined('QA_VIDEO_RECORDER_VERSION') || 'latest'
346
+ end
347
+
348
+ def selenoid_browser_image
349
+ env_var_value_if_defined('QA_SELENOID_BROWSER_IMAGE') || 'selenoid/chrome'
350
+ end
351
+
352
+ def selenoid_browser_version
353
+ env_var_value_if_defined('QA_SELENOID_BROWSER_VERSION') || '111.0'
369
354
  end
370
355
 
371
356
  def qa_run_type
@@ -458,7 +443,7 @@ module Gitlab
458
443
  end
459
444
 
460
445
  def env_var_value_if_defined(variable)
461
- return ENV[variable] if env_var_value_valid?(variable)
446
+ return ENV.fetch(variable, nil) if env_var_value_valid?(variable)
462
447
  end
463
448
 
464
449
  def env_var_name_if_defined(variable)
@@ -14,7 +14,7 @@ module Gitlab
14
14
  def self.logger
15
15
  @logger ||= begin
16
16
  log_path = Env.log_path
17
- ::FileUtils.mkdir_p(log_path) unless File.exist?(log_path)
17
+ ::FileUtils.mkdir_p(log_path)
18
18
 
19
19
  TestLogger.logger(level: Env.log_level, path: log_path)
20
20
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support'
3
4
  require 'active_support/core_ext/object/blank'
4
5
 
5
6
  module Gitlab
@@ -8,8 +8,7 @@ module Gitlab
8
8
  def configuration
9
9
  <<~OMNIBUS
10
10
  gitlab_rails['databases']['main']['enable'] = true
11
- gitlab_rails['databases']['ci']['enable'] = true
12
- gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production'
11
+ gitlab_rails['databases']['ci']['enable'] = false
13
12
  OMNIBUS
14
13
  end
15
14
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'tempfile'
3
4
 
4
5
  module Gitlab
@@ -26,7 +27,7 @@ module Gitlab
26
27
  end
27
28
 
28
29
  def setup_json_key
29
- Tempfile.open('gcs-json-key', ENV['CI_PROJECT_DIR']) do |file|
30
+ Tempfile.open('gcs-json-key', ENV.fetch('CI_PROJECT_DIR', nil)) do |file|
30
31
  file.write(ENV.fetch('GOOGLE_JSON_KEY'))
31
32
 
32
33
  file
@@ -18,18 +18,14 @@ module Gitlab
18
18
 
19
19
  define_singleton_method(attribute) do
20
20
  attributes[attribute.to_sym].tap do |value|
21
- if value.to_s.empty?
22
- raise ArgumentError, "Empty `#{attribute}` attribute!"
23
- end
21
+ raise ArgumentError, "Empty `#{attribute}` attribute!" if value.to_s.empty?
24
22
  end
25
23
  end
26
24
  end
27
25
 
28
- # rubocop:disable Style/MethodMissing
29
26
  def method_missing(name, *)
30
27
  raise ArgumentError, "Scenario attribute `#{name}` not defined!"
31
28
  end
32
- # rubocop:enable Style/MethodMissing
33
29
  end
34
30
  end
35
31
  end
@@ -4,8 +4,8 @@ module Gitlab
4
4
  module QA
5
5
  module Scenario
6
6
  module Actable
7
- def act(*args, &block)
8
- instance_exec(*args, &block)
7
+ def act(...)
8
+ instance_exec(...)
9
9
  end
10
10
 
11
11
  def self.included(base)
@@ -17,8 +17,8 @@ module Gitlab
17
17
  yield new if block_given?
18
18
  end
19
19
 
20
- def act(*args, &block)
21
- new.act(*args, &block)
20
+ def act(...)
21
+ new.act(...)
22
22
  end
23
23
  end
24
24
  end
@@ -80,10 +80,10 @@ module Gitlab
80
80
  iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
81
81
  iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
82
82
 
83
- # some exceptions to allow runners access network https://gitlab.com/gitlab-org/gitlab-qa/-/issues/700
83
+ # some exceptions to allow runners access network https://gitlab.com/gitlab-org/gitlab-qa/-/issues/700#{' '}
84
84
  iptables -A OUTPUT -p tcp -d #{gitlab_registry_ip} -j ACCEPT
85
85
  iptables -A OUTPUT -p tcp -d #{dev_gitlab_registry_ip} -j ACCEPT
86
- # allow access to praefect node
86
+ # allow access to praefect node#{' '}
87
87
  iptables -A OUTPUT -p tcp -d #{praefect_ip} -j ACCEPT
88
88
 
89
89
  # Should now fail to ping gitlab_ip, port 22/80 should be open
@@ -130,8 +130,6 @@ module Gitlab
130
130
  ]
131
131
  }
132
132
  ];
133
- grafana['disable_login_form'] = false;
134
- grafana['admin_password'] = 'GRAFANA_ADMIN_PASSWORD';
135
133
  OMNIBUS
136
134
  end
137
135
  end
@@ -37,7 +37,8 @@ module Gitlab
37
37
  end
38
38
 
39
39
  def deployment_component
40
- raise NotImplementedError, 'Please define the Component for the deployment environment associated with this scenario.'
40
+ raise NotImplementedError,
41
+ 'Please define the Component for the deployment environment associated with this scenario.'
41
42
  end
42
43
  end
43
44
  end
@@ -79,8 +79,6 @@ module Gitlab
79
79
  ]
80
80
  }
81
81
  ];
82
- grafana['disable_login_form'] = false;
83
- grafana['admin_password'] = 'GRAFANA_ADMIN_PASSWORD';
84
82
  OMNIBUS
85
83
  end
86
84
  end
@@ -18,7 +18,7 @@ module Gitlab
18
18
  raise ArgumentError, 'Group SAML is EE only feature!' unless release.ee?
19
19
  end
20
20
 
21
- def configure(gitlab, saml)
21
+ def configure(gitlab, _saml)
22
22
  gitlab.omnibus_configuration << <<~OMNIBUS
23
23
  gitlab_rails['omniauth_enabled'] = true;
24
24
  gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }];
@@ -66,16 +66,14 @@ module Gitlab
66
66
  end
67
67
  end
68
68
 
69
- def orchestrate_ldap
69
+ def orchestrate_ldap(&block)
70
70
  Component::LDAP.perform do |ldap|
71
71
  ldap.name = 'ldap-server'
72
72
  ldap.network = 'test'
73
73
  ldap.set_gitlab_credentials
74
74
  ldap.tls = tls
75
75
 
76
- ldap.instance do
77
- yield
78
- end
76
+ ldap.instance(&block)
79
77
  end
80
78
  end
81
79
 
@@ -90,8 +88,9 @@ module Gitlab
90
88
  if orchestrate_ldap_server
91
89
  orchestrate_ldap { run_specs(gitlab, {}, *rspec_args) }
92
90
  else
93
- volumes = { 'admin': File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/admin'),
94
- 'non_admin': File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/non_admin') }
91
+ volumes = { admin: File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/admin'),
92
+ non_admin: File.join(Docker::Volumes::QA_CONTAINER_WORKDIR,
93
+ 'qa/fixtures/ldap/non_admin') }
95
94
  run_specs(gitlab, volumes, *rspec_args)
96
95
  end
97
96
  end
@@ -87,17 +87,32 @@ module Gitlab
87
87
 
88
88
  def gitaly_omnibus
89
89
  <<~OMNIBUS
90
- gitaly['tls_listen_addr'] = '0.0.0.0:9999';
91
- gitaly['certificate_path'] = '/etc/gitlab/ssl/gitaly.test.crt';
92
- gitaly['key_path'] = '/etc/gitlab/ssl/gitaly.test.key';
93
-
90
+ gitaly['configuration'] = {
91
+ auth: {
92
+ token: 'abc123secret',
93
+ },
94
+ tls_listen_addr: '0.0.0.0:9999',
95
+ tls: {
96
+ certificate_path: '/etc/gitlab/ssl/gitaly.test.crt',
97
+ key_path: '/etc/gitlab/ssl/gitaly.test.key',
98
+ },
99
+ storage: [
100
+ {
101
+ name: 'default',
102
+ path: '/var/opt/gitlab/git-data/repositories',
103
+ },
104
+ {
105
+ name: 'storage1',
106
+ path: '/mnt/gitlab/git-data/repositories',
107
+ },
108
+ ],
109
+ };
94
110
  postgresql['enable'] = false;
95
111
  redis['enable'] = false;
96
112
  nginx['enable'] = false;
97
113
  puma['enable'] = false;
98
114
  sidekiq['enable'] = false;
99
115
  gitlab_workhorse['enable'] = false;
100
- grafana['enable'] = false;
101
116
  gitlab_exporter['enable'] = false;
102
117
  alertmanager['enable'] = false;
103
118
  prometheus['enable'] = false;
@@ -105,7 +120,6 @@ module Gitlab
105
120
  gitlab_rails['rake_cache_clear'] = false;
106
121
  gitlab_rails['auto_migrate'] = false;
107
122
 
108
- gitaly['auth_token'] = 'abc123secret';
109
123
  gitlab_shell['secret_token'] = 'shellsecret';
110
124
 
111
125
  gitlab_rails['internal_api_url'] = 'https://#{@gitlab_name}.#{@network}';
@@ -11,7 +11,7 @@ module Gitlab
11
11
  attr_reader :gitlab_name
12
12
 
13
13
  def initialize
14
- @gitlab_name = 'gitlab-oauth'
14
+ @gitlab_name = 'gitlab'
15
15
  end
16
16
 
17
17
  def perform(release, *rspec_args)
@@ -23,8 +23,9 @@ module Gitlab
23
23
  gitlab.release = release
24
24
  gitlab.network = 'test'
25
25
  gitlab.name = gitlab_name
26
+ gitlab.tls = true
26
27
 
27
- gitlab.omnibus_configuration << gitlab_omnibus_configuration
28
+ gitlab.omnibus_configuration << gitlab_omnibus_configuration(gitlab.address)
28
29
 
29
30
  gitlab.instance do
30
31
  Runtime::Logger.info('Running OAuth specs!')
@@ -43,10 +44,10 @@ module Gitlab
43
44
 
44
45
  private
45
46
 
46
- def gitlab_omnibus_configuration
47
+ def gitlab_omnibus_configuration(gitlab_address)
47
48
  <<~OMNIBUS
48
49
  gitlab_rails['omniauth_enabled'] = true;
49
- gitlab_rails['omniauth_allow_single_sign_on'] = ['github'];
50
+ gitlab_rails['omniauth_allow_single_sign_on'] = ['github', 'facebook'];
50
51
  gitlab_rails['omniauth_block_auto_created_users'] = false;
51
52
  gitlab_rails['omniauth_providers'] = [
52
53
  {
@@ -56,8 +57,16 @@ module Gitlab
56
57
  url: 'https://github.com/',
57
58
  verify_ssl: false,
58
59
  args: { scope: 'user:email' }
60
+ },
61
+ {
62
+ name: 'facebook',
63
+ app_id: '$QA_FACEBOOK_OAUTH_APP_ID',
64
+ app_secret: '$QA_FACEBOOK_OAUTH_APP_SECRET',
65
+ verify_ssl: false
59
66
  }
60
67
  ];
68
+ letsencrypt['enable'] = false;
69
+ external_url '#{gitlab_address}';
61
70
  OMNIBUS
62
71
  end
63
72
  end
@@ -30,14 +30,22 @@ module Gitlab
30
30
  }
31
31
  });
32
32
  gitaly['enable'] = true;
33
- gitaly['listen_addr'] = '0.0.0.0:8075';
34
- gitaly['auth_token'] = 'secret-token';
35
- gitaly['storage'] = [
36
- {
37
- 'name' => 'gitaly',
38
- 'path' => '/var/opt/gitlab/git-data/repositories'
39
- }
40
- ];
33
+ gitaly['configuration'] = {
34
+ auth: {
35
+ token: 'secret-token',
36
+ },
37
+ listen_addr: '0.0.0.0:8075',
38
+ tls: {
39
+ certificate_path: '/etc/gitlab/ssl/gitaly.test.crt',
40
+ key_path: '/etc/gitlab/ssl/gitaly.test.key',
41
+ },
42
+ storage: [
43
+ {
44
+ name: 'gitaly',
45
+ path: '/var/opt/gitlab/git-data/repositories',
46
+ },
47
+ ],
48
+ };
41
49
  gitlab_rails['gitaly_token'] = 'secret-token';
42
50
  gitlab_shell['secret_token'] = 'GITLAB_SHELL_SECRET_TOKEN';
43
51
  prometheus['scrape_configs'] = [
@@ -60,8 +68,6 @@ module Gitlab
60
68
  ]
61
69
  }
62
70
  ];
63
- grafana['disable_login_form'] = false;
64
- grafana['admin_password'] = 'GRAFANA_ADMIN_PASSWORD';
65
71
  OMNIBUS
66
72
  end
67
73
  end
@@ -14,8 +14,8 @@ module Gitlab
14
14
  gitlab.network = 'test'
15
15
  gitlab.name = 'gitlab'
16
16
  gitlab.seed_admin_token = false
17
- sign_url_key_path = gitlab.copy_key_file('GOOGLE_CDN_SIGNURL_KEY')
18
- cdn_gcloud_path = gitlab.copy_key_file('GOOGLE_CDN_JSON_KEY')
17
+ sign_url_key_path = gitlab.create_key_file('GOOGLE_CDN_SIGNURL_KEY')
18
+ cdn_gcloud_path = gitlab.create_key_file('GOOGLE_CDN_JSON_KEY')
19
19
 
20
20
  gitlab.omnibus_configuration << <<~OMNIBUS
21
21
  external_url 'http://#{gitlab.name}.#{gitlab.network}';
@@ -32,6 +32,9 @@ module Gitlab
32
32
  specs.network = gitlab.network
33
33
  specs.args = [gitlab.address, *rspec_args]
34
34
  end
35
+ ensure
36
+ gitlab.delete_key_file(sign_url_key_path)
37
+ gitlab.delete_key_file(cdn_gcloud_path)
35
38
  end
36
39
  end
37
40
  end
@@ -115,7 +115,7 @@ module Gitlab
115
115
  # @param [Gitlab::QA::Release] release
116
116
  # @return [Boolean]
117
117
  def run_specs?(release)
118
- [upgrade_path.first, current_release].any? { |rel| rel == release }
118
+ [upgrade_path.first, current_release].any?(release)
119
119
  end
120
120
  end
121
121
  end
@@ -12,9 +12,7 @@ module Gitlab
12
12
  def perform(image = 'CE', *rspec_args)
13
13
  ce_release = QA::Release.new(image)
14
14
 
15
- if ce_release.ee?
16
- raise ArgumentError, 'Only CE can be upgraded to EE!'
17
- end
15
+ raise ArgumentError, 'Only CE can be upgraded to EE!' if ce_release.ee?
18
16
 
19
17
  Docker::Volumes.new.with_temporary_volumes do |volumes|
20
18
  Scenario::Test::Instance::Image
@@ -71,7 +71,7 @@ module Gitlab
71
71
  end
72
72
 
73
73
  def commit_within_hours?(commit_time_string, hours)
74
- Time.at(Time.parse(commit_time_string).utc).to_datetime > Time.at((Time.now - hours * 60 * 60).utc).to_datetime
74
+ Time.at(Time.parse(commit_time_string).utc).to_datetime > Time.at((Time.now - (hours * 60 * 60)).utc).to_datetime
75
75
  end
76
76
 
77
77
  def api_commit_detail(host, project, sha)
@@ -10,7 +10,7 @@ module Gitlab
10
10
  global_server_prereceive_hook = <<~SCRIPT
11
11
  #!/usr/bin/env bash
12
12
 
13
- if [[ \\\$GL_PROJECT_PATH =~ 'reject-prereceive' ]]; then
13
+ if [[ \\$GL_PROJECT_PATH =~ 'reject-prereceive' ]]; then
14
14
  echo 'GL-HOOK-ERR: Custom error message rejecting prereceive hook for projects with GL_PROJECT_PATH matching pattern reject-prereceive'
15
15
  exit 1
16
16
  fi