gitlab-qa 10.3.0 → 12.2.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 (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