gitlab-qa 9.1.2 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
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"