summaryrefslogtreecommitdiff
path: root/tox.ini
blob: 95d07102d6dc5650feb451eb731db8934365ee79 (plain)
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
[tox]
minversion = 3.18.0
requires = virtualenv>=20.4.2
skipsdist = True
# python runtimes: https://governance.openstack.org/tc/reference/project-testing-interface.html#tested-runtimes
envlist = py3,compliance,pep8
# this allows tox to infer the base python from the environment name
# and override any basepython configured in this file
ignore_basepython_conflict=true

[testenv]
basepython = python3
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
# 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/zed} {opts} {packages}
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:api-ref]
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]
deps = {[testenv:docs]deps}
commands = sphinx-build -a -E -W -j auto -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html

[testenv:functional]
setenv =
  OS_TEST_PATH = ./cinder/tests/functional

[testenv:functional-py{38,39}]
setenv =
  {[testenv:functional]setenv}

[testenv:api-samples]
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]
setenv =
  OS_TEST_PATH = ./cinder/tests/compliance

[testenv:pep8]
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
commands =
  {toxinidir}/tools/fast8.sh
passenv = FAST8_NUM_COMMITS

[testenv:pylint]
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.
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]
sitepackages = False
envdir = {toxworkdir}/pep8
commands = oslo-config-generator --config-file=tools/config/cinder-config-generator.conf

[testenv:genpolicy]
commands = oslopolicy-sample-generator --config-file=tools/config/cinder-policy-generator.conf

[testenv:genopts]
sitepackages = False
envdir = {toxworkdir}/pep8
commands = python tools/config/generate_cinder_opts.py

[testenv:venv]
commands = {posargs}

[testenv:docs]
allowlist_externals = rm
deps =
  -r{toxinidir}/doc/requirements.txt
commands =
  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]
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:gendriverlist]
sitepackages = False
envdir = {toxworkdir}/venv
commands = python {toxinidir}/tools/generate_driver_list.py

[testenv:bandit]
deps = -r{toxinidir}/test-requirements.txt
       bandit==1.6.0
commands = bandit -r cinder -n5 -x cinder/tests/* -ll

[testenv:bandit-baseline]
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 (this
# further relies on "tox.skipsdist = True" above).
deps = bindep
commands = bindep {posargs}
usedevelop = False

[testenv:mypy]
description =
  Run type checks.
setenv =
  OS_MYPY_OPTS=--install-types --non-interactive
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