gitlab-qa 7.24.6 → 7.25.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.
@@ -0,0 +1,1741 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class GenerateQAJobs
4
+ def initialize(no_of_example_files)
5
+ @no_of_example_files = no_of_example_files
6
+ puts "no_of_example_files: #{@no_of_example_files}"
7
+ end
8
+
9
+ # rubocop:disable Metrics/AbcSize
10
+ # rubocop:disable Metrics/PerceivedComplexity
11
+ # rubocop:disable Metrics/CyclomaticComplexity
12
+ def execute
13
+ jobs = base
14
+
15
+ jobs.concat(sanity_framework)
16
+
17
+ jobs.concat(custom_parallel)
18
+
19
+ jobs.concat(instance) if should_run?('test_instance_all')
20
+
21
+ jobs.concat(relative_url) if should_run?('test_instance_all')
22
+
23
+ jobs.concat(repository_storage) if should_run?('test_instance_all_repository_storage')
24
+
25
+ jobs.concat(omnibus_image)
26
+
27
+ jobs.concat(update) if should_run?('test_instance_all')
28
+
29
+ jobs.concat(omnibus_upgrade)
30
+
31
+ jobs.concat(ee_previous_to_ce_update)
32
+
33
+ jobs.concat(mattermost) if should_run?('test_integration_mattermost')
34
+
35
+ jobs.concat(service_ping_disabled) if should_run?('test_integration_servicepingdisabled')
36
+
37
+ # Disabling geo jobs temporarily due to https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/774
38
+ # base.concat(geo) if should_run?('scenario_test_geo')
39
+
40
+ jobs.concat(ldap_no_tls) if should_run?('test_integration_ldapnotls')
41
+
42
+ jobs.concat(ldap_tls) if should_run?('test_integration_ldaptls')
43
+
44
+ jobs.concat(ldap_no_server) if should_run?('test_integration_ldapnoserver')
45
+
46
+ jobs.concat(instance_saml) if should_run?('test_integration_instancesaml')
47
+
48
+ jobs.concat(group_saml) if should_run?('test_integration_groupsaml')
49
+
50
+ jobs.concat(object_storage) if should_run?('test_instance_all_object_storage')
51
+
52
+ jobs.concat(object_storage_aws) if should_run?('test_instance_all_object_storage')
53
+
54
+ jobs.concat(object_storage_gcs) if should_run?('test_instance_all_object_storage')
55
+
56
+ jobs.concat(object_storage_registry_tls) if should_run?('test_integration_registrytls')
57
+
58
+ jobs.concat(registry) if should_run?('test_integration_registry')
59
+
60
+ jobs.concat(packages) if should_run?('test_instance_all_packages')
61
+
62
+ jobs.concat(actioncable) if should_run?('test_instance_all_actioncable')
63
+
64
+ jobs.concat(elasticsearch) if should_run?('test_integration_elasticsearch')
65
+
66
+ jobs.concat(praefect) if should_run?('test_instance_all')
67
+
68
+ jobs.concat(gitaly_cluster) if should_run?('test_instance_all')
69
+
70
+ jobs.concat(mtls) if should_run?('test_instance_all_mtls')
71
+
72
+ jobs.concat(smtp) if should_run?('test_integration_smtp')
73
+
74
+ jobs.concat(jira) if should_run?('test_instance_all_jira')
75
+
76
+ jobs.concat(integrations) if should_run?('test_instance_all_integrations')
77
+
78
+ jobs.concat(large_setup) if should_run?('test_instance_all_can_use_large_setup')
79
+
80
+ jobs.concat(cloud_activation) if should_run?('test_instance_all_cloud_activation')
81
+
82
+ jobs.concat(registry_with_cdn) if should_run?('test_integration_registrywithcdn')
83
+
84
+ jobs.concat(staging)
85
+
86
+ jobs
87
+ end
88
+ # rubocop:enable Metrics/AbcSize
89
+ # rubocop:enable Metrics/PerceivedComplexity
90
+ # rubocop:enable Metrics/CyclomaticComplexity
91
+
92
+ private
93
+
94
+ def base
95
+ <<~YML
96
+ stages:
97
+ - test
98
+ - report
99
+ - notify
100
+
101
+ default:
102
+ image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-ruby-2.7
103
+ tags:
104
+ - gitlab-org
105
+ cache:
106
+ key:
107
+ files:
108
+ - Gemfile.lock
109
+ - gitlab-qa.gemspec
110
+ paths:
111
+ - vendor/ruby
112
+ before_script:
113
+ - export QA_ARTIFACTS_DIR=$CI_PROJECT_DIR
114
+ - bundle version
115
+ - bundle config path vendor
116
+ - bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check
117
+ - export LANG=C.UTF-8
118
+ - echo $CI_MERGE_REQUEST_IID
119
+ - echo $CI_COMMIT_BRANCH
120
+ - echo $CI_COMMIT_TAG
121
+ - echo $CI_PIPELINE_SOURCE
122
+ - echo $CI_DEFAULT_BRANCH
123
+ - echo $CI_COMMIT_REF_NAME
124
+ - echo $CI_JOB_ID
125
+ - echo $CI_COMMIT_REF_PROTECTED
126
+ - echo $TOP_UPSTREAM_SOURCE_SHA
127
+ - echo $TOP_UPSTREAM_MERGE_REQUEST_IID
128
+ - echo $TOP_UPSTREAM_SOURCE_PROJECT
129
+ - echo $TOP_UPSTREAM_DEFAULT_BRANCH
130
+ - echo $TOP_UPSTREAM_SOURCE_REF
131
+ - echo $TOP_UPSTREAM_SOURCE_JOB
132
+ - echo $GITLAB_QA_OPTIONS
133
+ - echo $QA_TESTS
134
+ - echo $RSPEC_REPORT_OPTS
135
+ - echo $QA_RSPEC_TAGS
136
+ - echo $QA_TEST_RESULTS_ISSUES_PROJECT
137
+ - echo $QA_TESTCASES_REPORTING_PROJECT
138
+ - echo $DEFAULT_RELEASE
139
+ - echo $GITLAB_QA_OPTIONS_COMBINED
140
+ - echo $DISABLE_RELATING_FAILURE_ISSUES
141
+ - echo $QA_FAILURES_MAX_DIFF_RATIO
142
+ - echo $QA_FAILURES_REPORTER_OPTIONS
143
+ - echo $NOTIFY_CHANNEL
144
+ - echo $REPORT_ISSUE_URL
145
+ - echo $QA_TESTCASE_SESSIONS_PROJECT
146
+ - echo $QA_FAILURES_REPORTING_PROJECT
147
+ - echo $ALLURE_JOB_NAME
148
+ - echo $QA_IMAGE
149
+ - echo $RELEASE
150
+ - echo $TEST_LICENSE_MODE
151
+
152
+ workflow:
153
+ rules:
154
+ # For merge requests, create a pipeline.
155
+ - if: $CI_MERGE_REQUEST_IID
156
+ # For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
157
+ - if: $CI_COMMIT_BRANCH == "master"
158
+ # For tags, create a pipeline.
159
+ - if: $CI_COMMIT_TAG
160
+ # For triggers from GitLab MR pipelines (and pipelines from other projects or parent pipeline), create a pipeline
161
+ - if: $CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "parent_pipeline"
162
+ # When using Run pipeline button in the GitLab UI, from the project’s CI/CD > Pipelines section, create a pipeline.
163
+ - if: $CI_PIPELINE_SOURCE == "web"
164
+
165
+ variables:
166
+ DOCKER_DRIVER: overlay2
167
+ DOCKER_HOST: tcp://docker:2375
168
+ QA_CAN_TEST_GIT_PROTOCOL_V2: "true"
169
+ QA_CAN_TEST_PRAEFECT: "false"
170
+ QA_GENERATE_ALLURE_REPORT: "true"
171
+ QA_TESTCASES_REPORTING_PROJECT: "gitlab-org/gitlab"
172
+ QA_TEST_RESULTS_ISSUES_PROJECT: "gitlab-org/quality/testcases"
173
+ QA_TESTCASE_SESSIONS_PROJECT: "gitlab-org/quality/testcase-sessions"
174
+ # QA_DEFAULT_BRANCH is the default branch name of the instance under test.
175
+ QA_DEFAULT_BRANCH: "master"
176
+
177
+ .ce-variables:
178
+ variables:
179
+ DEFAULT_RELEASE: "CE"
180
+
181
+ .ee-variables:
182
+ variables:
183
+ DEFAULT_RELEASE: "EE"
184
+
185
+ .test:
186
+ stage: test
187
+ timeout: 1 hour 30 minutes
188
+ services:
189
+ - docker:20.10.5-dind
190
+ tags:
191
+ - gitlab-org
192
+ - docker
193
+ artifacts:
194
+ when: always
195
+ expire_in: 10d
196
+ paths:
197
+ - gitlab-qa-run-*
198
+ reports:
199
+ junit: gitlab-qa-run-*/**/rspec-*.xml
200
+ script:
201
+ - 'echo "QA_ARTIFACTS_DIR: $QA_ARTIFACTS_DIR"'
202
+ - 'echo "CI_PROJECT_DIR: $CI_PROJECT_DIR"'
203
+ - 'echo "Running: bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
204
+ - bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
205
+ - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
206
+ - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
207
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then exe/gitlab-qa-report --report-results "gitlab-qa-run-*/**/rspec-*.json" --test-case-project "$QA_TESTCASES_REPORTING_PROJECT" --results-issue-project "$QA_TEST_RESULTS_ISSUES_PROJECT" || true; fi
208
+ - exit $test_run_exit_code
209
+
210
+ # For jobs that shouldn't report results in issues, e.g., manually run custom jobs
211
+ .no-issue-report-script:
212
+ script:
213
+ - 'echo "Running: bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
214
+ - bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
215
+
216
+ # For jobs that provide additional GITLAB_QA_OPTIONS, e.g., jobs that include --omnibus-config
217
+ .combined-gitlab-qa-options-script:
218
+ script:
219
+ - 'echo "Running: bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS_COMBINED -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
220
+
221
+ - bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS_COMBINED -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
222
+ - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
223
+ - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
224
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then exe/gitlab-qa-report --report-results "gitlab-qa-run-*/**/rspec-*.json" --test-case-project "$QA_TESTCASES_REPORTING_PROJECT" --results-issue-project "$QA_TEST_RESULTS_ISSUES_PROJECT" || true; fi
225
+ - exit $test_run_exit_code
226
+
227
+ # The Test::Omnibus::Update scenarios require the release to be specified twice, which can't be done dynamically using the `variables` parameter
228
+ # So instead we can use this script with two release variables
229
+ .update-scenario-script:
230
+ script:
231
+ - 'echo "Running: bundle exec exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=$DEFAULT_RELEASE} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
232
+ - bundle exec exe/gitlab-qa Test::Omnibus::Update ${RELEASE:=$DEFAULT_RELEASE} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
233
+ - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
234
+ - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
235
+ - if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then exe/gitlab-qa-report --report-results "gitlab-qa-run-*/**/rspec-*.json" --test-case-project "$QA_TESTCASES_REPORTING_PROJECT" --results-issue-project "$QA_TEST_RESULTS_ISSUES_PROJECT" || true; fi
236
+ - exit $test_run_exit_code
237
+
238
+ .high-capacity:
239
+ tags:
240
+ - docker
241
+ - 7gb
242
+ - triggered-packages
243
+
244
+ .rspec-report-opts:
245
+ variables:
246
+ FILE_SAFE_JOB_NAME: $(echo $CI_JOB_NAME | sed 's/[ /]/_/g')
247
+ RSPEC_REPORT_OPTS: '--format QA::Support::JsonFormatter --out \"tmp/rspec-${CI_JOB_ID}.json\" --format RspecJunitFormatter --out \"tmp/rspec-${CI_JOB_ID}.xml\" --format html --out \"tmp/rspec-${FILE_SAFE_JOB_NAME}.htm\" --color --format documentation'
248
+
249
+ .quarantine:
250
+ allow_failure: true
251
+ variables:
252
+ QA_RSPEC_TAGS: "--tag quarantine"
253
+
254
+ generate_test_session:
255
+ stage: report
256
+ rules:
257
+ - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
258
+ when: always
259
+ - if: '$TOP_UPSTREAM_SOURCE_JOB =~ /\\Ahttps:\\/\\/ops.gitlab.net\\//'
260
+ when: always
261
+ artifacts:
262
+ when: always
263
+ expire_in: 10d
264
+ paths:
265
+ - REPORT_ISSUE_URL
266
+ script:
267
+ - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
268
+ - bundle exec exe/gitlab-qa-report --generate-test-session "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASE_SESSIONS_PROJECT"
269
+
270
+ relate_test_failures:
271
+ stage: report
272
+ rules:
273
+ - if: '$DISABLE_RELATING_FAILURE_ISSUES != null && $DISABLE_RELATING_FAILURE_ISSUES != ""'
274
+ when: never
275
+ - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
276
+ when: always
277
+ - if: '$TOP_UPSTREAM_SOURCE_JOB =~ /\\Ahttps:\\/\\/ops.gitlab.net\\//'
278
+ when: always
279
+ variables:
280
+ QA_FAILURES_REPORTING_PROJECT: "gitlab-org/gitlab"
281
+ QA_FAILURES_MAX_DIFF_RATIO: "0.15"
282
+ # The --dry-run can be set to modify the behavior of `exe/gitlab-qa-report --relate-failure-issue` without releasing a new gem version.
283
+ QA_FAILURES_REPORTER_OPTIONS: ""
284
+ script:
285
+ - export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
286
+ - bundle exec exe/gitlab-qa-report --relate-failure-issue "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_FAILURES_REPORTING_PROJECT" --max-diff-ratio "$QA_FAILURES_MAX_DIFF_RATIO" $QA_FAILURES_REPORTER_OPTIONS
287
+
288
+ .notify_upstream_commit:
289
+ stage: notify
290
+ image: ruby:3.0-alpine
291
+ before_script:
292
+ - gem install gitlab --no-document
293
+
294
+ notify_upstream_commit:success:
295
+ extends: .notify_upstream_commit
296
+ script:
297
+ - bin/notify_upstream_commit success
298
+ rules:
299
+ - if: '$TOP_UPSTREAM_SOURCE_PROJECT != null && $TOP_UPSTREAM_SOURCE_PROJECT != "" && $TOP_UPSTREAM_SOURCE_SHA != null && $TOP_UPSTREAM_SOURCE_SHA != ""'
300
+ when: on_success
301
+
302
+ notify_upstream_commit:failure:
303
+ extends: .notify_upstream_commit
304
+ script:
305
+ - bin/notify_upstream_commit failure
306
+ rules:
307
+ - if: '$TOP_UPSTREAM_SOURCE_PROJECT != null && $TOP_UPSTREAM_SOURCE_PROJECT != "" && $TOP_UPSTREAM_SOURCE_SHA != null && $TOP_UPSTREAM_SOURCE_SHA != ""'
308
+ when: on_failure
309
+
310
+ .notify_slack:
311
+ image: alpine
312
+ stage: notify
313
+ dependencies: ['generate_test_session']
314
+ cache: {}
315
+ before_script:
316
+ - apk update && apk add git curl bash
317
+
318
+ notify_slack:
319
+ extends:
320
+ - .notify_slack
321
+ rules:
322
+ - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $NOTIFY_CHANNEL !=null && $NOTIFY_CHANNEL !=""'
323
+ when: on_failure
324
+ - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
325
+ when: on_failure
326
+ script:
327
+ - export RELEASE=${TOP_UPSTREAM_SOURCE_REF:-$RELEASE}
328
+ - echo "NOTIFY_CHANNEL is ${NOTIFY_CHANNEL:=qa-$TOP_UPSTREAM_SOURCE_REF}"
329
+ - echo "RELEASE is ${RELEASE}"
330
+ - echo "CI_PIPELINE_URL is $CI_PIPELINE_URL"
331
+ - echo "TOP_UPSTREAM_SOURCE_JOB is $TOP_UPSTREAM_SOURCE_JOB"
332
+ - 'bin/slack $NOTIFY_CHANNEL "☠️ QA against $RELEASE failed! ☠️ See the test session report: $(cat REPORT_ISSUE_URL), and pipeline: $CI_PIPELINE_URL (triggered from $TOP_UPSTREAM_SOURCE_JOB)" ci_failing'
333
+
334
+ generate-allure-report:
335
+ extends: .generate-allure-report-base
336
+ stage: report
337
+ variables:
338
+ ALLURE_RESULTS_GLOB: gitlab-qa-run-*/**/allure-results/*
339
+ cache:
340
+ policy: pull
341
+ before_script:
342
+ # Override allure variables for upstream triggers
343
+ # Override default before script and don't push cache
344
+ - export STORAGE_CREDENTIALS=$QA_ALLURE_REPORT_GCS_CREDENTIALS
345
+ - export GITLAB_AUTH_TOKEN=$GITLAB_QA_MR_ALLURE_REPORT_TOKEN
346
+ - export ALLURE_PROJECT_PATH=$TOP_UPSTREAM_SOURCE_PROJECT
347
+ - export ALLURE_MERGE_REQUEST_IID=$TOP_UPSTREAM_MERGE_REQUEST_IID
348
+ - export ALLURE_COMMIT_SHA=$TOP_UPSTREAM_SOURCE_SHA
349
+ - export ALLURE_JOB_NAME="${ALLURE_JOB_NAME:-package-and-qa}"
350
+ rules:
351
+ # Don't run report generation on release pipelines
352
+ - if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab-qa" && $RELEASE == null'
353
+ changes: ["lib/**/version.rb"]
354
+ when: never
355
+ - if: '$CI_COMMIT_TAG'
356
+ when: never
357
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "parent_pipeline" || ($CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH)'
358
+ variables:
359
+ ALLURE_JOB_NAME: gitlab-qa
360
+ when: always
361
+ - if: '$TOP_UPSTREAM_SOURCE_PROJECT != null && $TOP_UPSTREAM_SOURCE_PROJECT != "" && $TOP_UPSTREAM_SOURCE_SHA != null && $TOP_UPSTREAM_SOURCE_SHA != ""'
362
+ when: always
363
+
364
+ generate-knapsack-report:
365
+ extends: .generate-knapsack-report-base
366
+ image:
367
+ name: ${QA_IMAGE}
368
+ stage: report
369
+
370
+ include:
371
+ - local: .gitlab/ci/rules.gitlab-ci.yml
372
+ - project: 'gitlab-org/quality/pipeline-common'
373
+ file:
374
+ - '/ci/allure-report.yml'
375
+ - '/ci/knapsack-report.yml'
376
+
377
+ YML
378
+ end
379
+
380
+ def sanity_framework
381
+ <<~YML
382
+ # Do not generate allure report since it always adds a failed test to the report. The job runs a test where 1 example would always fail and assert exit code via custom script bin/expect_exit_code_and_text
383
+ ce:sanity-framework:
384
+ variables:
385
+ QA_GENERATE_ALLURE_REPORT: "false"
386
+ QA_EXPORT_TEST_METRICS: "false"
387
+ script:
388
+ - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=CE} -- --tag framework" 1 "2 examples, 1 failure"
389
+ extends:
390
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
391
+ - .test
392
+ - .high-capacity
393
+ - .ce-variables
394
+
395
+ ee:sanity-framework:
396
+ variables:
397
+ QA_GENERATE_ALLURE_REPORT: "false"
398
+ QA_EXPORT_TEST_METRICS: "false"
399
+ script:
400
+ - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=EE} -- --tag framework" 1 "2 examples, 1 failure"
401
+ extends:
402
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
403
+ - .test
404
+ - .high-capacity
405
+ - .ee-variables
406
+
407
+ YML
408
+ end
409
+
410
+ def custom_parallel
411
+ <<~YML
412
+ ce:custom-parallel:
413
+ extends:
414
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
415
+ - .test
416
+ - .high-capacity
417
+ - .rspec-report-opts
418
+ - .no-issue-report-script
419
+ - .ce-variables
420
+ allow_failure: true
421
+ parallel: 10
422
+
423
+ ee:custom-parallel:
424
+ extends:
425
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
426
+ - .test
427
+ - .high-capacity
428
+ - .ee-variables
429
+ - .rspec-report-opts
430
+ - .no-issue-report-script
431
+ allow_failure: true
432
+ parallel: 10
433
+
434
+ YML
435
+ end
436
+
437
+ def instance
438
+ <<~YML
439
+ ce:instance-parallel:
440
+ extends:
441
+ - .rules:ce-never-when-qa-tests-specified
442
+ - .test
443
+ - .high-capacity
444
+ - .ce-variables
445
+ - .rspec-report-opts
446
+ parallel: 5
447
+
448
+ ee:instance-parallel:
449
+ extends:
450
+ - .rules:ee-never-when-qa-tests-specified
451
+ - .test
452
+ - .high-capacity
453
+ - .ee-variables
454
+ - .rspec-report-opts
455
+ parallel: 5
456
+
457
+ ce:instance:
458
+ extends:
459
+ - .rules:ce-never-when-qa-tests-not-specified
460
+ - .test
461
+ - .high-capacity
462
+ - .ce-variables
463
+ - .rspec-report-opts
464
+
465
+ ce:instance-quarantine:
466
+ extends:
467
+ - .rules:ce-qa
468
+ - .test
469
+ - .high-capacity
470
+ - .ce-variables
471
+ - .quarantine
472
+ - .rspec-report-opts
473
+ variables:
474
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
475
+
476
+ ee:instance:
477
+ extends:
478
+ - .rules:ee-never-when-qa-tests-not-specified
479
+ - .test
480
+ - .high-capacity
481
+ - .ee-variables
482
+ - .rspec-report-opts
483
+
484
+ ee:instance-quarantine:
485
+ extends:
486
+ - .rules:ee-qa
487
+ - .test
488
+ - .high-capacity
489
+ - .ee-variables
490
+ - .quarantine
491
+ - .rspec-report-opts
492
+ variables:
493
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
494
+
495
+ YML
496
+ end
497
+
498
+ def relative_url
499
+ <<~YML
500
+ ce:relative_url-parallel:
501
+ extends:
502
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
503
+ - .test
504
+ - .high-capacity
505
+ - .ce-variables
506
+ - .rspec-report-opts
507
+ parallel: 5
508
+ variables:
509
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
510
+
511
+ ee:relative_url-parallel:
512
+ extends:
513
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
514
+ - .test
515
+ - .high-capacity
516
+ - .ee-variables
517
+ - .rspec-report-opts
518
+ parallel: 5
519
+ variables:
520
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
521
+
522
+ ce:relative_url:
523
+ extends:
524
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
525
+ - .test
526
+ - .high-capacity
527
+ - .ce-variables
528
+ - .rspec-report-opts
529
+ variables:
530
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
531
+
532
+ ee:relative_url:
533
+ extends:
534
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
535
+ - .test
536
+ - .high-capacity
537
+ - .ee-variables
538
+ - .rspec-report-opts
539
+ variables:
540
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
541
+
542
+ ce:relative_url-quarantine:
543
+ extends:
544
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
545
+ - .test
546
+ - .high-capacity
547
+ - .ce-variables
548
+ - .quarantine
549
+ - .rspec-report-opts
550
+ variables:
551
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
552
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
553
+
554
+ ee:relative_url-quarantine:
555
+ extends:
556
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
557
+ - .test
558
+ - .high-capacity
559
+ - .ee-variables
560
+ - .quarantine
561
+ - .rspec-report-opts
562
+ variables:
563
+ QA_SCENARIO: "Test::Instance::RelativeUrl"
564
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
565
+
566
+ YML
567
+ end
568
+
569
+ def repository_storage
570
+ <<~YML
571
+ ce:repository_storage:
572
+ extends:
573
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
574
+ - .test
575
+ - .high-capacity
576
+ - .ce-variables
577
+ - .rspec-report-opts
578
+ variables:
579
+ QA_SCENARIO: "Test::Instance::RepositoryStorage"
580
+
581
+ ce:repository_storage-quarantine:
582
+ extends:
583
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
584
+ - .test
585
+ - .high-capacity
586
+ - .ce-variables
587
+ - .quarantine
588
+ - .rspec-report-opts
589
+ variables:
590
+ QA_SCENARIO: "Test::Instance::RepositoryStorage"
591
+
592
+ ee:repository_storage:
593
+ extends:
594
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
595
+ - .test
596
+ - .high-capacity
597
+ - .ee-variables
598
+ - .rspec-report-opts
599
+ variables:
600
+ QA_SCENARIO: "Test::Instance::RepositoryStorage"
601
+
602
+ ee:repository_storage-quarantine:
603
+ extends:
604
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
605
+ - .test
606
+ - .high-capacity
607
+ - .ee-variables
608
+ - .quarantine
609
+ - .rspec-report-opts
610
+ variables:
611
+ QA_SCENARIO: "Test::Instance::RepositoryStorage"
612
+ YML
613
+ end
614
+
615
+ # The Test::Omnibus::Image scenarios don't run the E2E tests so they don't need to report test results
616
+ def omnibus_image
617
+ <<~YML
618
+ ce:image:
619
+ script:
620
+ - bundle exec exe/gitlab-qa Test::Omnibus::Image ${RELEASE:=CE}
621
+ extends:
622
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
623
+ - .test
624
+ - .ce-variables
625
+
626
+ ee:image:
627
+ script:
628
+ - bundle exec exe/gitlab-qa Test::Omnibus::Image ${RELEASE:=EE}
629
+ extends:
630
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
631
+ - .test
632
+ - .ee-variables
633
+
634
+ YML
635
+ end
636
+
637
+ def update
638
+ <<~YML
639
+ ce:update-parallel:
640
+ extends:
641
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
642
+ - .test
643
+ - .high-capacity
644
+ - .ce-variables
645
+ - .rspec-report-opts
646
+ - .update-scenario-script
647
+ parallel: 5
648
+
649
+ ce:update:
650
+ extends:
651
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
652
+ - .test
653
+ - .high-capacity
654
+ - .ce-variables
655
+ - .rspec-report-opts
656
+ - .update-scenario-script
657
+
658
+ ce:update-quarantine:
659
+ extends:
660
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
661
+ - .test
662
+ - .high-capacity
663
+ - .ce-variables
664
+ - .quarantine
665
+ - .rspec-report-opts
666
+ - .update-scenario-script
667
+ variables:
668
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
669
+
670
+ ee:update-parallel:
671
+ extends:
672
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
673
+ - .test
674
+ - .high-capacity
675
+ - .ee-variables
676
+ - .rspec-report-opts
677
+ - .update-scenario-script
678
+ parallel: 10
679
+
680
+ ee:update:
681
+ extends:
682
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
683
+ - .test
684
+ - .high-capacity
685
+ - .ee-variables
686
+ - .rspec-report-opts
687
+ - .update-scenario-script
688
+
689
+ ee:update-quarantine:
690
+ extends:
691
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
692
+ - .test
693
+ - .high-capacity
694
+ - .ee-variables
695
+ - .quarantine
696
+ - .rspec-report-opts
697
+ variables:
698
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
699
+ YML
700
+ end
701
+
702
+ # The Test::Omnibus::Upgrade scenario isn't run on master (because it always uses the latest CE/EE image) so we don't report the test results in issues
703
+ def omnibus_upgrade
704
+ <<~YML
705
+ ce:upgrade-parallel:
706
+ script:
707
+ - bundle exec exe/gitlab-qa Test::Omnibus::Upgrade CE -- $RSPEC_REPORT_OPTS
708
+ extends:
709
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
710
+ - .test
711
+ - .high-capacity
712
+ - .rspec-report-opts
713
+ parallel: 5
714
+
715
+ ce:upgrade:
716
+ script:
717
+ - bundle exec exe/gitlab-qa Test::Omnibus::Upgrade CE -- $RSPEC_REPORT_OPTS
718
+ extends:
719
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
720
+ - .test
721
+ - .high-capacity
722
+ - .rspec-report-opts
723
+
724
+ ce:upgrade-quarantine:
725
+ script:
726
+ - bundle exec exe/gitlab-qa Test::Omnibus::Upgrade CE -- --tag quarantine --tag ~orchestrated $RSPEC_REPORT_OPTS
727
+ extends:
728
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change
729
+ - .test
730
+ - .high-capacity
731
+ - .quarantine
732
+ - .rspec-report-opts
733
+
734
+ YML
735
+ end
736
+
737
+ def ee_previous_to_ce_update
738
+ <<~YML
739
+ ee-previous-to-ce:update:
740
+ script:
741
+ - bundle exec exe/gitlab-qa Test::Omnibus::Update EE CE -- $RSPEC_REPORT_OPTS
742
+ extends:
743
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change
744
+ - .test
745
+ - .high-capacity
746
+ - .rspec-report-opts
747
+
748
+ ee-previous-to-ce:update-quarantine:
749
+ script:
750
+ - bundle exec exe/gitlab-qa Test::Omnibus::Update EE CE -- --tag quarantine --tag ~orchestrated $RSPEC_REPORT_OPTS
751
+ extends:
752
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change
753
+ - .test
754
+ - .high-capacity
755
+ - .quarantine
756
+ - .rspec-report-opts
757
+
758
+ YML
759
+ end
760
+
761
+ def mattermost
762
+ <<~YML
763
+ ce:mattermost:
764
+ extends:
765
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
766
+ - .test
767
+ - .high-capacity
768
+ - .ce-variables
769
+ - .rspec-report-opts
770
+ variables:
771
+ QA_SCENARIO: "Test::Integration::Mattermost"
772
+
773
+ ce:mattermost-quarantine:
774
+ extends:
775
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
776
+ - .test
777
+ - .high-capacity
778
+ - .ce-variables
779
+ - .quarantine
780
+ - .rspec-report-opts
781
+ variables:
782
+ QA_SCENARIO: "Test::Integration::Mattermost"
783
+
784
+ ee:mattermost:
785
+ extends:
786
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
787
+ - .test
788
+ - .high-capacity
789
+ - .ee-variables
790
+ - .rspec-report-opts
791
+ variables:
792
+ QA_SCENARIO: "Test::Integration::Mattermost"
793
+
794
+ ee:mattermost-quarantine:
795
+ extends:
796
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
797
+ - .test
798
+ - .high-capacity
799
+ - .ee-variables
800
+ - .quarantine
801
+ - .rspec-report-opts
802
+ variables:
803
+ QA_SCENARIO: "Test::Integration::Mattermost"
804
+
805
+ YML
806
+ end
807
+
808
+ def service_ping_disabled
809
+ <<~YML
810
+ ce:service_ping_disabled:
811
+ extends:
812
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
813
+ - .test
814
+ - .high-capacity
815
+ - .ce-variables
816
+ - .rspec-report-opts
817
+ variables:
818
+ QA_SCENARIO: "Test::Integration::ServicePingDisabled"
819
+
820
+ ee:service_ping_disabled:
821
+ extends:
822
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
823
+ - .test
824
+ - .high-capacity
825
+ - .ee-variables
826
+ - .rspec-report-opts
827
+ variables:
828
+ QA_SCENARIO: "Test::Integration::ServicePingDisabled"
829
+
830
+ YML
831
+ end
832
+
833
+ def geo
834
+ <<~YML
835
+ ee:geo:
836
+ extends:
837
+ - .test
838
+ - .ee-variables
839
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
840
+ - .rspec-report-opts
841
+ variables:
842
+ QA_SCENARIO: "Test::Integration::Geo"
843
+
844
+ ee:geo-quarantine:
845
+ extends:
846
+ - .test
847
+ - .ee-variables
848
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
849
+ - .quarantine
850
+ - .rspec-report-opts
851
+ variables:
852
+ QA_SCENARIO: "Test::Integration::Geo"
853
+
854
+ YML
855
+ end
856
+
857
+ def ldap_no_tls
858
+ <<~YML
859
+ ce:ldap_no_tls:
860
+ extends:
861
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
862
+ - .test
863
+ - .high-capacity
864
+ - .ce-variables
865
+ - .rspec-report-opts
866
+ variables:
867
+ QA_SCENARIO: "Test::Integration::LDAPNoTLS"
868
+
869
+ ce:ldap_no_tls-quarantine:
870
+ extends:
871
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
872
+ - .test
873
+ - .high-capacity
874
+ - .ce-variables
875
+ - .quarantine
876
+ - .rspec-report-opts
877
+ variables:
878
+ QA_SCENARIO: "Test::Integration::LDAPNoTLS"
879
+
880
+ ee:ldap_no_tls:
881
+ extends:
882
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
883
+ - .test
884
+ - .high-capacity
885
+ - .ee-variables
886
+ - .rspec-report-opts
887
+ variables:
888
+ QA_SCENARIO: "Test::Integration::LDAPNoTLS"
889
+
890
+ ee:ldap_no_tls-quarantine:
891
+ extends:
892
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
893
+ - .test
894
+ - .high-capacity
895
+ - .ee-variables
896
+ - .quarantine
897
+ - .rspec-report-opts
898
+ variables:
899
+ QA_SCENARIO: "Test::Integration::LDAPNoTLS"
900
+
901
+ YML
902
+ end
903
+
904
+ def ldap_tls
905
+ <<~YML
906
+ ce:ldap_tls:
907
+ extends:
908
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
909
+ - .test
910
+ - .high-capacity
911
+ - .ce-variables
912
+ - .rspec-report-opts
913
+ variables:
914
+ QA_SCENARIO: "Test::Integration::LDAPTLS"
915
+
916
+ ce:ldap_tls-quarantine:
917
+ extends:
918
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
919
+ - .test
920
+ - .high-capacity
921
+ - .ce-variables
922
+ - .quarantine
923
+ - .rspec-report-opts
924
+ variables:
925
+ QA_SCENARIO: "Test::Integration::LDAPTLS"
926
+
927
+ ee:ldap_tls:
928
+ extends:
929
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
930
+ - .test
931
+ - .high-capacity
932
+ - .ee-variables
933
+ - .rspec-report-opts
934
+ variables:
935
+ QA_SCENARIO: "Test::Integration::LDAPTLS"
936
+
937
+ ee:ldap_tls-quarantine:
938
+ extends:
939
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
940
+ - .test
941
+ - .high-capacity
942
+ - .ee-variables
943
+ - .quarantine
944
+ - .rspec-report-opts
945
+ variables:
946
+ QA_SCENARIO: "Test::Integration::LDAPTLS"
947
+
948
+ YML
949
+ end
950
+
951
+ def ldap_no_server
952
+ <<~YML
953
+ ee:ldap_no_server:
954
+ extends:
955
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
956
+ - .test
957
+ - .high-capacity
958
+ - .ee-variables
959
+ - .rspec-report-opts
960
+ variables:
961
+ QA_SCENARIO: "Test::Integration::LDAPNoServer"
962
+
963
+ ee:ldap_no_server-quarantine:
964
+ extends:
965
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
966
+ - .test
967
+ - .high-capacity
968
+ - .ee-variables
969
+ - .quarantine
970
+ - .rspec-report-opts
971
+ variables:
972
+ QA_SCENARIO: "Test::Integration::LDAPNoServer"
973
+
974
+ YML
975
+ end
976
+
977
+ def instance_saml
978
+ <<~YML
979
+ ce:instance_saml:
980
+ extends:
981
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
982
+ - .test
983
+ - .high-capacity
984
+ - .ce-variables
985
+ - .rspec-report-opts
986
+ variables:
987
+ QA_SCENARIO: "Test::Integration::InstanceSAML"
988
+
989
+ ce:instance_saml-quarantine:
990
+ extends:
991
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
992
+ - .test
993
+ - .high-capacity
994
+ - .ce-variables
995
+ - .quarantine
996
+ - .rspec-report-opts
997
+ variables:
998
+ QA_SCENARIO: "Test::Integration::InstanceSAML"
999
+
1000
+ ee:instance_saml:
1001
+ extends:
1002
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1003
+ - .test
1004
+ - .high-capacity
1005
+ - .ee-variables
1006
+ - .rspec-report-opts
1007
+ variables:
1008
+ QA_SCENARIO: "Test::Integration::InstanceSAML"
1009
+
1010
+ ee:instance_saml-quarantine:
1011
+ extends:
1012
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1013
+ - .test
1014
+ - .high-capacity
1015
+ - .ee-variables
1016
+ - .quarantine
1017
+ - .rspec-report-opts
1018
+ variables:
1019
+ QA_SCENARIO: "Test::Integration::InstanceSAML"
1020
+
1021
+ YML
1022
+ end
1023
+
1024
+ def group_saml
1025
+ <<~YML
1026
+ ee:group_saml:
1027
+ extends:
1028
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1029
+ - .test
1030
+ - .high-capacity
1031
+ - .ee-variables
1032
+ - .rspec-report-opts
1033
+ variables:
1034
+ QA_SCENARIO: "Test::Integration::GroupSAML"
1035
+
1036
+ ee:group_saml-quarantine:
1037
+ extends:
1038
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1039
+ - .test
1040
+ - .high-capacity
1041
+ - .ee-variables
1042
+ - .quarantine
1043
+ - .rspec-report-opts
1044
+ variables:
1045
+ QA_SCENARIO: "Test::Integration::GroupSAML"
1046
+
1047
+ YML
1048
+ end
1049
+
1050
+ def object_storage
1051
+ <<~YML
1052
+ ce:object_storage:
1053
+ extends:
1054
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1055
+ - .test
1056
+ - .high-capacity
1057
+ - .ce-variables
1058
+ - .rspec-report-opts
1059
+ - .combined-gitlab-qa-options-script
1060
+ parallel: 2
1061
+ variables:
1062
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage"
1063
+
1064
+ ce:object_storage-quarantine:
1065
+ extends:
1066
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1067
+ - .test
1068
+ - .high-capacity
1069
+ - .ce-variables
1070
+ - .quarantine
1071
+ - .rspec-report-opts
1072
+ - .combined-gitlab-qa-options-script
1073
+ variables:
1074
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage"
1075
+
1076
+ ee:object_storage:
1077
+ extends:
1078
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1079
+ - .test
1080
+ - .high-capacity
1081
+ - .ee-variables
1082
+ - .rspec-report-opts
1083
+ - .combined-gitlab-qa-options-script
1084
+ parallel: 2
1085
+ variables:
1086
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage"
1087
+ QA_RSPEC_TAGS: "--tag object_storage"
1088
+
1089
+ ee:object_storage-quarantine:
1090
+ extends:
1091
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1092
+ - .test
1093
+ - .high-capacity
1094
+ - .ee-variables
1095
+ - .quarantine
1096
+ - .rspec-report-opts
1097
+ - .combined-gitlab-qa-options-script
1098
+ variables:
1099
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage"
1100
+ QA_RSPEC_TAGS: "--tag quarantine --tag object_storage"
1101
+
1102
+ YML
1103
+ end
1104
+
1105
+ def object_storage_aws
1106
+ <<~YML
1107
+ ee:object_storage_aws:
1108
+ extends:
1109
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1110
+ - .test
1111
+ - .high-capacity
1112
+ - .ee-variables
1113
+ - .rspec-report-opts
1114
+ - .combined-gitlab-qa-options-script
1115
+ parallel: 2
1116
+ variables:
1117
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage_aws"
1118
+ QA_RSPEC_TAGS: "--tag object_storage"
1119
+
1120
+ ee:object_storage_aws-quarantine:
1121
+ extends:
1122
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1123
+ - .test
1124
+ - .high-capacity
1125
+ - .ee-variables
1126
+ - .quarantine
1127
+ - .rspec-report-opts
1128
+ - .combined-gitlab-qa-options-script
1129
+ variables:
1130
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config object_storage_aws"
1131
+ QA_RSPEC_TAGS: "--tag quarantine --tag object_storage"
1132
+
1133
+ YML
1134
+ end
1135
+
1136
+ def object_storage_gcs
1137
+ <<~YML
1138
+ ee:object_storage_gcs:
1139
+ extends:
1140
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1141
+ - .test
1142
+ - .high-capacity
1143
+ - .ee-variables
1144
+ - .rspec-report-opts
1145
+ parallel: 2
1146
+ variables:
1147
+ GITLAB_QA_OPTS: "--omnibus-config object_storage_gcs"
1148
+ QA_RSPEC_TAGS: "--tag object_storage"
1149
+
1150
+ ee:object_storage_gcs-quarantine:
1151
+ extends:
1152
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1153
+ - .test
1154
+ - .high-capacity
1155
+ - .ee-variables
1156
+ - .quarantine
1157
+ - .rspec-report-opts
1158
+ variables:
1159
+ GITLAB_QA_OPTS: "--omnibus-config object_storage_gcs"
1160
+ QA_RSPEC_TAGS: "--tag quarantine --tag object_storage"
1161
+
1162
+ YML
1163
+ end
1164
+
1165
+ def object_storage_registry_tls
1166
+ <<~YML
1167
+ ce:object_storage_registry_tls:
1168
+ extends:
1169
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1170
+ - .test
1171
+ - .high-capacity
1172
+ - .ce-variables
1173
+ - .rspec-report-opts
1174
+ variables:
1175
+ QA_SCENARIO: "Test::Integration::RegistryTLS --omnibus-config registry_object_storage"
1176
+
1177
+ ce:object_storage_registry_tls-quarantine:
1178
+ extends:
1179
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1180
+ - .test
1181
+ - .high-capacity
1182
+ - .ce-variables
1183
+ - .quarantine
1184
+ - .rspec-report-opts
1185
+ variables:
1186
+ QA_SCENARIO: "Test::Integration::RegistryTLS --omnibus-config registry_object_storage"
1187
+
1188
+ ee:object_storage_registry_tls:
1189
+ extends:
1190
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1191
+ - .test
1192
+ - .ee-variables
1193
+ - .high-capacity
1194
+ - .rspec-report-opts
1195
+ variables:
1196
+ QA_SCENARIO: "Test::Integration::RegistryTLS --omnibus-config registry_object_storage"
1197
+
1198
+ ee:object_storage_registry_tls-quarantine:
1199
+ extends:
1200
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1201
+ - .test
1202
+ - .high-capacity
1203
+ - .ee-variables
1204
+ - .quarantine
1205
+ - .rspec-report-opts
1206
+ variables:
1207
+ QA_SCENARIO: "Test::Integration::RegistryTLS --omnibus-config registry_object_storage"
1208
+
1209
+ YML
1210
+ end
1211
+
1212
+ def registry
1213
+ <<~YML
1214
+ ce:registry:
1215
+ extends:
1216
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1217
+ - .test
1218
+ - .high-capacity
1219
+ - .ce-variables
1220
+ - .rspec-report-opts
1221
+ variables:
1222
+ QA_SCENARIO: "Test::Integration::Registry"
1223
+
1224
+ ce:registry-quarantine:
1225
+ extends:
1226
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1227
+ - .test
1228
+ - .high-capacity
1229
+ - .ce-variables
1230
+ - .quarantine
1231
+ - .rspec-report-opts
1232
+ variables:
1233
+ QA_SCENARIO: "Test::Integration::Registry"
1234
+
1235
+ ee:registry:
1236
+ extends:
1237
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1238
+ - .test
1239
+ - .high-capacity
1240
+ - .ee-variables
1241
+ - .rspec-report-opts
1242
+ variables:
1243
+ QA_SCENARIO: "Test::Integration::Registry"
1244
+
1245
+ ee:registry-quarantine:
1246
+ extends:
1247
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1248
+ - .test
1249
+ - .high-capacity
1250
+ - .ee-variables
1251
+ - .quarantine
1252
+ - .rspec-report-opts
1253
+ variables:
1254
+ QA_SCENARIO: "Test::Integration::Registry"
1255
+
1256
+ YML
1257
+ end
1258
+
1259
+ def packages
1260
+ <<~YML
1261
+ ee:packages-parallel:
1262
+ extends:
1263
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1264
+ - .test
1265
+ - .high-capacity
1266
+ - .ee-variables
1267
+ - .rspec-report-opts
1268
+ - .combined-gitlab-qa-options-script
1269
+ parallel: 2
1270
+ variables:
1271
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config packages"
1272
+ QA_RSPEC_TAGS: "--tag packages"
1273
+
1274
+ ee:packages-quarantine:
1275
+ extends:
1276
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1277
+ - .test
1278
+ - .high-capacity
1279
+ - .ee-variables
1280
+ - .quarantine
1281
+ - .rspec-report-opts
1282
+ - .combined-gitlab-qa-options-script
1283
+ variables:
1284
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config packages"
1285
+ QA_RSPEC_TAGS: "--tag quarantine --tag packages"
1286
+
1287
+ YML
1288
+ end
1289
+
1290
+ def actioncable
1291
+ <<~YML
1292
+ ce:actioncable:
1293
+ extends:
1294
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1295
+ - .test
1296
+ - .high-capacity
1297
+ - .ce-variables
1298
+ - .rspec-report-opts
1299
+ variables:
1300
+ QA_SCENARIO: "Test::Integration::Actioncable"
1301
+
1302
+ ce:actioncable-quarantine:
1303
+ extends:
1304
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1305
+ - .test
1306
+ - .high-capacity
1307
+ - .ce-variables
1308
+ - .quarantine
1309
+ - .rspec-report-opts
1310
+ variables:
1311
+ QA_SCENARIO: "Test::Integration::Actioncable"
1312
+
1313
+ ee:actioncable:
1314
+ extends:
1315
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1316
+ - .test
1317
+ - .high-capacity
1318
+ - .ee-variables
1319
+ - .rspec-report-opts
1320
+ variables:
1321
+ QA_SCENARIO: "Test::Integration::Actioncable"
1322
+
1323
+ ee:actioncable-quarantine:
1324
+ extends:
1325
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1326
+ - .test
1327
+ - .high-capacity
1328
+ - .ee-variables
1329
+ - .quarantine
1330
+ - .rspec-report-opts
1331
+ variables:
1332
+ QA_SCENARIO: "Test::Integration::Actioncable"
1333
+
1334
+ YML
1335
+ end
1336
+
1337
+ def elasticsearch
1338
+ <<~YML
1339
+ ee:elasticsearch:
1340
+ extends:
1341
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1342
+ - .test
1343
+ - .high-capacity
1344
+ - .ee-variables
1345
+ - .rspec-report-opts
1346
+ variables:
1347
+ QA_SCENARIO: "Test::Integration::Elasticsearch"
1348
+
1349
+ ee:elasticsearch-quarantine:
1350
+ extends:
1351
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1352
+ - .test
1353
+ - .high-capacity
1354
+ - .ee-variables
1355
+ - .quarantine
1356
+ - .rspec-report-opts
1357
+ variables:
1358
+ QA_SCENARIO: "Test::Integration::Elasticsearch"
1359
+
1360
+ YML
1361
+ end
1362
+
1363
+ def praefect
1364
+ <<~YML
1365
+ ce:praefect-parallel:
1366
+ extends:
1367
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
1368
+ - .test
1369
+ - .high-capacity
1370
+ - .ce-variables
1371
+ - .rspec-report-opts
1372
+ parallel: 5
1373
+ variables:
1374
+ QA_SCENARIO: "Test::Integration::Praefect"
1375
+ QA_CAN_TEST_PRAEFECT: "true"
1376
+
1377
+ ce:praefect:
1378
+ extends:
1379
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
1380
+ - .test
1381
+ - .high-capacity
1382
+ - .ce-variables
1383
+ - .rspec-report-opts
1384
+ variables:
1385
+ QA_SCENARIO: "Test::Integration::Praefect"
1386
+ QA_CAN_TEST_PRAEFECT: "true"
1387
+
1388
+ ce:praefect-quarantine:
1389
+ extends:
1390
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1391
+ - .test
1392
+ - .high-capacity
1393
+ - .ce-variables
1394
+ - .quarantine
1395
+ - .rspec-report-opts
1396
+ variables:
1397
+ QA_SCENARIO: "Test::Integration::Praefect"
1398
+ QA_CAN_TEST_PRAEFECT: "true"
1399
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
1400
+
1401
+ ee:praefect-parallel:
1402
+ extends:
1403
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-specified
1404
+ - .test
1405
+ - .high-capacity
1406
+ - .ee-variables
1407
+ - .rspec-report-opts
1408
+ parallel: 10
1409
+ variables:
1410
+ QA_SCENARIO: "Test::Integration::Praefect"
1411
+ QA_CAN_TEST_PRAEFECT: "true"
1412
+
1413
+ ee:praefect:
1414
+ extends:
1415
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change-and-never-when-qa-tests-not-specified
1416
+ - .test
1417
+ - .high-capacity
1418
+ - .ee-variables
1419
+ - .rspec-report-opts
1420
+ variables:
1421
+ QA_SCENARIO: "Test::Integration::Praefect"
1422
+ QA_CAN_TEST_PRAEFECT: "true"
1423
+
1424
+ ee:praefect-quarantine:
1425
+ extends:
1426
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1427
+ - .test
1428
+ - .high-capacity
1429
+ - .ee-variables
1430
+ - .quarantine
1431
+ - .rspec-report-opts
1432
+ variables:
1433
+ QA_SCENARIO: "Test::Integration::Praefect"
1434
+ QA_CAN_TEST_PRAEFECT: "true"
1435
+ QA_RSPEC_TAGS: "--tag quarantine --tag ~orchestrated"
1436
+
1437
+ YML
1438
+ end
1439
+
1440
+ def gitaly_cluster
1441
+ <<~YML
1442
+ ce:gitaly-cluster:
1443
+ extends:
1444
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1445
+ - .test
1446
+ - .high-capacity
1447
+ - .ce-variables
1448
+ - .rspec-report-opts
1449
+ variables:
1450
+ QA_SCENARIO: "Test::Integration::GitalyCluster"
1451
+ QA_LOG_PATH: "tmp/gitaly_cluster.log"
1452
+
1453
+ ce:gitaly-cluster-quarantine:
1454
+ extends:
1455
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1456
+ - .test
1457
+ - .high-capacity
1458
+ - .ce-variables
1459
+ - .quarantine
1460
+ - .rspec-report-opts
1461
+ variables:
1462
+ QA_SCENARIO: "Test::Integration::GitalyCluster"
1463
+ QA_LOG_PATH: "tmp/gitaly_cluster.log"
1464
+
1465
+ ee:gitaly-cluster:
1466
+ extends:
1467
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1468
+ - .test
1469
+ - .high-capacity
1470
+ - .ee-variables
1471
+ - .rspec-report-opts
1472
+ variables:
1473
+ QA_SCENARIO: "Test::Integration::GitalyCluster"
1474
+ QA_LOG_PATH: "tmp/gitaly_cluster.log"
1475
+
1476
+ ee:gitaly-cluster-quarantine:
1477
+ extends:
1478
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1479
+ - .test
1480
+ - .high-capacity
1481
+ - .ee-variables
1482
+ - .quarantine
1483
+ - .rspec-report-opts
1484
+ variables:
1485
+ QA_SCENARIO: "Test::Integration::GitalyCluster"
1486
+ QA_LOG_PATH: "tmp/gitaly_cluster.log"
1487
+
1488
+ YML
1489
+ end
1490
+
1491
+ def mtls
1492
+ <<~YML
1493
+ ce:mtls:
1494
+ extends:
1495
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1496
+ - .test
1497
+ - .ce-variables
1498
+ - .rspec-report-opts
1499
+ variables:
1500
+ QA_SCENARIO: "Test::Integration::MTLS"
1501
+
1502
+ ee:mtls:
1503
+ extends:
1504
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1505
+ - .test
1506
+ - .ee-variables
1507
+ - .rspec-report-opts
1508
+ variables:
1509
+ QA_SCENARIO: "Test::Integration::MTLS"
1510
+
1511
+ YML
1512
+ end
1513
+
1514
+ def smtp
1515
+ <<~YML
1516
+ ce:smtp:
1517
+ extends:
1518
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1519
+ - .test
1520
+ - .high-capacity
1521
+ - .ce-variables
1522
+ - .rspec-report-opts
1523
+ variables:
1524
+ QA_SCENARIO: "Test::Integration::SMTP"
1525
+
1526
+ ee:smtp:
1527
+ extends:
1528
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1529
+ - .test
1530
+ - .high-capacity
1531
+ - .ee-variables
1532
+ - .rspec-report-opts
1533
+ variables:
1534
+ QA_SCENARIO: "Test::Integration::SMTP"
1535
+
1536
+ YML
1537
+ end
1538
+
1539
+ def jira
1540
+ <<~YML
1541
+ ce:jira:
1542
+ extends:
1543
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1544
+ - .test
1545
+ - .high-capacity
1546
+ - .ce-variables
1547
+ - .rspec-report-opts
1548
+ variables:
1549
+ QA_SCENARIO: "Test::Integration::Jira"
1550
+
1551
+ ce:jira-quarantine:
1552
+ extends:
1553
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1554
+ - .test
1555
+ - .high-capacity
1556
+ - .ce-variables
1557
+ - .quarantine
1558
+ - .rspec-report-opts
1559
+ variables:
1560
+ QA_SCENARIO: "Test::Integration::Jira"
1561
+
1562
+ ee:jira:
1563
+ extends:
1564
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1565
+ - .test
1566
+ - .high-capacity
1567
+ - .ee-variables
1568
+ - .rspec-report-opts
1569
+ variables:
1570
+ QA_SCENARIO: "Test::Integration::Jira"
1571
+
1572
+ ee:jira-quarantine:
1573
+ extends:
1574
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1575
+ - .test
1576
+ - .high-capacity
1577
+ - .ee-variables
1578
+ - .quarantine
1579
+ - .rspec-report-opts
1580
+ variables:
1581
+ QA_SCENARIO: "Test::Integration::Jira"
1582
+
1583
+ YML
1584
+ end
1585
+
1586
+ def integrations
1587
+ <<~YML
1588
+ ce:integrations:
1589
+ extends:
1590
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1591
+ - .test
1592
+ - .high-capacity
1593
+ - .ce-variables
1594
+ - .rspec-report-opts
1595
+ variables:
1596
+ QA_SCENARIO: "Test::Integration::Integrations"
1597
+
1598
+ ce:integrations-quarantine:
1599
+ extends:
1600
+ - ce:integrations
1601
+ - .quarantine
1602
+
1603
+ YML
1604
+ end
1605
+
1606
+ def large_setup
1607
+ <<~YML
1608
+ ce:large-setup:
1609
+ extends:
1610
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1611
+ - .test
1612
+ - .high-capacity
1613
+ - .ce-variables
1614
+ - .rspec-report-opts
1615
+ variables:
1616
+ QA_RSPEC_TAGS: "--tag can_use_large_setup"
1617
+
1618
+ ee:large-setup:
1619
+ extends:
1620
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1621
+ - .test
1622
+ - .high-capacity
1623
+ - .ee-variables
1624
+ - .rspec-report-opts
1625
+ variables:
1626
+ QA_RSPEC_TAGS: "--tag can_use_large_setup"
1627
+
1628
+ YML
1629
+ end
1630
+
1631
+ def cloud_activation
1632
+ <<~YML
1633
+ ee:cloud-activation:
1634
+ before_script:
1635
+ - unset EE_LICENSE
1636
+ - !reference [default, before_script]
1637
+ extends:
1638
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1639
+ - .test
1640
+ - .high-capacity
1641
+ - .ee-variables
1642
+ - .rspec-report-opts
1643
+ - .combined-gitlab-qa-options-script
1644
+ variables:
1645
+ QA_RSPEC_TAGS: "--tag cloud_activation"
1646
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --seed-db license*.rb"
1647
+
1648
+ ee:cloud-activation-quarantine:
1649
+ before_script:
1650
+ - unset EE_LICENSE
1651
+ - !reference [default, before_script]
1652
+ extends:
1653
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1654
+ - .test
1655
+ - .high-capacity
1656
+ - .ee-variables
1657
+ - .quarantine
1658
+ - .rspec-report-opts
1659
+ - .combined-gitlab-qa-options-script
1660
+ variables:
1661
+ QA_RSPEC_TAGS: "--tag cloud_activation"
1662
+ GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --seed-db license*.rb"
1663
+
1664
+ YML
1665
+ end
1666
+
1667
+ def registry_with_cdn
1668
+ <<~YML
1669
+ ce:registry_with_cdn:
1670
+ extends:
1671
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1672
+ - .test
1673
+ - .high-capacity
1674
+ - .ce-variables
1675
+ - .rspec-report-opts
1676
+ variables:
1677
+ QA_SCENARIO: "Test::Integration::RegistryWithCDN"
1678
+ allow_failure: true
1679
+
1680
+ ce:registry_with_cdn-quarantine:
1681
+ extends:
1682
+ - .rules:ce-never-when-triggered-by-feature-flag-definition-change
1683
+ - .test
1684
+ - .high-capacity
1685
+ - .ce-variables
1686
+ - .quarantine
1687
+ - .rspec-report-opts
1688
+ variables:
1689
+ QA_SCENARIO: "Test::Integration::RegistryWithCDN"
1690
+
1691
+ ee:registry_with_cdn:
1692
+ extends:
1693
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1694
+ - .test
1695
+ - .ee-variables
1696
+ - .high-capacity
1697
+ - .rspec-report-opts
1698
+ variables:
1699
+ QA_SCENARIO: "Test::Integration::RegistryWithCDN"
1700
+ allow_failure: true
1701
+
1702
+ ee:registry_with_cdn-quarantine:
1703
+ extends:
1704
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
1705
+ - .test
1706
+ - .high-capacity
1707
+ - .ee-variables
1708
+ - .quarantine
1709
+ - .rspec-report-opts
1710
+ variables:
1711
+ QA_SCENARIO: "Test::Integration::RegistryWithCDN"
1712
+
1713
+ YML
1714
+ end
1715
+
1716
+ # This job requires the `GITLAB_QA_ACCESS_TOKEN` and `GITLAB_QA_DEV_ACCESS_TOKEN`
1717
+ # variable to be passed when triggered.
1718
+ def staging
1719
+ <<~YML
1720
+ staging:
1721
+ script:
1722
+ - unset EE_LICENSE
1723
+ - 'echo "Running: bundle exec exe/gitlab-qa Test::Instance::Staging ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS"'
1724
+ - bundle exec exe/gitlab-qa Test::Instance::Staging ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS
1725
+ extends:
1726
+ - .rules:only-qa-never-when-triggered-by-feature-flag-definition-change
1727
+ - .test
1728
+ - .high-capacity
1729
+ allow_failure: true
1730
+
1731
+ YML
1732
+ end
1733
+
1734
+ def should_run?(example_file_name)
1735
+ @no_of_example_files.include?(example_file_name)
1736
+ end
1737
+ end
1738
+
1739
+ jobs = GenerateQAJobs.new(Dir.glob('no_of_examples/*').map { |s| File.basename(s, '.*') }).execute
1740
+
1741
+ File.open('generated-qa-jobs.yml', 'w') { |f| f.write(jobs) }