gitlab-qa 7.27.2 → 7.29.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/.gitlab/ci/jobs/ci_decomposition.gitlab-ci.yml +0 -2
- data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -4
- data/Gemfile.lock +248 -0
- data/docs/what_tests_can_be_run.md +1 -1
- data/lib/gitlab/qa/component/base.rb +1 -2
- data/lib/gitlab/qa/component/gitlab.rb +7 -5
- data/lib/gitlab/qa/docker/engine.rb +7 -2
- data/lib/gitlab/qa/docker/shellout.rb +19 -10
- data/lib/gitlab/qa/runtime/env.rb +8 -1
- data/lib/gitlab/qa/runtime/logger.rb +9 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/ci_decomposition.rb +2 -1
- data/lib/gitlab/qa/test_logger.rb +54 -8
- data/lib/gitlab/qa/version.rb +1 -1
- data/tmp/.gitignore +3 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d4ca3feba042298fe467133b5f576653b553af61ac01a0b72a1a970917e3711
|
|
4
|
+
data.tar.gz: 61ee29dbe4355bcbc18d8e164b97f1453c461419fcf6bd70543a659e5029d333
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5ddff780b5188c489bec89ce0b475096ac707f9e2e5138cc400efeef9fbd576b4c5bebc77f43af207109503e08e1c1efaf2813e3666bd9d88d5807f7c9691891
|
|
7
|
+
data.tar.gz: 34b7eacbd20c81f264aaf478f35e9ed78d5c7e185b18178bd55fa1c5fc37b0053f54bd49027d994cf91d6d69120c3371fdb818727419c17ef10ea7f373a4c91d
|
data/.gitignore
CHANGED
|
@@ -10,7 +10,6 @@ ce:ci_decomposition:
|
|
|
10
10
|
parallel: 5
|
|
11
11
|
variables:
|
|
12
12
|
GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config ci_decomposition"
|
|
13
|
-
allow_failure: true # https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/1329
|
|
14
13
|
|
|
15
14
|
ee:ci_decomposition:
|
|
16
15
|
extends:
|
|
@@ -24,4 +23,3 @@ ee:ci_decomposition:
|
|
|
24
23
|
parallel: 5
|
|
25
24
|
variables:
|
|
26
25
|
GITLAB_QA_OPTIONS_COMBINED: "$GITLAB_QA_OPTIONS --omnibus-config ci_decomposition"
|
|
27
|
-
allow_failure: true # https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/1329
|
|
@@ -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/Gemfile.lock
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
gitlab-qa (7.29.0)
|
|
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.1)
|
|
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|
|
|
@@ -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,12 +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
|
-
|
|
179
|
-
|
|
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?
|
|
180
182
|
|
|
181
183
|
Runtime::Logger.info("Running exec_commands...")
|
|
182
|
-
|
|
184
|
+
commands.each { |command| @docker.exec(name, command) }
|
|
183
185
|
end
|
|
184
186
|
|
|
185
187
|
def sha_version
|
|
@@ -15,8 +15,13 @@ module Gitlab
|
|
|
15
15
|
Docker::Command.execute(%(login --username "#{username}" --password "#{password}" #{registry}), mask_secrets: password)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def pull(image:, tag: nil)
|
|
19
|
-
Docker::Command.
|
|
18
|
+
def pull(image:, tag: nil, quiet: true)
|
|
19
|
+
Docker::Command.new("pull").tap do |command|
|
|
20
|
+
command << "-q" if quiet
|
|
21
|
+
command << full_image_name(image, tag)
|
|
22
|
+
|
|
23
|
+
command.execute!
|
|
24
|
+
end
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
def run(image:, tag: nil, args: [])
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'open3'
|
|
2
4
|
require 'rainbow/refinement'
|
|
3
5
|
|
|
@@ -6,35 +8,42 @@ 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
|
|
|
19
20
|
def execute! # rubocop:disable Metrics/AbcSize
|
|
20
21
|
raise StatusError, 'Command already executed' if @output.any?
|
|
21
22
|
|
|
23
|
+
@logger.info("Docker shell command: `#{@command.mask_secrets}`".cyan)
|
|
24
|
+
|
|
22
25
|
Open3.popen2e(@command.to_s) do |_in, out, wait|
|
|
23
26
|
out.each do |line|
|
|
24
27
|
@output.push(line)
|
|
25
|
-
|
|
26
|
-
if block_given?
|
|
27
|
-
yield line, wait
|
|
28
|
-
else
|
|
29
|
-
puts line
|
|
30
|
-
end
|
|
28
|
+
print "." unless Runtime::Env.ci # indicate progress for local run
|
|
29
|
+
yield line, wait if block_given?
|
|
31
30
|
end
|
|
31
|
+
puts unless Runtime::Env.ci # add newline after progress dots
|
|
32
32
|
|
|
33
|
-
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
|
33
|
+
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
|
34
|
+
@logger.error("Docker shell command output:\n#{output}")
|
|
34
35
|
raise StatusError, "Docker command `#{@command.mask_secrets}` failed! ✘"
|
|
35
36
|
end
|
|
37
|
+
|
|
38
|
+
@logger.debug("Docker shell command output:\n#{output}") unless output.empty?
|
|
36
39
|
end
|
|
37
40
|
|
|
41
|
+
output
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def output
|
|
38
47
|
@output.join.chomp
|
|
39
48
|
end
|
|
40
49
|
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,15 @@ 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 = Runtime::Env.log_path
|
|
16
|
+
FileUtils.mkdir_p(log_path) unless File.exist?(log_path)
|
|
17
|
+
|
|
18
|
+
QA::TestLogger.logger(
|
|
19
|
+
level: Runtime::Env.debug? ? "DEBUG" : Runtime::Env.log_level,
|
|
20
|
+
path: log_path
|
|
21
|
+
)
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
end
|
|
17
25
|
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
|
|
@@ -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/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.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: 2022-05-
|
|
11
|
+
date: 2022-05-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: climate_control
|
|
@@ -264,6 +264,7 @@ files:
|
|
|
264
264
|
- CONTRIBUTING.md
|
|
265
265
|
- Dangerfile
|
|
266
266
|
- Gemfile
|
|
267
|
+
- Gemfile.lock
|
|
267
268
|
- LICENSE
|
|
268
269
|
- README.md
|
|
269
270
|
- Rakefile
|
|
@@ -409,6 +410,7 @@ files:
|
|
|
409
410
|
- tls_certificates/gitlab/gitlab.test.crt
|
|
410
411
|
- tls_certificates/gitlab/gitlab.test.csr
|
|
411
412
|
- tls_certificates/gitlab/gitlab.test.key
|
|
413
|
+
- tmp/.gitignore
|
|
412
414
|
homepage: http://about.gitlab.com/
|
|
413
415
|
licenses:
|
|
414
416
|
- MIT
|