gitlab-qa 9.1.2 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +106 -149
  3. data/.simplecov +9 -0
  4. data/Gemfile.lock +15 -1
  5. data/README.md +5 -4
  6. data/docs/what_tests_can_be_run.md +73 -35
  7. data/gitlab-qa.gemspec +3 -0
  8. data/lib/gitlab/qa/component/base.rb +8 -1
  9. data/lib/gitlab/qa/component/gitaly.rb +1 -1
  10. data/lib/gitlab/qa/component/gitlab.rb +2 -2
  11. data/lib/gitlab/qa/component/mock_server.rb +13 -0
  12. data/lib/gitlab/qa/report/gitlab_issue_client.rb +1 -1
  13. data/lib/gitlab/qa/report/relate_failure_issue.rb +116 -20
  14. data/lib/gitlab/qa/report/report_as_issue.rb +1 -1
  15. data/lib/gitlab/qa/report/test_result.rb +2 -1
  16. data/lib/gitlab/qa/reporter.rb +8 -0
  17. data/lib/gitlab/qa/runtime/env.rb +17 -4
  18. data/lib/gitlab/qa/runtime/omnibus_configurations/decomposition_multiple_db.rb +1 -1
  19. data/lib/gitlab/qa/scenario/test/integration/oauth.rb +68 -0
  20. data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +3 -2
  21. data/lib/gitlab/qa/system_logs/finders/json_log_finder.rb +65 -0
  22. data/lib/gitlab/qa/system_logs/finders/rails/api_log_finder.rb +21 -0
  23. data/lib/gitlab/qa/system_logs/finders/rails/application_log_finder.rb +21 -0
  24. data/lib/gitlab/qa/system_logs/finders/rails/exception_log_finder.rb +21 -0
  25. data/lib/gitlab/qa/system_logs/finders/rails/graphql_log_finder.rb +21 -0
  26. data/lib/gitlab/qa/system_logs/log_types/log.rb +38 -0
  27. data/lib/gitlab/qa/system_logs/log_types/rails/api_log.rb +34 -0
  28. data/lib/gitlab/qa/system_logs/log_types/rails/application_log.rb +27 -0
  29. data/lib/gitlab/qa/system_logs/log_types/rails/exception_log.rb +23 -0
  30. data/lib/gitlab/qa/system_logs/log_types/rails/graphql_log.rb +30 -0
  31. data/lib/gitlab/qa/system_logs/shared_fields.rb +29 -0
  32. data/lib/gitlab/qa/system_logs/system_logs_formatter.rb +65 -0
  33. data/lib/gitlab/qa/version.rb +1 -1
  34. data/scripts/build-package-and-test-env +15 -0
  35. metadata +59 -47
  36. data/.gitlab/ci/jobs/airgapped.gitlab-ci.yml +0 -23
  37. data/.gitlab/ci/jobs/base.gitlab-ci.yml +0 -273
  38. data/.gitlab/ci/jobs/chaos.gitlab-ci.yml +0 -22
  39. data/.gitlab/ci/jobs/cloud_activation.gitlab-ci.yml +0 -24
  40. data/.gitlab/ci/jobs/custom_parallel.gitlab-ci.yml +0 -21
  41. data/.gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml +0 -27
  42. data/.gitlab/ci/jobs/decomposition_single_db.gitlab-ci.yml +0 -25
  43. data/.gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml +0 -18
  44. data/.gitlab/ci/jobs/elasticsearch.gitlab-ci.yml +0 -20
  45. data/.gitlab/ci/jobs/geo.gitlab-ci.yml +0 -18
  46. data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -41
  47. data/.gitlab/ci/jobs/gitlab_pages.gitlab-ci.yml +0 -19
  48. data/.gitlab/ci/jobs/group_saml.gitlab-ci.yml +0 -20
  49. data/.gitlab/ci/jobs/instance.gitlab-ci.yml +0 -55
  50. data/.gitlab/ci/jobs/instance_saml.gitlab-ci.yml +0 -41
  51. data/.gitlab/ci/jobs/integrations.gitlab-ci.yml +0 -14
  52. data/.gitlab/ci/jobs/jira.gitlab-ci.yml +0 -41
  53. data/.gitlab/ci/jobs/large_setup.gitlab-ci.yml +0 -19
  54. data/.gitlab/ci/jobs/ldap_no_server.gitlab-ci.yml +0 -20
  55. data/.gitlab/ci/jobs/ldap_no_tls.gitlab-ci.yml +0 -41
  56. data/.gitlab/ci/jobs/ldap_tls.gitlab-ci.yml +0 -41
  57. data/.gitlab/ci/jobs/mattermost.gitlab-ci.yml +0 -41
  58. data/.gitlab/ci/jobs/metrics.gitlab-ci.yml +0 -41
  59. data/.gitlab/ci/jobs/mtls.gitlab-ci.yml +0 -19
  60. data/.gitlab/ci/jobs/object_storage.gitlab-ci.yml +0 -49
  61. data/.gitlab/ci/jobs/object_storage_aws.gitlab-ci.yml +0 -25
  62. data/.gitlab/ci/jobs/object_storage_gcs.gitlab-ci.yml +0 -23
  63. data/.gitlab/ci/jobs/object_storage_registry_tls.gitlab-ci.yml +0 -41
  64. data/.gitlab/ci/jobs/omnibus_image.gitlab-ci.yml +0 -15
  65. data/.gitlab/ci/jobs/omnibus_upgrade.gitlab-ci.yml +0 -28
  66. data/.gitlab/ci/jobs/opensearch.gitlab-ci.yml +0 -20
  67. data/.gitlab/ci/jobs/packages.gitlab-ci.yml +0 -25
  68. data/.gitlab/ci/jobs/praefect.gitlab-ci.yml +0 -71
  69. data/.gitlab/ci/jobs/registry.gitlab-ci.yml +0 -41
  70. data/.gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml +0 -55
  71. data/.gitlab/ci/jobs/relative_url.gitlab-ci.yml +0 -65
  72. data/.gitlab/ci/jobs/repository_storage.gitlab-ci.yml +0 -41
  73. data/.gitlab/ci/jobs/sanity_framework.gitlab-ci.yml +0 -24
  74. data/.gitlab/ci/jobs/service_ping_disabled.gitlab-ci.yml +0 -19
  75. data/.gitlab/ci/jobs/smtp.gitlab-ci.yml +0 -19
  76. data/.gitlab/ci/jobs/staging.gitlab-ci.yml +0 -10
  77. data/.gitlab/ci/jobs/update.gitlab-ci.yml +0 -60
  78. data/.gitlab/ci/rules.gitlab-ci.yml +0 -183
  79. data/lib/gitlab/qa/scenario/test/omnibus/update.rb +0 -72
  80. data/scripts/generate-qa-jobs.rb +0 -99
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module SystemLogs
6
+ module LogTypes
7
+ module Rails
8
+ class ExceptionLog < Log
9
+ include SharedFields::Exception
10
+
11
+ def initialize(data)
12
+ super('Rails Exceptions', data)
13
+ end
14
+
15
+ def summary_fields
16
+ super.concat(exception_fields)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module SystemLogs
6
+ module LogTypes
7
+ module Rails
8
+ class GraphqlLog < Log
9
+ include SharedFields::Meta
10
+
11
+ def initialize(data)
12
+ super('Rails GraphQL', data)
13
+ end
14
+
15
+ def summary_fields
16
+ super.concat(
17
+ [
18
+ :operation_name,
19
+ :query_string,
20
+ :variables
21
+ ],
22
+ meta_fields
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module SystemLogs
6
+ module SharedFields
7
+ module Meta
8
+ def meta_fields
9
+ [
10
+ :meta_user,
11
+ :meta_project,
12
+ :meta_caller_id
13
+ ]
14
+ end
15
+ end
16
+
17
+ module Exception
18
+ def exception_fields
19
+ [
20
+ :exception_class,
21
+ :exception_message,
22
+ :exception_backtrace
23
+ ]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module SystemLogs
6
+ class SystemLogsFormatter
7
+ NUM_OF_LOG_SECTIONS = 4
8
+
9
+ def initialize(base_paths, correlation_id)
10
+ @base_paths = base_paths
11
+ @correlation_id = correlation_id
12
+ end
13
+
14
+ def system_logs_summary_markdown
15
+ log_sections = Array.new(NUM_OF_LOG_SECTIONS) { [] }
16
+
17
+ @base_paths.each do |base_path|
18
+ all_logs = [
19
+ Finders::Rails::ApiLogFinder.new(base_path).find(@correlation_id),
20
+ Finders::Rails::ExceptionLogFinder.new(base_path).find(@correlation_id),
21
+ Finders::Rails::ApplicationLogFinder.new(base_path).find(@correlation_id),
22
+ Finders::Rails::GraphqlLogFinder.new(base_path).find(@correlation_id)
23
+ ]
24
+
25
+ create_log_summary_sections!(all_logs, log_sections)
26
+ end
27
+
28
+ log_sections.prepend('### System Logs') unless log_sections.all?(&:empty?)
29
+ log_sections.join("\n").rstrip
30
+ end
31
+
32
+ private
33
+
34
+ def create_log_summary_sections!(all_logs, sections)
35
+ sections.zip(all_logs) do |section, logs|
36
+ unless logs.empty?
37
+ section_title = "\n#### #{logs.first.name}"
38
+ section.append(section_title) unless section.include?(section_title)
39
+ section.append(create_log_summaries(logs))
40
+ end
41
+ end
42
+ end
43
+
44
+ def create_log_summaries(logs)
45
+ section = []
46
+
47
+ logs.each do |log|
48
+ log_summary = <<~MARKDOWN.chomp
49
+ <details><summary>Click to expand</summary>
50
+
51
+ ```json
52
+ #{JSON.pretty_generate(log.summary)}
53
+ ```
54
+ </details>
55
+ MARKDOWN
56
+
57
+ section.append(log_summary)
58
+ end
59
+
60
+ section.join("\n\n")
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '9.1.2'
5
+ VERSION = '10.1.0'
6
6
  end
7
7
  end
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+
3
+ # set custom qa cache key because upstream template by default installs gitlab-qa from rubygems and uses cache key
4
+ # based on globally defined gitlab-qa version
5
+ #
6
+ # UPDATE_QA_CACHE needs to be passed to included child pipeline because e2e specs run on separate runners which don't share
7
+ # same infrastructure and this variable allows to populate cache for e2e spec specific runners
8
+ qa_cache_key="${RUBY_VERSION}-$(md5sum Gemfile.lock | awk '{ print $1 }')"
9
+
10
+ echo "Saving environment variables for package-and-test trigger"
11
+ echo "GITLAB_QA_CACHE_KEY=$qa_cache_key" > $BUILD_ENV
12
+ echo "UPDATE_QA_CACHE=$UPDATE_QA_CACHE" >> $BUILD_ENV
13
+
14
+ echo "Created $BUILD_ENV file:"
15
+ cat $BUILD_ENV
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.1.2
4
+ version: 10.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-08 00:00:00.000000000 Z
11
+ date: 2023-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.7'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.22'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.22'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov-cobertura
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.1'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: solargraph
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,20 @@ dependencies:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0.41'
153
+ - !ruby/object:Gem::Dependency
154
+ name: timecop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.9.5
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.9.5
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: webmock
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -278,55 +320,13 @@ files:
278
320
  - ".dockerignore"
279
321
  - ".gitignore"
280
322
  - ".gitlab-ci.yml"
281
- - ".gitlab/ci/jobs/airgapped.gitlab-ci.yml"
282
- - ".gitlab/ci/jobs/base.gitlab-ci.yml"
283
- - ".gitlab/ci/jobs/chaos.gitlab-ci.yml"
284
- - ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
285
- - ".gitlab/ci/jobs/custom_parallel.gitlab-ci.yml"
286
- - ".gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml"
287
- - ".gitlab/ci/jobs/decomposition_single_db.gitlab-ci.yml"
288
- - ".gitlab/ci/jobs/ee_previous_to_ce_update.gitlab-ci.yml"
289
- - ".gitlab/ci/jobs/elasticsearch.gitlab-ci.yml"
290
- - ".gitlab/ci/jobs/geo.gitlab-ci.yml"
291
- - ".gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml"
292
- - ".gitlab/ci/jobs/gitlab_pages.gitlab-ci.yml"
293
- - ".gitlab/ci/jobs/group_saml.gitlab-ci.yml"
294
- - ".gitlab/ci/jobs/instance.gitlab-ci.yml"
295
- - ".gitlab/ci/jobs/instance_saml.gitlab-ci.yml"
296
- - ".gitlab/ci/jobs/integrations.gitlab-ci.yml"
297
- - ".gitlab/ci/jobs/jira.gitlab-ci.yml"
298
- - ".gitlab/ci/jobs/large_setup.gitlab-ci.yml"
299
- - ".gitlab/ci/jobs/ldap_no_server.gitlab-ci.yml"
300
- - ".gitlab/ci/jobs/ldap_no_tls.gitlab-ci.yml"
301
- - ".gitlab/ci/jobs/ldap_tls.gitlab-ci.yml"
302
- - ".gitlab/ci/jobs/mattermost.gitlab-ci.yml"
303
- - ".gitlab/ci/jobs/metrics.gitlab-ci.yml"
304
- - ".gitlab/ci/jobs/mtls.gitlab-ci.yml"
305
- - ".gitlab/ci/jobs/object_storage.gitlab-ci.yml"
306
- - ".gitlab/ci/jobs/object_storage_aws.gitlab-ci.yml"
307
- - ".gitlab/ci/jobs/object_storage_gcs.gitlab-ci.yml"
308
- - ".gitlab/ci/jobs/object_storage_registry_tls.gitlab-ci.yml"
309
- - ".gitlab/ci/jobs/omnibus_image.gitlab-ci.yml"
310
- - ".gitlab/ci/jobs/omnibus_upgrade.gitlab-ci.yml"
311
- - ".gitlab/ci/jobs/opensearch.gitlab-ci.yml"
312
- - ".gitlab/ci/jobs/packages.gitlab-ci.yml"
313
- - ".gitlab/ci/jobs/praefect.gitlab-ci.yml"
314
- - ".gitlab/ci/jobs/registry.gitlab-ci.yml"
315
- - ".gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml"
316
- - ".gitlab/ci/jobs/relative_url.gitlab-ci.yml"
317
- - ".gitlab/ci/jobs/repository_storage.gitlab-ci.yml"
318
- - ".gitlab/ci/jobs/sanity_framework.gitlab-ci.yml"
319
- - ".gitlab/ci/jobs/service_ping_disabled.gitlab-ci.yml"
320
- - ".gitlab/ci/jobs/smtp.gitlab-ci.yml"
321
- - ".gitlab/ci/jobs/staging.gitlab-ci.yml"
322
- - ".gitlab/ci/jobs/update.gitlab-ci.yml"
323
- - ".gitlab/ci/rules.gitlab-ci.yml"
324
323
  - ".gitlab/issue_templates/Default.md"
325
324
  - ".gitlab/merge_request_templates/Default.md"
326
325
  - ".gitlab/merge_request_templates/Release.md"
327
326
  - ".rspec"
328
327
  - ".rubocop.yml"
329
328
  - ".rubocop_todo.yml"
329
+ - ".simplecov"
330
330
  - CONTRIBUTING.md
331
331
  - Dangerfile
332
332
  - Gemfile
@@ -459,6 +459,7 @@ files:
459
459
  - lib/gitlab/qa/scenario/test/integration/mattermost.rb
460
460
  - lib/gitlab/qa/scenario/test/integration/metrics.rb
461
461
  - lib/gitlab/qa/scenario/test/integration/mtls.rb
462
+ - lib/gitlab/qa/scenario/test/integration/oauth.rb
462
463
  - lib/gitlab/qa/scenario/test/integration/opensearch.rb
463
464
  - lib/gitlab/qa/scenario/test/integration/praefect.rb
464
465
  - lib/gitlab/qa/scenario/test/integration/registry.rb
@@ -469,7 +470,6 @@ files:
469
470
  - lib/gitlab/qa/scenario/test/integration/smtp.rb
470
471
  - lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
471
472
  - lib/gitlab/qa/scenario/test/omnibus/image.rb
472
- - lib/gitlab/qa/scenario/test/omnibus/update.rb
473
473
  - lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
474
474
  - lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
475
475
  - lib/gitlab/qa/scenario/test/sanity/version.rb
@@ -485,9 +485,21 @@ files:
485
485
  - lib/gitlab/qa/support/invalid_response_error.rb
486
486
  - lib/gitlab/qa/support/shell_command.rb
487
487
  - lib/gitlab/qa/support/shellout.rb
488
+ - lib/gitlab/qa/system_logs/finders/json_log_finder.rb
489
+ - lib/gitlab/qa/system_logs/finders/rails/api_log_finder.rb
490
+ - lib/gitlab/qa/system_logs/finders/rails/application_log_finder.rb
491
+ - lib/gitlab/qa/system_logs/finders/rails/exception_log_finder.rb
492
+ - lib/gitlab/qa/system_logs/finders/rails/graphql_log_finder.rb
493
+ - lib/gitlab/qa/system_logs/log_types/log.rb
494
+ - lib/gitlab/qa/system_logs/log_types/rails/api_log.rb
495
+ - lib/gitlab/qa/system_logs/log_types/rails/application_log.rb
496
+ - lib/gitlab/qa/system_logs/log_types/rails/exception_log.rb
497
+ - lib/gitlab/qa/system_logs/log_types/rails/graphql_log.rb
498
+ - lib/gitlab/qa/system_logs/shared_fields.rb
499
+ - lib/gitlab/qa/system_logs/system_logs_formatter.rb
488
500
  - lib/gitlab/qa/test_logger.rb
489
501
  - lib/gitlab/qa/version.rb
490
- - scripts/generate-qa-jobs.rb
502
+ - scripts/build-package-and-test-env
491
503
  - support/data/admin_access_token_seed.rb
492
504
  - support/data/license_usage_seed.rb
493
505
  - support/manifests/suggested_reviewer/authenticator.yaml
@@ -1,23 +0,0 @@
1
- ce:airgapped:
2
- extends:
3
- - .rules:ce-never-when-triggered-by-feature-flag-definition-change
4
- - .test
5
- - .high-capacity
6
- - .ce-variables
7
- - .rspec-report-opts
8
- parallel: 10
9
- variables:
10
- QA_SCENARIO: "Test::Instance::Airgapped"
11
- QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
12
-
13
- ee:airgapped:
14
- extends:
15
- - .rules:ee-never-when-triggered-by-feature-flag-definition-change
16
- - .test
17
- - .high-capacity
18
- - .ee-variables
19
- - .rspec-report-opts
20
- parallel: 10
21
- variables:
22
- QA_SCENARIO: "Test::Instance::Airgapped"
23
- QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
@@ -1,273 +0,0 @@
1
- stages:
2
- - test
3
- - report
4
- - notify
5
-
6
- default:
7
- image: registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-docker-${DOCKER_VERSION}
8
- tags:
9
- - gitlab-org
10
- cache:
11
- key:
12
- files:
13
- - Gemfile.lock
14
- - gitlab-qa.gemspec
15
- prefix: $RUBY_VERSION
16
- paths:
17
- - vendor/ruby
18
- before_script:
19
- - export QA_ARTIFACTS_DIR=$CI_PROJECT_DIR
20
- - bundle version
21
- - bundle config path vendor
22
- - bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check
23
- - export LANG=C.UTF-8
24
- - echo $CI_MERGE_REQUEST_IID
25
- - echo $CI_COMMIT_BRANCH
26
- - echo $CI_COMMIT_TAG
27
- - echo $CI_PIPELINE_SOURCE
28
- - echo $CI_DEFAULT_BRANCH
29
- - echo $CI_COMMIT_REF_NAME
30
- - echo $CI_JOB_ID
31
- - echo $CI_COMMIT_REF_PROTECTED
32
- - echo $TOP_UPSTREAM_SOURCE_SHA
33
- - echo $TOP_UPSTREAM_MERGE_REQUEST_IID
34
- - echo $TOP_UPSTREAM_SOURCE_PROJECT
35
- - echo $TOP_UPSTREAM_DEFAULT_BRANCH
36
- - echo $TOP_UPSTREAM_SOURCE_REF
37
- - echo $TOP_UPSTREAM_SOURCE_JOB
38
- - echo $GITLAB_QA_OPTIONS
39
- - echo $QA_TESTS
40
- - echo $RSPEC_REPORT_OPTS
41
- - echo $QA_RSPEC_TAGS
42
- - echo $QA_TEST_RESULTS_ISSUES_PROJECT
43
- - echo $QA_TESTCASES_REPORTING_PROJECT
44
- - echo $DEFAULT_RELEASE
45
- - echo $GITLAB_QA_OPTIONS_COMBINED
46
- - echo $DISABLE_RELATING_FAILURE_ISSUES
47
- - echo $QA_FAILURES_MAX_DIFF_RATIO
48
- - echo $QA_FAILURES_REPORTER_OPTIONS
49
- - echo $NOTIFY_CHANNEL
50
- - echo $REPORT_ISSUE_URL
51
- - echo $QA_TESTCASE_SESSIONS_PROJECT
52
- - echo $QA_FAILURES_REPORTING_PROJECT
53
- - echo $ALLURE_JOB_NAME
54
- - echo $QA_IMAGE
55
- - echo $RELEASE
56
- - echo $TEST_LICENSE_MODE
57
-
58
- workflow:
59
- rules:
60
- # For merge requests, create a pipeline.
61
- - if: $CI_MERGE_REQUEST_IID
62
- # For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
63
- - if: $CI_COMMIT_BRANCH == "master"
64
- # For tags, create a pipeline.
65
- - if: $CI_COMMIT_TAG
66
- # For triggers from GitLab MR pipelines (and pipelines from other projects or parent pipeline), create a pipeline
67
- - if: $CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "parent_pipeline"
68
- # When using Run pipeline button in the GitLab UI, from the project’s CI/CD > Pipelines section, create a pipeline.
69
- - if: $CI_PIPELINE_SOURCE == "web"
70
-
71
- variables:
72
- DOCKER_DRIVER: overlay2
73
- DOCKER_HOST: tcp://docker:2375
74
- COLORIZED_LOGS: "true"
75
- QA_CAN_TEST_GIT_PROTOCOL_V2: "true"
76
- QA_CAN_TEST_PRAEFECT: "false"
77
- QA_GENERATE_ALLURE_REPORT: "true"
78
- QA_TESTCASES_REPORTING_PROJECT: "gitlab-org/gitlab"
79
- QA_TEST_RESULTS_ISSUES_PROJECT: "gitlab-org/quality/testcases"
80
- QA_TESTCASE_SESSIONS_PROJECT: "gitlab-org/quality/testcase-sessions"
81
- # QA_DEFAULT_BRANCH is the default branch name of the instance under test.
82
- QA_DEFAULT_BRANCH: "master"
83
- RUBY_VERSION: "2.7"
84
- DOCKER_VERSION: "20.10.14"
85
-
86
- .ce-variables:
87
- variables:
88
- DEFAULT_RELEASE: "CE"
89
-
90
- .ee-variables:
91
- variables:
92
- DEFAULT_RELEASE: "EE"
93
-
94
- .test:
95
- stage: test
96
- timeout: 1 hour 30 minutes
97
- services:
98
- - docker:20.10.5-dind
99
- tags:
100
- - gitlab-org
101
- - docker
102
- artifacts:
103
- when: always
104
- expire_in: 10d
105
- paths:
106
- - gitlab-qa-run-*
107
- reports:
108
- junit: gitlab-qa-run-*/**/rspec-*.xml
109
- script:
110
- - 'echo "QA_ARTIFACTS_DIR: $QA_ARTIFACTS_DIR"'
111
- - 'echo "CI_PROJECT_DIR: $CI_PROJECT_DIR"'
112
- - '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"'
113
- - 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=$?
114
- - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
115
- # Back-compatibility until we migrate all GITLAB_QA_PRODUCTION_ACCESS_TOKEN to QA_REPORT_RESULT_TOKEN.
116
- # See https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/175#note_1281196581 for context.
117
- - export GITLAB_QA_ACCESS_TOKEN="${QA_REPORT_RESULT_TOKEN:-$GITLAB_QA_PRODUCTION_ACCESS_TOKEN}"
118
- - |
119
- if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then
120
- 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;
121
- fi
122
- - exit $test_run_exit_code
123
-
124
- # For jobs that shouldn't report results in issues, e.g., manually run custom jobs
125
- .no-issue-report-script:
126
- script:
127
- - '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"'
128
- - bundle exec exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTIONS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
129
-
130
- # For jobs that provide additional GITLAB_QA_OPTIONS, e.g., jobs that include --omnibus-config
131
- .combined-gitlab-qa-options-script:
132
- script:
133
- - '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"'
134
-
135
- - 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=$?
136
- - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
137
- # Back-compatibility until we migrate all GITLAB_QA_PRODUCTION_ACCESS_TOKEN to QA_REPORT_RESULT_TOKEN.
138
- # See https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/175#note_1281196581 for context.
139
- - export GITLAB_QA_ACCESS_TOKEN="${QA_REPORT_RESULT_TOKEN:-$GITLAB_QA_PRODUCTION_ACCESS_TOKEN}"
140
- - |
141
- if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then
142
- 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;
143
- fi
144
- - exit $test_run_exit_code
145
-
146
- # The Test::Omnibus::Update scenarios require the release to be specified twice, which can't be done dynamically using the `variables` parameter
147
- # So instead we can use this script with two release variables
148
- .update-scenario-script:
149
- script:
150
- - '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"'
151
- - 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=$?
152
- - bundle exec exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
153
- # Back-compatibility until we migrate all GITLAB_QA_PRODUCTION_ACCESS_TOKEN to QA_REPORT_RESULT_TOKEN.
154
- # See https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/175#note_1281196581 for context.
155
- - export GITLAB_QA_ACCESS_TOKEN="${QA_REPORT_RESULT_TOKEN:-$GITLAB_QA_PRODUCTION_ACCESS_TOKEN}"
156
- - |
157
- if [ "$TOP_UPSTREAM_SOURCE_REF" == $TOP_UPSTREAM_DEFAULT_BRANCH ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then
158
- 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;
159
- fi
160
- - exit $test_run_exit_code
161
-
162
- .high-capacity:
163
- tags:
164
- - e2e
165
-
166
- .rspec-report-opts:
167
- variables:
168
- FILE_SAFE_JOB_NAME: $(echo $CI_JOB_NAME | sed 's/[ /]/_/g')
169
- 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'
170
-
171
- .quarantine:
172
- allow_failure: true
173
- variables:
174
- QA_RSPEC_TAGS: "--tag quarantine"
175
-
176
- generate_test_session:
177
- stage: report
178
- rules:
179
- - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
180
- when: always
181
- - if: '$TOP_UPSTREAM_SOURCE_JOB =~ /\Ahttps:\/\/ops.gitlab.net\//'
182
- when: always
183
- artifacts:
184
- when: always
185
- expire_in: 10d
186
- paths:
187
- - REPORT_ISSUE_URL
188
- script:
189
- # Back-compatibility until we migrate all GITLAB_QA_PRODUCTION_ACCESS_TOKEN to QA_TEST_SESSION_TOKEN.
190
- # See https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/175#note_1281240424 for context.
191
- - export GITLAB_QA_ACCESS_TOKEN="${QA_TEST_SESSION_TOKEN:-$GITLAB_QA_PRODUCTION_ACCESS_TOKEN}"
192
- - bundle exec exe/gitlab-qa-report --generate-test-session "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASE_SESSIONS_PROJECT"
193
-
194
- relate_test_failures:
195
- stage: report
196
- rules:
197
- - if: '$DISABLE_RELATING_FAILURE_ISSUES != null && $DISABLE_RELATING_FAILURE_ISSUES != ""'
198
- when: never
199
- - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
200
- when: always
201
- - if: '$TOP_UPSTREAM_SOURCE_JOB =~ /\Ahttps:\/\/ops.gitlab.net\//'
202
- when: always
203
- variables:
204
- QA_FAILURES_REPORTING_PROJECT: "gitlab-org/gitlab"
205
- QA_FAILURES_MAX_DIFF_RATIO: "0.15"
206
- # The --dry-run can be set to modify the behavior of `exe/gitlab-qa-report --relate-failure-issue` without releasing a new gem version.
207
- QA_FAILURES_REPORTER_OPTIONS: ""
208
- script:
209
- # Back-compatibility until we migrate all GITLAB_QA_PRODUCTION_ACCESS_TOKEN to QA_REPORT_RESULT_TOKEN.
210
- # See https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/issues/175#note_1281196581 for context.
211
- - export GITLAB_QA_ACCESS_TOKEN="${QA_REPORT_RESULT_TOKEN:-$GITLAB_QA_PRODUCTION_ACCESS_TOKEN}"
212
- - 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
213
-
214
- .notify_slack:
215
- image: alpine
216
- stage: notify
217
- dependencies: ['generate_test_session']
218
- cache: {}
219
- before_script:
220
- - apk update && apk add git curl bash
221
-
222
- notify_slack:
223
- extends:
224
- - .notify_slack
225
- rules:
226
- - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $NOTIFY_CHANNEL !=null && $NOTIFY_CHANNEL !=""'
227
- when: on_failure
228
- - if: '$TOP_UPSTREAM_SOURCE_JOB !=null && $TOP_UPSTREAM_SOURCE_JOB !="" && $TOP_UPSTREAM_SOURCE_REF == $TOP_UPSTREAM_DEFAULT_BRANCH'
229
- when: on_failure
230
- script:
231
- - export RELEASE=${TOP_UPSTREAM_SOURCE_REF:-$RELEASE}
232
- - echo "NOTIFY_CHANNEL is ${NOTIFY_CHANNEL:=qa-$TOP_UPSTREAM_SOURCE_REF}"
233
- - echo "RELEASE is ${RELEASE}"
234
- - echo "CI_PIPELINE_URL is $CI_PIPELINE_URL"
235
- - echo "TOP_UPSTREAM_SOURCE_JOB is $TOP_UPSTREAM_SOURCE_JOB"
236
- - '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'
237
-
238
- generate-allure-report:
239
- extends: .generate-allure-report-base
240
- stage: report
241
- variables:
242
- ALLURE_RESULTS_GLOB: gitlab-qa-run-*/**/allure-results/*
243
- cache:
244
- policy: pull
245
- before_script:
246
- - export STORAGE_CREDENTIALS=$QA_ALLURE_REPORT_GCS_CREDENTIALS
247
- - export GITLAB_AUTH_TOKEN=$GITLAB_QA_MR_ALLURE_REPORT_TOKEN
248
- # Set allure variables for merge request comment based on pipeline source
249
- - export ALLURE_MERGE_REQUEST_IID=${TOP_UPSTREAM_MERGE_REQUEST_IID:-$CI_MERGE_REQUEST_IID}
250
- - export ALLURE_PROJECT_PATH=${TOP_UPSTREAM_SOURCE_PROJECT:-$CI_MERGE_REQUEST_PROJECT_PATH}
251
- - export ALLURE_COMMIT_SHA=${TOP_UPSTREAM_SOURCE_SHA:-$CI_MERGE_REQUEST_SOURCE_BRANCH_SHA}
252
- rules:
253
- # Don't run report generation on release pipelines
254
- - if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab-qa" && $RELEASE == null'
255
- changes: ["lib/**/version.rb"]
256
- when: never
257
- - if: '$CI_COMMIT_TAG'
258
- when: never
259
- - if: '$ALLURE_JOB_NAME'
260
- when: always
261
-
262
- generate-knapsack-report:
263
- extends: .generate-knapsack-report-base
264
- image:
265
- name: ${QA_IMAGE}
266
- stage: report
267
-
268
- include:
269
- - local: .gitlab/ci/rules.gitlab-ci.yml
270
- - project: 'gitlab-org/quality/pipeline-common'
271
- file:
272
- - '/ci/allure-report.yml'
273
- - '/ci/knapsack-report.yml'
@@ -1,22 +0,0 @@
1
- ee:chaos:
2
- extends:
3
- - .rules:ee-never-when-triggered-by-feature-flag-definition-change
4
- - .test
5
- - .high-capacity
6
- - .ee-variables
7
- - .rspec-report-opts
8
- variables:
9
- QA_SCENARIO: "Test::Integration::Chaos"
10
- QA_RSPEC_TAGS: "--tag chaos"
11
-
12
- ee:chaos-quarantine:
13
- extends:
14
- - .rules:ee-never-when-triggered-by-feature-flag-definition-change
15
- - .test
16
- - .high-capacity
17
- - .ee-variables
18
- - .quarantine
19
- - .rspec-report-opts
20
- variables:
21
- QA_SCENARIO: "Test::Integration::Chaos"
22
- QA_RSPEC_TAGS: "--tag quarantine --tag chaos"