c8c4fc953c
The cinder-mypy job is failing because library stubs aren't installed for requests [0]. Modify the mypywrap.sh to accept options specified in an environment variable named OS_MYPY_OPTS to the mypy invocation, and set this var in tox.ini. The value is "--install-types --non-interactive" which is suitable for CI purposes, and seems to make sense for local tox use as well [1]. The downside is it basically runs mypy twice, once to determine whether there are any library stubs missing and then install them, and againto do the actual check. If we don't want this setting in tox.ini, we can move it to .zuul.yaml for the cinder-mypy job run. Also, update the version of mypy in test-requirements to a version that supports the above options. And, run mypy in its own env (instead of reusing pep8) so that the tox logs are preserved during CI runs. [0] https://zuul.opendev.org/t/openstack/build/b66ee6c21e594940941585b0e9e5082a [1] https://mypy.readthedocs.io/en/stable/running_mypy.html#library-stubs-not-installed Change-Id: Id69cb519ee7300b33ff087de4e7d46cdad67d162
226 lines
6.7 KiB
INI
226 lines
6.7 KiB
INI
[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
|
|
setenv = VIRTUAL_ENV={envdir}
|
|
PYTHONWARNINGS=default::DeprecationWarning
|
|
OS_STDOUT_CAPTURE=1
|
|
OS_STDERR_CAPTURE=1
|
|
OS_TEST_TIMEOUT=60
|
|
OS_TEST_PATH=./cinder/tests/unit
|
|
usedevelop = True
|
|
install_command=python -m pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} {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 =
|
|
find . -ignore_readdir_race -type f -name "*.pyc" -delete
|
|
stestr run {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-py36]
|
|
setenv =
|
|
{[testenv:functional]setenv}
|
|
|
|
[testenv:functional-py38]
|
|
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.7.4
|
|
commands =
|
|
{toxinidir}/tools/coding-checks.sh --pylint {posargs}
|
|
|
|
[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]
|
|
deps =
|
|
-r{toxinidir}/doc/requirements.txt
|
|
commands =
|
|
rm -fr doc/source/contributor/api/
|
|
rm -fr doc/build/html doc/build/doctrees
|
|
sphinx-build -W -j auto -b html -d doc/build/doctrees doc/source doc/build/html
|
|
allowlist_externals = rm
|
|
|
|
[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
|
|
commands = bandit -r cinder -n5 -x cinder/tests/* -ll
|
|
|
|
[testenv:bandit-baseline]
|
|
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
|
|
paths = ./cinder/tests/hacking
|
|
|
|
[doc8]
|
|
ignore-path=.tox,*.egg-info,doc/src/api,doc/source/drivers.rst,doc/build,.eggs/*/EGG-INFO/*.txt,doc/source/configuration/tables,./*.txt,releasenotes,doc/source/contributor/api
|
|
extension=.txt,.rst,.inc
|