gitlab-qa 7.27.1 → 7.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/.gitlab/ci/jobs/base.gitlab-ci.yml +5 -11
- data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -4
- data/.gitlab-ci.yml +8 -3
- data/Gemfile.lock +248 -0
- data/docs/what_tests_can_be_run.md +77 -24
- data/lib/gitlab/qa/component/base.rb +1 -2
- data/lib/gitlab/qa/component/gitlab.rb +7 -4
- data/lib/gitlab/qa/component/specs.rb +1 -1
- data/lib/gitlab/qa/docker/command.rb +8 -2
- data/lib/gitlab/qa/docker/engine.rb +14 -3
- data/lib/gitlab/qa/docker/shellout.rb +32 -8
- data/lib/gitlab/qa/report/test_result.rb +7 -0
- data/lib/gitlab/qa/runtime/env.rb +8 -1
- data/lib/gitlab/qa/runtime/logger.rb +6 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/ci_decomposition.rb +2 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage.rb +8 -10
- data/lib/gitlab/qa/scenario/test/integration/registry_with_cdn.rb +1 -0
- data/lib/gitlab/qa/test_logger.rb +54 -8
- data/lib/gitlab/qa/version.rb +1 -1
- data/lib/gitlab/qa.rb +0 -1
- data/scripts/generate-qa-jobs.rb +0 -1
- data/tmp/.gitignore +3 -0
- metadata +4 -4
- data/.gitlab/ci/jobs/actioncable.gitlab-ci.yml +0 -41
- data/lib/gitlab/qa/scenario/test/integration/actioncable.rb +0 -34
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6f3a8d250f26a5899d776475ac349829311045b51aeed7b73f1a40fc41cd23dc
|
|
4
|
+
data.tar.gz: 2258303729505a302fe0a6d05b57f5deee6efe21f0d7cbfb2542e92febfe2dc7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2ad81f0b8d7bcb59ff76963f0463ae2d221be28b262455c22e6ee11ad91a9c6b768291639ed25b9ff756c9b319566f4aa596281ca2c09d470a5a1374174f3929
|
|
7
|
+
data.tar.gz: 6e5a9601b50167f4cae9c87fe1415b1a6a740c855e56580cc553559d481842f6ed9feced7760a0403bb7993ef5ba7e11c1fd5723d2812a06227d1a64b87aefd1
|
data/.gitignore
CHANGED
|
@@ -245,14 +245,12 @@ generate-allure-report:
|
|
|
245
245
|
cache:
|
|
246
246
|
policy: pull
|
|
247
247
|
before_script:
|
|
248
|
-
# Override allure variables for upstream triggers
|
|
249
|
-
# Override default before script and don't push cache
|
|
250
248
|
- export STORAGE_CREDENTIALS=$QA_ALLURE_REPORT_GCS_CREDENTIALS
|
|
251
249
|
- export GITLAB_AUTH_TOKEN=$GITLAB_QA_MR_ALLURE_REPORT_TOKEN
|
|
252
|
-
|
|
253
|
-
- export ALLURE_MERGE_REQUEST_IID=$TOP_UPSTREAM_MERGE_REQUEST_IID
|
|
254
|
-
- export
|
|
255
|
-
- export
|
|
250
|
+
# Set allure variables for merge request comment based on pipeline source
|
|
251
|
+
- export ALLURE_MERGE_REQUEST_IID=${TOP_UPSTREAM_MERGE_REQUEST_IID:-$CI_MERGE_REQUEST_IID}
|
|
252
|
+
- export ALLURE_PROJECT_PATH=${TOP_UPSTREAM_SOURCE_PROJECT:-$CI_MERGE_REQUEST_PROJECT_PATH}
|
|
253
|
+
- export ALLURE_COMMIT_SHA=${TOP_UPSTREAM_SOURCE_SHA:-$CI_MERGE_REQUEST_SOURCE_BRANCH_SHA}
|
|
256
254
|
rules:
|
|
257
255
|
# Don't run report generation on release pipelines
|
|
258
256
|
- if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab-qa" && $RELEASE == null'
|
|
@@ -260,11 +258,7 @@ generate-allure-report:
|
|
|
260
258
|
when: never
|
|
261
259
|
- if: '$CI_COMMIT_TAG'
|
|
262
260
|
when: never
|
|
263
|
-
- if: '$
|
|
264
|
-
variables:
|
|
265
|
-
ALLURE_JOB_NAME: gitlab-qa
|
|
266
|
-
when: always
|
|
267
|
-
- if: '$TOP_UPSTREAM_SOURCE_PROJECT != null && $TOP_UPSTREAM_SOURCE_PROJECT != "" && $TOP_UPSTREAM_SOURCE_SHA != null && $TOP_UPSTREAM_SOURCE_SHA != ""'
|
|
261
|
+
- if: '$ALLURE_JOB_NAME'
|
|
268
262
|
when: always
|
|
269
263
|
|
|
270
264
|
generate-knapsack-report:
|
|
@@ -7,7 +7,6 @@ ce:gitaly-cluster:
|
|
|
7
7
|
- .rspec-report-opts
|
|
8
8
|
variables:
|
|
9
9
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
|
10
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
|
11
10
|
|
|
12
11
|
ce:gitaly-cluster-quarantine:
|
|
13
12
|
extends:
|
|
@@ -19,7 +18,6 @@ ce:gitaly-cluster-quarantine:
|
|
|
19
18
|
- .rspec-report-opts
|
|
20
19
|
variables:
|
|
21
20
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
|
22
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
|
23
21
|
|
|
24
22
|
ee:gitaly-cluster:
|
|
25
23
|
extends:
|
|
@@ -30,7 +28,6 @@ ee:gitaly-cluster:
|
|
|
30
28
|
- .rspec-report-opts
|
|
31
29
|
variables:
|
|
32
30
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
|
33
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
|
34
31
|
|
|
35
32
|
ee:gitaly-cluster-quarantine:
|
|
36
33
|
extends:
|
|
@@ -42,4 +39,3 @@ ee:gitaly-cluster-quarantine:
|
|
|
42
39
|
- .rspec-report-opts
|
|
43
40
|
variables:
|
|
44
41
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
|
45
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
data/.gitlab-ci.yml
CHANGED
|
@@ -25,12 +25,18 @@ workflow:
|
|
|
25
25
|
rules:
|
|
26
26
|
# For merge requests, create a pipeline.
|
|
27
27
|
- if: '$CI_MERGE_REQUEST_IID'
|
|
28
|
+
variables:
|
|
29
|
+
ALLURE_JOB_NAME: gitlab-qa
|
|
28
30
|
# For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
|
|
29
31
|
- if: '$CI_COMMIT_BRANCH == "master"'
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
variables:
|
|
33
|
+
ALLURE_JOB_NAME: gitlab-qa
|
|
32
34
|
# For triggers from GitLab MR pipelines (and pipelines from other projects), create a pipeline
|
|
33
35
|
- if: '$CI_PIPELINE_SOURCE == "pipeline"'
|
|
36
|
+
variables:
|
|
37
|
+
ALLURE_JOB_NAME: package-and-qa
|
|
38
|
+
# For tags, create a pipeline.
|
|
39
|
+
- if: '$CI_COMMIT_TAG'
|
|
34
40
|
# When using Run pipeline button in the GitLab UI, from the project’s CI/CD > Pipelines section, create a pipeline.
|
|
35
41
|
- if: '$CI_PIPELINE_SOURCE == "web"'
|
|
36
42
|
|
|
@@ -94,7 +100,6 @@ generate-jobs:
|
|
|
94
100
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag repository_storage
|
|
95
101
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag packages
|
|
96
102
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag integrations
|
|
97
|
-
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag actioncable
|
|
98
103
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag mtls
|
|
99
104
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag jira
|
|
100
105
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag can_use_large_setup
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
gitlab-qa (7.29.1)
|
|
5
|
+
activesupport (~> 6.1)
|
|
6
|
+
gitlab (~> 4.18.0)
|
|
7
|
+
http (~> 5.0)
|
|
8
|
+
nokogiri (~> 1.10)
|
|
9
|
+
rainbow (~> 3.0.0)
|
|
10
|
+
table_print (= 1.5.7)
|
|
11
|
+
|
|
12
|
+
GEM
|
|
13
|
+
remote: https://rubygems.org/
|
|
14
|
+
specs:
|
|
15
|
+
activesupport (6.1.6)
|
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
17
|
+
i18n (>= 1.6, < 2)
|
|
18
|
+
minitest (>= 5.1)
|
|
19
|
+
tzinfo (~> 2.0)
|
|
20
|
+
zeitwerk (~> 2.3)
|
|
21
|
+
addressable (2.8.0)
|
|
22
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
23
|
+
ast (2.4.2)
|
|
24
|
+
backport (1.2.0)
|
|
25
|
+
benchmark (0.2.0)
|
|
26
|
+
claide (1.1.0)
|
|
27
|
+
claide-plugins (0.9.2)
|
|
28
|
+
cork
|
|
29
|
+
nap
|
|
30
|
+
open4 (~> 1.3)
|
|
31
|
+
climate_control (1.0.1)
|
|
32
|
+
coderay (1.1.3)
|
|
33
|
+
colored2 (3.1.2)
|
|
34
|
+
concurrent-ruby (1.1.10)
|
|
35
|
+
cork (0.3.0)
|
|
36
|
+
colored2 (~> 3.1)
|
|
37
|
+
crack (0.4.5)
|
|
38
|
+
rexml
|
|
39
|
+
danger (8.6.1)
|
|
40
|
+
claide (~> 1.0)
|
|
41
|
+
claide-plugins (>= 0.9.2)
|
|
42
|
+
colored2 (~> 3.1)
|
|
43
|
+
cork (~> 0.1)
|
|
44
|
+
faraday (>= 0.9.0, < 2.0)
|
|
45
|
+
faraday-http-cache (~> 2.0)
|
|
46
|
+
git (~> 1.7)
|
|
47
|
+
kramdown (~> 2.3)
|
|
48
|
+
kramdown-parser-gfm (~> 1.0)
|
|
49
|
+
no_proxy_fix
|
|
50
|
+
octokit (~> 4.7)
|
|
51
|
+
terminal-table (>= 1, < 4)
|
|
52
|
+
danger-gitlab (8.0.0)
|
|
53
|
+
danger
|
|
54
|
+
gitlab (~> 4.2, >= 4.2.0)
|
|
55
|
+
diff-lcs (1.5.0)
|
|
56
|
+
domain_name (0.5.20190701)
|
|
57
|
+
unf (>= 0.0.5, < 1.0.0)
|
|
58
|
+
e2mmap (0.1.0)
|
|
59
|
+
faraday (1.10.0)
|
|
60
|
+
faraday-em_http (~> 1.0)
|
|
61
|
+
faraday-em_synchrony (~> 1.0)
|
|
62
|
+
faraday-excon (~> 1.1)
|
|
63
|
+
faraday-httpclient (~> 1.0)
|
|
64
|
+
faraday-multipart (~> 1.0)
|
|
65
|
+
faraday-net_http (~> 1.0)
|
|
66
|
+
faraday-net_http_persistent (~> 1.0)
|
|
67
|
+
faraday-patron (~> 1.0)
|
|
68
|
+
faraday-rack (~> 1.0)
|
|
69
|
+
faraday-retry (~> 1.0)
|
|
70
|
+
ruby2_keywords (>= 0.0.4)
|
|
71
|
+
faraday-em_http (1.0.0)
|
|
72
|
+
faraday-em_synchrony (1.0.0)
|
|
73
|
+
faraday-excon (1.1.0)
|
|
74
|
+
faraday-http-cache (2.2.0)
|
|
75
|
+
faraday (>= 0.8)
|
|
76
|
+
faraday-httpclient (1.0.1)
|
|
77
|
+
faraday-multipart (1.0.3)
|
|
78
|
+
multipart-post (>= 1.2, < 3)
|
|
79
|
+
faraday-net_http (1.0.1)
|
|
80
|
+
faraday-net_http_persistent (1.2.0)
|
|
81
|
+
faraday-patron (1.0.0)
|
|
82
|
+
faraday-rack (1.0.0)
|
|
83
|
+
faraday-retry (1.0.3)
|
|
84
|
+
ffi (1.15.5)
|
|
85
|
+
ffi-compiler (1.0.1)
|
|
86
|
+
ffi (>= 1.0.0)
|
|
87
|
+
rake
|
|
88
|
+
git (1.11.0)
|
|
89
|
+
rchardet (~> 1.8)
|
|
90
|
+
gitlab (4.18.0)
|
|
91
|
+
httparty (~> 0.18)
|
|
92
|
+
terminal-table (>= 1.5.1)
|
|
93
|
+
gitlab-dangerfiles (2.11.0)
|
|
94
|
+
danger (>= 8.4.5)
|
|
95
|
+
danger-gitlab (>= 8.0.0)
|
|
96
|
+
gitlab-styles (6.2.1)
|
|
97
|
+
rubocop (~> 0.91, >= 0.91.1)
|
|
98
|
+
rubocop-gitlab-security (~> 0.1.1)
|
|
99
|
+
rubocop-performance (~> 1.9.2)
|
|
100
|
+
rubocop-rails (~> 2.9)
|
|
101
|
+
rubocop-rspec (~> 1.44)
|
|
102
|
+
hashdiff (1.0.1)
|
|
103
|
+
http (5.0.4)
|
|
104
|
+
addressable (~> 2.8)
|
|
105
|
+
http-cookie (~> 1.0)
|
|
106
|
+
http-form_data (~> 2.2)
|
|
107
|
+
llhttp-ffi (~> 0.4.0)
|
|
108
|
+
http-cookie (1.0.5)
|
|
109
|
+
domain_name (~> 0.5)
|
|
110
|
+
http-form_data (2.3.0)
|
|
111
|
+
httparty (0.20.0)
|
|
112
|
+
mime-types (~> 3.0)
|
|
113
|
+
multi_xml (>= 0.5.2)
|
|
114
|
+
i18n (1.10.0)
|
|
115
|
+
concurrent-ruby (~> 1.0)
|
|
116
|
+
jaro_winkler (1.5.4)
|
|
117
|
+
kramdown (2.4.0)
|
|
118
|
+
rexml
|
|
119
|
+
kramdown-parser-gfm (1.1.0)
|
|
120
|
+
kramdown (~> 2.0)
|
|
121
|
+
llhttp-ffi (0.4.0)
|
|
122
|
+
ffi-compiler (~> 1.0)
|
|
123
|
+
rake (~> 13.0)
|
|
124
|
+
method_source (1.0.0)
|
|
125
|
+
mime-types (3.4.1)
|
|
126
|
+
mime-types-data (~> 3.2015)
|
|
127
|
+
mime-types-data (3.2022.0105)
|
|
128
|
+
mini_portile2 (2.8.0)
|
|
129
|
+
minitest (5.15.0)
|
|
130
|
+
multi_xml (0.6.0)
|
|
131
|
+
multipart-post (2.1.1)
|
|
132
|
+
nap (1.1.0)
|
|
133
|
+
no_proxy_fix (0.1.2)
|
|
134
|
+
nokogiri (1.13.6)
|
|
135
|
+
mini_portile2 (~> 2.8.0)
|
|
136
|
+
racc (~> 1.4)
|
|
137
|
+
octokit (4.22.0)
|
|
138
|
+
faraday (>= 0.9)
|
|
139
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
|
140
|
+
open4 (1.3.4)
|
|
141
|
+
parallel (1.22.1)
|
|
142
|
+
parser (3.1.2.0)
|
|
143
|
+
ast (~> 2.4.1)
|
|
144
|
+
pry (0.14.1)
|
|
145
|
+
coderay (~> 1.1)
|
|
146
|
+
method_source (~> 1.0)
|
|
147
|
+
public_suffix (4.0.7)
|
|
148
|
+
racc (1.6.0)
|
|
149
|
+
rack (2.2.3)
|
|
150
|
+
rainbow (3.0.0)
|
|
151
|
+
rake (13.0.6)
|
|
152
|
+
rchardet (1.8.0)
|
|
153
|
+
regexp_parser (2.4.0)
|
|
154
|
+
reverse_markdown (2.1.1)
|
|
155
|
+
nokogiri
|
|
156
|
+
rexml (3.2.5)
|
|
157
|
+
rspec (3.11.0)
|
|
158
|
+
rspec-core (~> 3.11.0)
|
|
159
|
+
rspec-expectations (~> 3.11.0)
|
|
160
|
+
rspec-mocks (~> 3.11.0)
|
|
161
|
+
rspec-core (3.11.0)
|
|
162
|
+
rspec-support (~> 3.11.0)
|
|
163
|
+
rspec-expectations (3.11.0)
|
|
164
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
165
|
+
rspec-support (~> 3.11.0)
|
|
166
|
+
rspec-mocks (3.11.1)
|
|
167
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
168
|
+
rspec-support (~> 3.11.0)
|
|
169
|
+
rspec-support (3.11.0)
|
|
170
|
+
rubocop (0.93.1)
|
|
171
|
+
parallel (~> 1.10)
|
|
172
|
+
parser (>= 2.7.1.5)
|
|
173
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
174
|
+
regexp_parser (>= 1.8)
|
|
175
|
+
rexml
|
|
176
|
+
rubocop-ast (>= 0.6.0)
|
|
177
|
+
ruby-progressbar (~> 1.7)
|
|
178
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
179
|
+
rubocop-ast (1.18.0)
|
|
180
|
+
parser (>= 3.1.1.0)
|
|
181
|
+
rubocop-gitlab-security (0.1.1)
|
|
182
|
+
rubocop (>= 0.51)
|
|
183
|
+
rubocop-performance (1.9.2)
|
|
184
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
185
|
+
rubocop-ast (>= 0.4.0)
|
|
186
|
+
rubocop-rails (2.9.1)
|
|
187
|
+
activesupport (>= 4.2.0)
|
|
188
|
+
rack (>= 1.1)
|
|
189
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
190
|
+
rubocop-rspec (1.44.1)
|
|
191
|
+
rubocop (~> 0.87)
|
|
192
|
+
rubocop-ast (>= 0.7.1)
|
|
193
|
+
ruby-progressbar (1.11.0)
|
|
194
|
+
ruby2_keywords (0.0.5)
|
|
195
|
+
sawyer (0.8.2)
|
|
196
|
+
addressable (>= 2.3.5)
|
|
197
|
+
faraday (> 0.8, < 2.0)
|
|
198
|
+
solargraph (0.45.0)
|
|
199
|
+
backport (~> 1.2)
|
|
200
|
+
benchmark
|
|
201
|
+
bundler (>= 1.17.2)
|
|
202
|
+
diff-lcs (~> 1.4)
|
|
203
|
+
e2mmap
|
|
204
|
+
jaro_winkler (~> 1.5)
|
|
205
|
+
kramdown (~> 2.3)
|
|
206
|
+
kramdown-parser-gfm (~> 1.1)
|
|
207
|
+
parser (~> 3.0)
|
|
208
|
+
reverse_markdown (>= 1.0.5, < 3)
|
|
209
|
+
rubocop (>= 0.52)
|
|
210
|
+
thor (~> 1.0)
|
|
211
|
+
tilt (~> 2.0)
|
|
212
|
+
yard (~> 0.9, >= 0.9.24)
|
|
213
|
+
table_print (1.5.7)
|
|
214
|
+
terminal-table (3.0.2)
|
|
215
|
+
unicode-display_width (>= 1.1.1, < 3)
|
|
216
|
+
thor (1.2.1)
|
|
217
|
+
tilt (2.0.10)
|
|
218
|
+
tzinfo (2.0.4)
|
|
219
|
+
concurrent-ruby (~> 1.0)
|
|
220
|
+
unf (0.1.4)
|
|
221
|
+
unf_ext
|
|
222
|
+
unf_ext (0.0.8.2)
|
|
223
|
+
unicode-display_width (1.8.0)
|
|
224
|
+
webmock (3.7.0)
|
|
225
|
+
addressable (>= 2.3.6)
|
|
226
|
+
crack (>= 0.3.2)
|
|
227
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
|
228
|
+
webrick (1.7.0)
|
|
229
|
+
yard (0.9.27)
|
|
230
|
+
webrick (~> 1.7.0)
|
|
231
|
+
zeitwerk (2.5.4)
|
|
232
|
+
|
|
233
|
+
PLATFORMS
|
|
234
|
+
ruby
|
|
235
|
+
|
|
236
|
+
DEPENDENCIES
|
|
237
|
+
climate_control (~> 1.0.1)
|
|
238
|
+
gitlab-dangerfiles (~> 2.11)
|
|
239
|
+
gitlab-qa!
|
|
240
|
+
gitlab-styles (~> 6.2.1)
|
|
241
|
+
pry (~> 0.11)
|
|
242
|
+
rake (~> 13.0)
|
|
243
|
+
rspec (~> 3.7)
|
|
244
|
+
solargraph (~> 0.41)
|
|
245
|
+
webmock (= 3.7.0)
|
|
246
|
+
|
|
247
|
+
BUNDLED WITH
|
|
248
|
+
2.2.33
|
|
@@ -68,7 +68,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
|
|
|
68
68
|
| `QA_PRAEFECT_REPOSITORY_STORAGE` |- | The name of repository storage using Praefect. Note: Admin access is required to change repository storage. | No|
|
|
69
69
|
| `QA_COOKIES` |- | Optionally set to "cookie1=value;cookie2=value" in order to add a cookie to every request. This can be used to set the canary cookie by setting it to "gitlab_canary=true". | No|
|
|
70
70
|
| `QA_DEBUG` |- | Set to `true` to verbosely log page object actions. Note: if enabled be aware that sensitive data might be logged. If an input element has a QA selector with `password` in the name, data entered into the input element will be masked. If the element doesn't have `password` in its name it won't be masked. | No|
|
|
71
|
-
| `QA_LOG_PATH` |- | Path to output debug logging to.
|
|
71
|
+
| `QA_LOG_PATH` |- | Path to output debug logging to. By default `QA_ARTIFACTS_DIR` is used | No|
|
|
72
72
|
| `QA_CAN_TEST_GIT_PROTOCOL_V2` | `true` | Set to `false` to skip tests that require Git protocol v2 if your environment doesn't support it. | No|
|
|
73
73
|
| `QA_CAN_TEST_ADMIN_FEATURES` | `true` | Set to `false` to skip tests that require admin access. | No|
|
|
74
74
|
| `QA_CAN_TEST_PRAEFECT` | `true` | Set to `false` to skip tests that require Praefect to be running. | No|
|
|
@@ -651,23 +651,6 @@ $ export EE_LICENSE=$(cat /path/to/GitLab.gitlab_license)
|
|
|
651
651
|
$ gitlab-qa Test::Integration::Jira EE
|
|
652
652
|
```
|
|
653
653
|
|
|
654
|
-
### `Test::Integration::Actioncable CE|EE|<full image address>`
|
|
655
|
-
|
|
656
|
-
This tests the real-time assignees feature by setting
|
|
657
|
-
`actioncable['enable'] = true` in the Omnibus configuration
|
|
658
|
-
before starting the GitLab container.
|
|
659
|
-
|
|
660
|
-
To run tests against the GitLab container, a GitLab QA (`gitlab/gitlab-qa`)
|
|
661
|
-
container is spun up and tests are run from it by running the
|
|
662
|
-
`Test::Instance::All` scenario with the `--tag actioncable` RSpec parameter,
|
|
663
|
-
which runs only the tests with `:actioncable` metadata.
|
|
664
|
-
|
|
665
|
-
Example:
|
|
666
|
-
|
|
667
|
-
```
|
|
668
|
-
$ gitlab-qa Test::Integration::Actioncable CE
|
|
669
|
-
```
|
|
670
|
-
|
|
671
654
|
### `Test::Integration::Integrations CE|<full image address>`
|
|
672
655
|
|
|
673
656
|
This scenario is intended to test the different integrations that a GitLab instance can offer, such as WebHooks to an external service, Jenkins, etc.
|
|
@@ -729,6 +712,23 @@ in the GitLab project).
|
|
|
729
712
|
This is used to retrieve the version that staging is currently running.
|
|
730
713
|
This can be found in the shared 1Password vault.
|
|
731
714
|
|
|
715
|
+
- `GITLAB_USERNAME`: An existing user.
|
|
716
|
+
|
|
717
|
+
- `GITLAB_PASSWORD`: The user's password.
|
|
718
|
+
|
|
719
|
+
**Required by specific tests:**
|
|
720
|
+
|
|
721
|
+
- `QA_PRAEFECT_REPOSITORY_STORAGE`: The name of a Gitaly Cluster storage.
|
|
722
|
+
|
|
723
|
+
- `GITLAB_ADMIN_USERNAME`: An existing user with administrator access. Required by tests that set feature flags or
|
|
724
|
+
perform other admin actions.
|
|
725
|
+
|
|
726
|
+
- `GITLAB_ADMIN_PASSWORD`: The administrator user's password.
|
|
727
|
+
|
|
728
|
+
- `GITLAB_QA_USERNAME_X`: The username of a pre-generated test user, where `X` is `1` to `6`.
|
|
729
|
+
|
|
730
|
+
- `GITLAB_QA_PASSWORD_X`: The pre-generated test user's password.
|
|
731
|
+
|
|
732
732
|
**Optional environment variables:**
|
|
733
733
|
|
|
734
734
|
- `GITLAB_QA_DEV_ACCESS_TOKEN`: A valid personal access token for the
|
|
@@ -736,17 +736,24 @@ in the GitLab project).
|
|
|
736
736
|
This is used to pull the QA Docker image from the Omnibus GitLab `dev` Container Registry.
|
|
737
737
|
If the variable isn't present, the QA image from Docker Hub will be used.
|
|
738
738
|
This can be found in the shared 1Password vault.
|
|
739
|
+
Please note that this variable must be provided when you need to be sure the version of the
|
|
740
|
+
tests matches the version of GitLab on Staging. If the version from Docker Hub is used it might not include changes deployed to Staging very recently.
|
|
739
741
|
|
|
740
|
-
|
|
742
|
+
An example of how to run the smoke tests:
|
|
741
743
|
|
|
742
744
|
```
|
|
743
|
-
$ export GITLAB_QA_USER_AGENT="
|
|
744
|
-
$ export GITLAB_QA_ACCESS_TOKEN=
|
|
745
|
-
$ export GITLAB_QA_DEV_ACCESS_TOKEN=
|
|
745
|
+
$ export GITLAB_QA_USER_AGENT="<value from 1Password>"
|
|
746
|
+
$ export GITLAB_QA_ACCESS_TOKEN="<value from 1Password>"
|
|
747
|
+
$ export GITLAB_QA_DEV_ACCESS_TOKEN="<value from 1Password>"
|
|
746
748
|
$ export GITLAB_USERNAME="gitlab-qa"
|
|
747
|
-
$ export GITLAB_PASSWORD="
|
|
749
|
+
$ export GITLAB_PASSWORD="<value from 1Password>"
|
|
750
|
+
$ export GITLAB_ADMIN_USERNAME="<value from 1Password>"
|
|
751
|
+
$ export GITLAB_ADMIN_PASSWORD="<value from 1Password>"
|
|
752
|
+
$ export GITLAB_QA_USERNAME_1="gitlab-qa-user1"
|
|
753
|
+
$ export GITLAB_QA_PASSWORD_1="<value from 1Password>"
|
|
754
|
+
$ export QA_PRAEFECT_REPOSITORY_STORAGE="nfs-file22"
|
|
748
755
|
|
|
749
|
-
$ gitlab-qa Test::Instance::Staging
|
|
756
|
+
$ gitlab-qa Test::Instance::Staging -- --tag smoke
|
|
750
757
|
```
|
|
751
758
|
|
|
752
759
|
### `Test::Instance::StagingRef`
|
|
@@ -845,6 +852,52 @@ by setting `QA_COOKIES=gitlab_canary=true`. This adds a cookie
|
|
|
845
852
|
to all web requests which will result in them being routed
|
|
846
853
|
to the canary fleet.
|
|
847
854
|
|
|
855
|
+
**Required environment variables:**
|
|
856
|
+
|
|
857
|
+
- `GITLAB_QA_USER_AGENT`: The browser user-agent to use instead of the default Chrome user-agent.
|
|
858
|
+
This is needed for the automated tests to bypass the WAF
|
|
859
|
+
|
|
860
|
+
- `GITLAB_QA_ACCESS_TOKEN`: A valid personal access token with the `api` scope.
|
|
861
|
+
This is used to retrieve the version that staging is currently running.
|
|
862
|
+
This can be found in the shared 1Password vault.
|
|
863
|
+
|
|
864
|
+
- `GITLAB_USERNAME`: An existing user.
|
|
865
|
+
|
|
866
|
+
- `GITLAB_PASSWORD`: The user's password.
|
|
867
|
+
|
|
868
|
+
**Required by specific tests:**
|
|
869
|
+
|
|
870
|
+
- `GITLAB_QA_USERNAME_X`: The username of a pre-generated test user, where `X` is `1` to `6`.
|
|
871
|
+
|
|
872
|
+
- `GITLAB_QA_PASSWORD_X`: The pre-generated test user's password.
|
|
873
|
+
|
|
874
|
+
**Optional environment variables:**
|
|
875
|
+
|
|
876
|
+
- `GITLAB_QA_DEV_ACCESS_TOKEN`: A valid personal access token for the
|
|
877
|
+
`gitlab-qa-bot` on `dev.gitlab.org` with the `registry` scope.
|
|
878
|
+
This is used to pull the QA Docker image from the Omnibus GitLab `dev` Container Registry.
|
|
879
|
+
If the variable isn't present, the QA image from Docker Hub will be used.
|
|
880
|
+
This can be found in the shared 1Password vault.
|
|
881
|
+
Please note that this variable should be provided when you need to be sure the version of the
|
|
882
|
+
tests matches the version of GitLab on Staging. If the version from Docker Hub is used it might not include changes deployed to Staging very recently.
|
|
883
|
+
|
|
884
|
+
An example of how to run the smoke tests:
|
|
885
|
+
|
|
886
|
+
```
|
|
887
|
+
$ export GITLAB_QA_USER_AGENT="<value from 1Password>"
|
|
888
|
+
$ export GITLAB_QA_ACCESS_TOKEN="<value from 1Password>"
|
|
889
|
+
$ export GITLAB_QA_DEV_ACCESS_TOKEN="<value from 1Password>"
|
|
890
|
+
$ export GITLAB_USERNAME="gitlab-qa"
|
|
891
|
+
$ export GITLAB_PASSWORD="<value from 1Password>"
|
|
892
|
+
$ export GITLAB_QA_USERNAME_1="gitlab-qa-user1"
|
|
893
|
+
$ export GITLAB_QA_PASSWORD_1="<value from 1Password>"
|
|
894
|
+
$ export QA_CAN_TEST_GIT_PROTOCOL_V2="false"
|
|
895
|
+
$ export QA_CAN_TEST_ADMIN_FEATURES="false"
|
|
896
|
+
$ export QA_CAN_TEST_PRAEFECT="false"
|
|
897
|
+
|
|
898
|
+
$ gitlab-qa Test::Instance::Production -- --tag smoke
|
|
899
|
+
```
|
|
900
|
+
|
|
848
901
|
### `Test::Instance::Preprod`
|
|
849
902
|
|
|
850
903
|
This scenario functions the same as `Test::Instance::Staging`
|
|
@@ -155,7 +155,6 @@ module Gitlab
|
|
|
155
155
|
setup_omnibus
|
|
156
156
|
|
|
157
157
|
@docker.attach(name) do |line, wait|
|
|
158
|
-
puts line
|
|
159
158
|
# TODO, workaround which allows to detach from the container
|
|
160
159
|
break if /gitlab Reconfigured!/.match?(line)
|
|
161
160
|
end
|
|
@@ -174,11 +173,15 @@ module Gitlab
|
|
|
174
173
|
def process_exec_commands
|
|
175
174
|
@docker.copy(name, DATA_SEED_PATH, DATA_PATH) if seed_admin_token || seed_db
|
|
176
175
|
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
exec_commands << seed_admin_token_command if seed_admin_token
|
|
177
|
+
exec_commands << seed_test_data_command if seed_db
|
|
178
|
+
exec_commands << Runtime::Scenario.omnibus_exec_commands
|
|
179
|
+
|
|
180
|
+
commands = exec_commands.flatten.uniq
|
|
181
|
+
return if commands.empty?
|
|
179
182
|
|
|
180
183
|
Runtime::Logger.info("Running exec_commands...")
|
|
181
|
-
|
|
184
|
+
commands.each { |command| @docker.exec(name, command) }
|
|
182
185
|
end
|
|
183
186
|
|
|
184
187
|
def sha_version
|
|
@@ -11,7 +11,7 @@ module Gitlab
|
|
|
11
11
|
attr_accessor :suite, :release, :network, :args, :volumes, :env, :runner_network, :hostname
|
|
12
12
|
|
|
13
13
|
def initialize
|
|
14
|
-
@docker = Docker::Engine.new
|
|
14
|
+
@docker = Docker::Engine.new(stream_output: true) # stream test output directly instead of through logger
|
|
15
15
|
@volumes = {}
|
|
16
16
|
@env = {}
|
|
17
17
|
end
|
|
@@ -2,11 +2,17 @@ module Gitlab
|
|
|
2
2
|
module QA
|
|
3
3
|
module Docker
|
|
4
4
|
class Command
|
|
5
|
-
attr_reader :args
|
|
5
|
+
attr_reader :args, :stream_output
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
# Shell command
|
|
8
|
+
#
|
|
9
|
+
# @param [<String, Array>] cmd
|
|
10
|
+
# @param [<String, Array>] mask_secrets
|
|
11
|
+
# @param [Boolean] stream_output stream command output to stdout directly instead of logger
|
|
12
|
+
def initialize(cmd = nil, mask_secrets: nil, stream_output: false)
|
|
8
13
|
@args = Array(cmd)
|
|
9
14
|
@mask_secrets = Array(mask_secrets)
|
|
15
|
+
@stream_output = stream_output
|
|
10
16
|
end
|
|
11
17
|
|
|
12
18
|
def <<(*args)
|
|
@@ -7,6 +7,12 @@ module Gitlab
|
|
|
7
7
|
DOCKER_HOST = ENV['DOCKER_HOST'] || 'http://localhost'
|
|
8
8
|
PRIVILEGED_COMMANDS = [/^iptables.*/].freeze
|
|
9
9
|
|
|
10
|
+
attr_reader :stream_output
|
|
11
|
+
|
|
12
|
+
def initialize(stream_output: false)
|
|
13
|
+
@stream_output = stream_output
|
|
14
|
+
end
|
|
15
|
+
|
|
10
16
|
def hostname
|
|
11
17
|
URI(DOCKER_HOST).host
|
|
12
18
|
end
|
|
@@ -15,12 +21,17 @@ module Gitlab
|
|
|
15
21
|
Docker::Command.execute(%(login --username "#{username}" --password "#{password}" #{registry}), mask_secrets: password)
|
|
16
22
|
end
|
|
17
23
|
|
|
18
|
-
def pull(image:, tag: nil)
|
|
19
|
-
Docker::Command.
|
|
24
|
+
def pull(image:, tag: nil, quiet: true)
|
|
25
|
+
Docker::Command.new("pull").tap do |command|
|
|
26
|
+
command << "-q" if quiet
|
|
27
|
+
command << full_image_name(image, tag)
|
|
28
|
+
|
|
29
|
+
command.execute!
|
|
30
|
+
end
|
|
20
31
|
end
|
|
21
32
|
|
|
22
33
|
def run(image:, tag: nil, args: [])
|
|
23
|
-
Docker::Command.new('run').tap do |command|
|
|
34
|
+
Docker::Command.new('run', stream_output: stream_output).tap do |command|
|
|
24
35
|
yield command if block_given?
|
|
25
36
|
|
|
26
37
|
command << full_image_name(image, tag)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'open3'
|
|
2
4
|
require 'rainbow/refinement'
|
|
3
5
|
|
|
@@ -6,35 +8,57 @@ module Gitlab
|
|
|
6
8
|
module Docker
|
|
7
9
|
class Shellout
|
|
8
10
|
using Rainbow
|
|
11
|
+
|
|
9
12
|
StatusError = Class.new(StandardError)
|
|
10
13
|
|
|
11
14
|
def initialize(command)
|
|
12
15
|
@command = command
|
|
13
16
|
@output = []
|
|
14
|
-
|
|
15
|
-
Rainbow.enabled = Runtime::Env.colorized_logs?
|
|
16
|
-
Runtime::Logger.info("Docker shell command: `#{@command.mask_secrets}`".cyan)
|
|
17
|
+
@logger = Runtime::Logger.logger
|
|
17
18
|
end
|
|
18
19
|
|
|
20
|
+
attr_reader :command, :logger
|
|
21
|
+
|
|
19
22
|
def execute! # rubocop:disable Metrics/AbcSize
|
|
20
23
|
raise StatusError, 'Command already executed' if @output.any?
|
|
21
24
|
|
|
25
|
+
logger.info("Docker shell command: `#{@command.mask_secrets.cyan}`")
|
|
26
|
+
|
|
22
27
|
Open3.popen2e(@command.to_s) do |_in, out, wait|
|
|
23
28
|
out.each do |line|
|
|
24
29
|
@output.push(line)
|
|
25
30
|
|
|
26
|
-
if
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
if stream_progress
|
|
32
|
+
print "."
|
|
33
|
+
elsif command.stream_output
|
|
29
34
|
puts line
|
|
30
35
|
end
|
|
36
|
+
|
|
37
|
+
yield line, wait if block_given?
|
|
31
38
|
end
|
|
39
|
+
puts if stream_progress
|
|
32
40
|
|
|
33
|
-
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
|
34
|
-
|
|
41
|
+
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
|
42
|
+
logger.error("Docker shell command output:\n#{output}") unless command.stream_output
|
|
43
|
+
raise StatusError, "Docker command `#{@command.mask_secrets[0..100]}` failed! ✘"
|
|
35
44
|
end
|
|
45
|
+
|
|
46
|
+
logger.debug("Docker shell command output:\n#{output}") unless command.stream_output || output.empty?
|
|
36
47
|
end
|
|
37
48
|
|
|
49
|
+
output
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
# Stream only command execution progress and log output when command finished
|
|
55
|
+
#
|
|
56
|
+
# @return [Boolean]
|
|
57
|
+
def stream_progress
|
|
58
|
+
!(Runtime::Env.ci || command.stream_output)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def output
|
|
38
62
|
@output.join.chomp
|
|
39
63
|
end
|
|
40
64
|
end
|
|
@@ -114,6 +114,9 @@ module Gitlab
|
|
|
114
114
|
line.include?(File.basename(report['file_path']))
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
+
exception['message'].gsub!(/(private_token=)[\w-]+/, '********')
|
|
118
|
+
exception['message_lines'].each { |line| line.gsub!(/(private_token=)([\w-]+)/, '********') }
|
|
119
|
+
|
|
117
120
|
{
|
|
118
121
|
'message' => "#{exception['class']}: #{exception['message']}",
|
|
119
122
|
'message_lines' => exception['message_lines'],
|
|
@@ -145,6 +148,7 @@ module Gitlab
|
|
|
145
148
|
|
|
146
149
|
private
|
|
147
150
|
|
|
151
|
+
# rubocop:disable Metrics/AbcSize
|
|
148
152
|
def failures_from_exceptions
|
|
149
153
|
failures = report.search('failure')
|
|
150
154
|
return [] if failures.empty?
|
|
@@ -155,12 +159,15 @@ module Gitlab
|
|
|
155
159
|
line.include?(File.basename(report['file']))
|
|
156
160
|
end
|
|
157
161
|
|
|
162
|
+
exception['message'].gsub!(/(private_token=)[\w-]+/, '********')
|
|
163
|
+
|
|
158
164
|
{
|
|
159
165
|
'message' => "#{exception['type']}: #{exception['message']}",
|
|
160
166
|
'stacktrace' => trace.slice(0..spec_file_first_index).join("\n")
|
|
161
167
|
}
|
|
162
168
|
end
|
|
163
169
|
end
|
|
170
|
+
# rubocop:enable Metrics/AbcSize
|
|
164
171
|
end
|
|
165
172
|
end
|
|
166
173
|
end
|
|
@@ -27,7 +27,6 @@ module Gitlab
|
|
|
27
27
|
'QA_COOKIES' => :qa_cookie,
|
|
28
28
|
'QA_DEBUG' => :qa_debug,
|
|
29
29
|
'QA_DEFAULT_BRANCH' => :qa_default_branch,
|
|
30
|
-
'QA_LOG_PATH' => :qa_log_path,
|
|
31
30
|
'QA_CAN_TEST_ADMIN_FEATURES' => :qa_can_test_admin_features,
|
|
32
31
|
'QA_CAN_TEST_GIT_PROTOCOL_V2' => :qa_can_test_git_protocol_v2,
|
|
33
32
|
'QA_CAN_TEST_PRAEFECT' => :qa_can_test_praefect,
|
|
@@ -168,6 +167,14 @@ module Gitlab
|
|
|
168
167
|
enabled?(ENV['QA_DEBUG'], default: true)
|
|
169
168
|
end
|
|
170
169
|
|
|
170
|
+
def log_level
|
|
171
|
+
env_var_value_if_defined('QA_LOG_LEVEL')&.upcase || 'INFO'
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def log_path
|
|
175
|
+
env_var_value_if_defined('QA_LOG_PATH') || host_artifacts_dir
|
|
176
|
+
end
|
|
177
|
+
|
|
171
178
|
def default_branch
|
|
172
179
|
env_var_value_if_defined('QA_DEFAULT_BRANCH') || 'main'
|
|
173
180
|
end
|
|
@@ -11,7 +11,12 @@ module Gitlab
|
|
|
11
11
|
def_delegators :logger, :debug, :info, :warn, :error, :fatal, :unknown
|
|
12
12
|
|
|
13
13
|
def self.logger
|
|
14
|
-
@logger ||=
|
|
14
|
+
@logger ||= begin
|
|
15
|
+
log_path = Env.log_path
|
|
16
|
+
::FileUtils.mkdir_p(log_path) unless File.exist?(log_path)
|
|
17
|
+
|
|
18
|
+
TestLogger.logger(level: Env.debug? ? "DEBUG" : Env.log_level, path: log_path)
|
|
19
|
+
end
|
|
15
20
|
end
|
|
16
21
|
end
|
|
17
22
|
end
|
|
@@ -22,7 +22,8 @@ module Gitlab
|
|
|
22
22
|
"gitlab-psql -c 'create database gitlabhq_production_ci owner gitlab'",
|
|
23
23
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension btree_gist'",
|
|
24
24
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension pg_trgm'",
|
|
25
|
-
"gitlab-rake db:structure:load:ci"
|
|
25
|
+
"gitlab-rake db:structure:load:ci",
|
|
26
|
+
"gitlab-ctl restart"
|
|
26
27
|
].freeze
|
|
27
28
|
end
|
|
28
29
|
end
|
|
@@ -5,21 +5,19 @@ module Gitlab
|
|
|
5
5
|
module Runtime
|
|
6
6
|
module OmnibusConfigurations
|
|
7
7
|
class ObjectStorage < Default
|
|
8
|
-
TYPES = %w[artifacts external_diffs lfs uploads packages dependency_proxy].freeze
|
|
8
|
+
TYPES = %w[artifacts external_diffs lfs uploads packages dependency_proxy terraform_state pages].freeze
|
|
9
9
|
|
|
10
10
|
def configuration
|
|
11
|
-
TYPES.each_with_object(+'') do |object_type, omnibus|
|
|
11
|
+
config = TYPES.each_with_object(+'') do |object_type, omnibus|
|
|
12
12
|
omnibus << <<~OMNIBUS
|
|
13
|
-
gitlab_rails['#{object_type}
|
|
14
|
-
gitlab_rails['#{object_type}_storage_path'] = '/var/opt/gitlab/gitlab-rails/shared/#{object_type}'
|
|
15
|
-
gitlab_rails['#{object_type}_object_store_enabled'] = true
|
|
16
|
-
gitlab_rails['#{object_type}_object_store_remote_directory'] = '#{object_type}-bucket'
|
|
17
|
-
gitlab_rails['#{object_type}_object_store_background_upload'] = false
|
|
18
|
-
gitlab_rails['#{object_type}_object_store_direct_upload'] = true
|
|
19
|
-
gitlab_rails['#{object_type}_object_store_proxy_download'] = true
|
|
20
|
-
gitlab_rails['#{object_type}_object_store_connection'] = #{minio.to_config}
|
|
13
|
+
gitlab_rails['object_store']['objects']['#{object_type}']['bucket'] = '#{object_type}-bucket'
|
|
21
14
|
OMNIBUS
|
|
22
15
|
end
|
|
16
|
+
config << <<~OMNIBUS
|
|
17
|
+
gitlab_rails['object_store']['enabled'] = true
|
|
18
|
+
gitlab_rails['object_store']['proxy_download'] = true
|
|
19
|
+
gitlab_rails['object_store']['connection'] = #{minio.to_config}
|
|
20
|
+
OMNIBUS
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
def prepare
|
|
@@ -13,6 +13,7 @@ module Gitlab
|
|
|
13
13
|
gitlab.release = release
|
|
14
14
|
gitlab.network = 'test'
|
|
15
15
|
gitlab.name = 'gitlab'
|
|
16
|
+
gitlab.seed_admin_token = false
|
|
16
17
|
sign_url_key_path = gitlab.copy_key_file('GOOGLE_CDN_SIGNURL_KEY')
|
|
17
18
|
cdn_gcloud_path = gitlab.copy_key_file('GOOGLE_CDN_JSON_KEY')
|
|
18
19
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'logger'
|
|
4
3
|
require 'rainbow'
|
|
4
|
+
require 'active_support/logger'
|
|
5
5
|
|
|
6
6
|
module Gitlab
|
|
7
7
|
module QA
|
|
8
8
|
# Common test logger implementation
|
|
9
9
|
#
|
|
10
10
|
class TestLogger
|
|
11
|
+
TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
|
|
11
12
|
LEVEL_COLORS = {
|
|
12
13
|
"DEBUG" => :magenta,
|
|
13
14
|
"INFO" => :green,
|
|
@@ -18,17 +19,62 @@ module Gitlab
|
|
|
18
19
|
|
|
19
20
|
Rainbow.enabled = Runtime::Env.colorized_logs?
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
class << self
|
|
23
|
+
# Combined logger instance
|
|
24
|
+
#
|
|
25
|
+
# @param [<Symbol, String>] level
|
|
26
|
+
# @param [String] source
|
|
27
|
+
# @return [ActiveSupport::Logger]
|
|
28
|
+
def logger(level: :info, source: 'Gitlab QA', path: 'tmp')
|
|
29
|
+
console_log = console_logger(level: level, source: source)
|
|
30
|
+
file_log = file_logger(source: source, path: path)
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
console_log.extend(ActiveSupport::Logger.broadcast(file_log))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# Console logger instance
|
|
38
|
+
#
|
|
39
|
+
# @param [<Symbol, String>] level
|
|
40
|
+
# @param [String] source
|
|
41
|
+
# @return [ActiveSupport::Logger]
|
|
42
|
+
def console_logger(level:, source:)
|
|
43
|
+
ActiveSupport::Logger.new($stdout, level: level, datetime_format: TIME_FORMAT).tap do |logger|
|
|
44
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
|
45
|
+
msg_prefix = message_prefix(datetime, source, severity)
|
|
46
|
+
|
|
47
|
+
Rainbow(msg_prefix).public_send(LEVEL_COLORS.fetch(severity, :silver)) + "#{msg}\n" # rubocop:disable GitlabSecurity/PublicSend
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# File logger
|
|
53
|
+
#
|
|
54
|
+
# @param [String] source
|
|
55
|
+
# @param [String] path
|
|
56
|
+
# @return [ActiveSupport::Logger]
|
|
57
|
+
def file_logger(source:, path:)
|
|
58
|
+
log_file = "#{path}/#{source.downcase.tr(' ', '-')}.log"
|
|
59
|
+
|
|
60
|
+
ActiveSupport::Logger.new(log_file, level: :debug, datetime_format: TIME_FORMAT).tap do |logger|
|
|
61
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
|
62
|
+
msg_prefix = message_prefix(datetime, source, severity)
|
|
28
63
|
|
|
29
|
-
|
|
64
|
+
"#{msg_prefix}#{msg}\n"
|
|
65
|
+
end
|
|
30
66
|
end
|
|
31
67
|
end
|
|
68
|
+
|
|
69
|
+
# Log message prefix
|
|
70
|
+
#
|
|
71
|
+
# @param [DateTime] date
|
|
72
|
+
# @param [String] source
|
|
73
|
+
# @param [String] severity
|
|
74
|
+
# @return [String]
|
|
75
|
+
def message_prefix(date, source, severity)
|
|
76
|
+
"[date=#{date} from=#{source}] #{severity.ljust(5)} -- "
|
|
77
|
+
end
|
|
32
78
|
end
|
|
33
79
|
end
|
|
34
80
|
end
|
data/lib/gitlab/qa/version.rb
CHANGED
data/lib/gitlab/qa.rb
CHANGED
|
@@ -55,7 +55,6 @@ module Gitlab
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
module Integration
|
|
58
|
-
autoload :Actioncable, 'gitlab/qa/scenario/test/integration/actioncable'
|
|
59
58
|
autoload :Geo, 'gitlab/qa/scenario/test/integration/geo'
|
|
60
59
|
autoload :LDAP, 'gitlab/qa/scenario/test/integration/ldap'
|
|
61
60
|
autoload :LDAPNoTLS, 'gitlab/qa/scenario/test/integration/ldap_no_tls'
|
data/scripts/generate-qa-jobs.rb
CHANGED
|
@@ -34,7 +34,6 @@ class GenerateQAJobs
|
|
|
34
34
|
jobs.concat(load_yml_contents('object_storage_registry_tls')) if should_run?('test_integration_registrytls')
|
|
35
35
|
jobs.concat(load_yml_contents('registry')) if should_run?('test_integration_registry')
|
|
36
36
|
jobs.concat(load_yml_contents('packages')) if should_run?('test_instance_all_packages')
|
|
37
|
-
jobs.concat(load_yml_contents('actioncable')) if should_run?('test_instance_all_actioncable')
|
|
38
37
|
jobs.concat(load_yml_contents('elasticsearch')) if should_run?('test_integration_elasticsearch')
|
|
39
38
|
jobs.concat(load_yml_contents('praefect')) if should_run?('test_instance_all')
|
|
40
39
|
jobs.concat(load_yml_contents('gitaly_cluster')) if should_run?('test_instance_all')
|
data/tmp/.gitignore
ADDED
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: 7.
|
|
4
|
+
version: 7.29.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- GitLab Quality
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-05-
|
|
11
|
+
date: 2022-05-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: climate_control
|
|
@@ -218,7 +218,6 @@ files:
|
|
|
218
218
|
- ".dockerignore"
|
|
219
219
|
- ".gitignore"
|
|
220
220
|
- ".gitlab-ci.yml"
|
|
221
|
-
- ".gitlab/ci/jobs/actioncable.gitlab-ci.yml"
|
|
222
221
|
- ".gitlab/ci/jobs/base.gitlab-ci.yml"
|
|
223
222
|
- ".gitlab/ci/jobs/ci_decomposition.gitlab-ci.yml"
|
|
224
223
|
- ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
|
|
@@ -265,6 +264,7 @@ files:
|
|
|
265
264
|
- CONTRIBUTING.md
|
|
266
265
|
- Dangerfile
|
|
267
266
|
- Gemfile
|
|
267
|
+
- Gemfile.lock
|
|
268
268
|
- LICENSE
|
|
269
269
|
- README.md
|
|
270
270
|
- Rakefile
|
|
@@ -364,7 +364,6 @@ files:
|
|
|
364
364
|
- lib/gitlab/qa/scenario/test/instance/staging_geo.rb
|
|
365
365
|
- lib/gitlab/qa/scenario/test/instance/staging_ref.rb
|
|
366
366
|
- lib/gitlab/qa/scenario/test/instance/staging_ref_geo.rb
|
|
367
|
-
- lib/gitlab/qa/scenario/test/integration/actioncable.rb
|
|
368
367
|
- lib/gitlab/qa/scenario/test/integration/client_ssl.rb
|
|
369
368
|
- lib/gitlab/qa/scenario/test/integration/elasticsearch.rb
|
|
370
369
|
- lib/gitlab/qa/scenario/test/integration/geo.rb
|
|
@@ -411,6 +410,7 @@ files:
|
|
|
411
410
|
- tls_certificates/gitlab/gitlab.test.crt
|
|
412
411
|
- tls_certificates/gitlab/gitlab.test.csr
|
|
413
412
|
- tls_certificates/gitlab/gitlab.test.key
|
|
413
|
+
- tmp/.gitignore
|
|
414
414
|
homepage: http://about.gitlab.com/
|
|
415
415
|
licenses:
|
|
416
416
|
- MIT
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
ce:actioncable:
|
|
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
|
-
variables:
|
|
9
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
|
10
|
-
|
|
11
|
-
ce:actioncable-quarantine:
|
|
12
|
-
extends:
|
|
13
|
-
- .rules:ce-never-when-triggered-by-feature-flag-definition-change
|
|
14
|
-
- .test
|
|
15
|
-
- .high-capacity
|
|
16
|
-
- .ce-variables
|
|
17
|
-
- .quarantine
|
|
18
|
-
- .rspec-report-opts
|
|
19
|
-
variables:
|
|
20
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
|
21
|
-
|
|
22
|
-
ee:actioncable:
|
|
23
|
-
extends:
|
|
24
|
-
- .rules:ee-never-when-triggered-by-feature-flag-definition-change
|
|
25
|
-
- .test
|
|
26
|
-
- .high-capacity
|
|
27
|
-
- .ee-variables
|
|
28
|
-
- .rspec-report-opts
|
|
29
|
-
variables:
|
|
30
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
|
31
|
-
|
|
32
|
-
ee:actioncable-quarantine:
|
|
33
|
-
extends:
|
|
34
|
-
- .rules:ee-never-when-triggered-by-feature-flag-definition-change
|
|
35
|
-
- .test
|
|
36
|
-
- .high-capacity
|
|
37
|
-
- .ee-variables
|
|
38
|
-
- .quarantine
|
|
39
|
-
- .rspec-report-opts
|
|
40
|
-
variables:
|
|
41
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
module Gitlab
|
|
2
|
-
module QA
|
|
3
|
-
module Scenario
|
|
4
|
-
module Test
|
|
5
|
-
module Integration
|
|
6
|
-
class Actioncable < Scenario::Template
|
|
7
|
-
def perform(release, *rspec_args)
|
|
8
|
-
Component::Gitlab.perform do |gitlab|
|
|
9
|
-
gitlab.release = QA::Release.new(release)
|
|
10
|
-
gitlab.name = 'gitlab-actioncable'
|
|
11
|
-
gitlab.network = 'test'
|
|
12
|
-
gitlab.omnibus_configuration << "actioncable['enable'] = true"
|
|
13
|
-
|
|
14
|
-
gitlab.instance do
|
|
15
|
-
Runtime::Logger.info('Running actioncable specs!')
|
|
16
|
-
|
|
17
|
-
rspec_args << "--" unless rspec_args.include?('--')
|
|
18
|
-
rspec_args << %w[--tag actioncable]
|
|
19
|
-
|
|
20
|
-
Component::Specs.perform do |specs|
|
|
21
|
-
specs.suite = 'Test::Instance::All'
|
|
22
|
-
specs.release = gitlab.release
|
|
23
|
-
specs.network = gitlab.network
|
|
24
|
-
specs.args = [gitlab.address, *rspec_args]
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|