-
Notifications
You must be signed in to change notification settings - Fork 0
/
tox.ini
282 lines (252 loc) · 9.1 KB
/
tox.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
[tox]
minversion = 4.0.0
# specify virtualenv here to keep local runs consistent with the
# gate (it sets the versions of pip, setuptools, and wheel)
requires = virtualenv>=20.17.1
# this allows tox to infer the base python from the environment name
# and override any basepython configured in this file
ignore_basepython_conflict=true
envlist = py3,compliance,pep8
[testenv]
usedevelop = true
setenv =
VIRTUAL_ENV={envdir}
OS_STDOUT_CAPTURE=1
OS_STDERR_CAPTURE=1
OS_TEST_TIMEOUT=60
OS_TEST_PATH=./cinder/tests/unit
PYTHONDONTWRITEBYTECODE=1
# TODO(stephenfin): Remove once we bump our upper-constraint to SQLAlchemy 2.0
SQLALCHEMY_WARN_20=1
# this environment's install command is used if the 'minversion' or 'requires'
# values declared above in the [tox] section require tox to update itself, so
# we don't define a non-default install_command here
deps =
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
# By default stestr will set concurrency
# to ncpu, to specify something else use
# the concurrency=<n> option.
# call ie: 'tox -epy27 -- --concurrency=4'
commands =
stestr run --random {posargs}
stestr slowest
allowlist_externals =
find
passenv =
*_proxy
*_PROXY
[testenv:py{3,38,39,310,311}]
# NOTE: Do not move the constraints from the install_command into deps, as that
# may result in tox using unconstrained/untested dependencies.
# We use "usedevelop = True" for tox jobs (except bindep), so tox does 2
# install calls, one for the deps and another for the cinder source code
# as editable (pip -e).
# Without the constraints in the install_command only the first
# installation will honor the upper constraints, and the second install
# for cinder itself will not know about the constraints which can result
# in installing versions we don't want.
# With constraints in the install_command tox will always honor our
# constraints.
install_command =
python -m pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2023.1} {opts} {packages}
[testenv:functional]
install_command = {[testenv:py3]install_command}
setenv =
OS_TEST_PATH = ./cinder/tests/functional
[testenv:functional-py{3,38,39,310,311}]
install_command = {[testenv:functional]install_command}
setenv =
{[testenv:functional]setenv}
[testenv:api-samples]
install_command = {[testenv:functional]install_command}
envdir = {toxworkdir}/shared
setenv =
GENERATE_SAMPLES=True
PYTHONHASHSEED=0
commands =
find . -ignore_readdir_race -type f -name "*.pyc" -delete
stestr --test-path=./cinder/tests/functional/api_sample_tests run {posargs}
stestr slowest
[testenv:compliance]
install_command = {[testenv:py3]install_command}
setenv =
OS_TEST_PATH = ./cinder/tests/compliance
[testenv:pep8]
allowlist_externals =
{toxinidir}/tools/config/check_uptodate.sh
{toxinidir}/tools/check_exec.py
commands =
flake8 {posargs} .
doc8
{toxinidir}/tools/config/check_uptodate.sh
{toxinidir}/tools/check_exec.py {toxinidir}/cinder {toxinidir}/doc/source/ {toxinidir}/releasenotes/notes
[testenv:fast8]
# Use same environment directory as pep8 env to save space and install time
envdir = {toxworkdir}/pep8
install_command = {[testenv:py3]install_command}
allowlist_externals =
{toxinidir}/tools/fast8.sh
commands =
{toxinidir}/tools/fast8.sh
passenv = FAST8_NUM_COMMITS
[testenv:pylint]
allowlist_externals =
{toxinidir}/tools/coding-checks.sh
install_command = {[testenv:py3]install_command}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
pylint==2.13.4
commands =
{toxinidir}/tools/coding-checks.sh --pylint {posargs:all}
[testenv:cover]
# Also do not run test_coverage_ext tests while gathering coverage as those
# tests conflict with coverage.
install_command = {[testenv:py3]install_command}
setenv =
{[testenv]setenv}
PYTHON=coverage run --source cinder --parallel-mode
commands =
stestr run {posargs}
coverage combine
coverage html -d cover
coverage xml -o cover/coverage.xml
[testenv:genconfig]
install_command = {[testenv:py3]install_command}
sitepackages = False
envdir = {toxworkdir}/pep8
commands = oslo-config-generator --config-file=tools/config/cinder-config-generator.conf
[testenv:genpolicy]
install_command = {[testenv:py3]install_command}
commands = oslopolicy-sample-generator --config-file=tools/config/cinder-policy-generator.conf
[testenv:genopts]
install_command = {[testenv:py3]install_command}
sitepackages = False
envdir = {toxworkdir}/pep8
commands = python tools/config/generate_cinder_opts.py
[testenv:venv]
install_command = {[testenv:py3]install_command}
deps =
{[testenv]deps}
reno
commands = {posargs}
[testenv:docs]
# we intentionally put the constraints in the install_command, not the
# deps ... see comment near the top of this file
install_command =
python -m pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2023.1} {opts} {packages}
allowlist_externals = rm
deps =
doc8
-r{toxinidir}/doc/requirements.txt
commands =
doc8
rm -rf doc/source/contributor/api doc/build/html doc/build/doctrees
sphinx-build -W -j auto -b html -d doc/build/doctrees doc/source doc/build/html
# Test the redirects. This must run after the main docs build
whereto doc/build/html/.htaccess doc/test/redirect-tests.txt
[testenv:pdf-docs]
install_command = {[testenv:docs]install_command}
deps = {[testenv:docs]deps}
commands =
rm -fr doc/source/contributor/api/
rm -fr doc/build/pdf
sphinx-build -W -b latex doc/source doc/build/pdf
make -C doc/build/pdf
allowlist_externals =
make
rm
[testenv:api-ref]
install_command = {[testenv:docs]install_command}
allowlist_externals = rm
deps = {[testenv:docs]deps}
commands =
rm -rf api-ref/build
sphinx-build -W -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html/
[testenv:releasenotes]
install_command = {[testenv:docs]install_command}
deps = {[testenv:docs]deps}
commands = sphinx-build -a -E -W -j auto -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[testenv:gendriverlist]
install_command = {[testenv:py3]install_command}
sitepackages = False
envdir = {toxworkdir}/venv
commands = python {toxinidir}/tools/generate_driver_list.py
[testenv:bandit]
install_command = {[testenv:py3]install_command}
deps = -r{toxinidir}/test-requirements.txt
bandit==1.6.0
commands = bandit -r cinder -n5 -x cinder/tests/* -ll
[testenv:bandit-baseline]
install_command = {[testenv:bandit]install_command}
deps = bandit==1.6.0
envdir = {toxworkdir}/bandit
commands = bandit-baseline -r cinder -n5 -x cinder/tests/* -ii -ll
[testenv:bindep]
# Do not install any requirements. We want this to be fast and work even if
# system dependencies are missing, since it's used to tell you what system
# dependencies are missing! This also means that bindep must be installed
# separately, outside of the requirements files, and develop mode disabled
# explicitly to avoid unnecessarily installing the checked-out repo too
skip_install = True
deps = bindep
commands = bindep {posargs}
usedevelop = False
[testenv:mypy]
description =
Run type checks.
setenv =
OS_MYPY_OPTS=--install-types --non-interactive
install_command = {[testenv:py3]install_command}
allowlist_externals =
{toxinidir}/tools/mypywrap.sh
commands =
{toxinidir}/tools/mypywrap.sh {posargs}
[flake8]
# Following checks are ignored on purpose.
#
# E251 unexpected spaces around keyword / parameter equals
# reason: no improvement in readability
#
# E402 module level import not at top of file
# reason: there are numerous places where we import modules
# later for legitimate reasons
#
# W503 line break before binary operator
# reason: pep8 itself is not sure about this one and
# reversed this rule in 2016
# W504 line break after binary operator
# reason: no agreement on this being universally
# preferable for our code. Disabled to keep checking
# tools from getting in our way with regards to this.
# H101 include name with TODO
# reason: no real benefit
# G200 Logging statements should not include the exception
# reason: Many existing cases of this that may be legitimate
ignore = E251,E402,W503,W504,H101,G200
# H904 Delay string interpolations at logging calls.
enable-extensions = H106,H203,H904
exclude = .git,.venv,.tox,dist,tools,doc/ext,*egg,build
max-complexity = 30
application-import-names = cinder
import-order-style = pep8
[flake8:local-plugins]
extension =
N322 = checks:no_mutable_default_args
N323 = checks:check_explicit_underscore_import
C301 = checks:check_datetime_now
C303 = checks:check_no_print_statements
C306 = checks:check_timeutils_strtime
C308 = checks:check_timeutils_isotime
C309 = checks:no_test_log
C310 = checks:CheckLoggingFormatArgs
C311 = checks:CheckOptRegistrationArgs
C312 = checks:no_translate_logs
C313 = checks:validate_assertTrue
C336 = checks:dict_constructor_with_list_copy
C337 = checks:no_third_party_mock
C338 = checks:no_log_warn
paths = ./cinder/tests/hacking
[doc8]
ignore-path=.tox,*.egg-info,doc/src/api,doc/source/drivers.rst,doc/build,.eggs,doc/source/configuration/tables,./*.txt,releasenotes,doc/source/contributor/api,doc/test
extension=.txt,.rst,.inc