nova/tox.ini
Stephen Finucane e3da87a45d Switch to hacking 2.x
This bumps the version of flake8 and pycodestyle to something much
newer, which resolves a long-standing warning about nested sets and
allows us to use new fangled features like f-strings if we so choose.

Change-Id: I0bb9077f1cea2243b7945e87cfa140f9cf89d558
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
2020-01-17 11:30:40 +00:00

321 lines
11 KiB
INI

[tox]
minversion = 3.1.1
envlist = py37,functional,pep8
# Automatic envs (pyXX) will only use the python version appropriate to that
# env and ignore basepython inherited from [testenv] if we set
# ignore_basepython_conflict.
ignore_basepython_conflict = True
[testenv]
basepython = python3
usedevelop = True
whitelist_externals =
bash
find
rm
env
make
setenv =
VIRTUAL_ENV={envdir}
LANGUAGE=en_US
LC_ALL=en_US.utf-8
OS_STDOUT_CAPTURE=1
OS_STDERR_CAPTURE=1
OS_TEST_TIMEOUT=160
PYTHONDONTWRITEBYTECODE=1
# TODO(stephenfin): Remove psycopg2 when minimum constraints is bumped to 2.8
PYTHONWARNINGS = ignore::UserWarning:psycopg2
deps =
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
passenv =
OS_DEBUG GENERATE_HASHES
# there is also secret magic in subunit-trace which lets you run in a fail only
# mode. To do this define the TRACE_FAILONLY environmental variable.
commands =
stestr run {posargs}
env TEST_OSPROFILER=1 stestr run --combine --no-discover 'nova.tests.unit.test_profiler'
stestr slowest
[testenv:pep8]
description =
Run style checks.
envdir = {toxworkdir}/shared
commands =
bash tools/flake8wrap.sh {posargs}
# Check that all JSON files don't have \r\n in line.
bash -c "! find doc/ -type f -name *.json | xargs grep -U -n $'\r'"
# Check that all included JSON files are valid JSON
bash -c '! find doc/ -type f -name *.json | xargs -t -n1 python -m json.tool 2>&1 > /dev/null | grep -B1 -v ^python'
[testenv:fast8]
description =
Run style checks on the changes made since HEAD~. For a full run including docs, use 'pep8'
envdir = {toxworkdir}/shared
commands =
bash tools/flake8wrap.sh -HEAD
[testenv:functional]
description =
Run functional tests using python3.
# As nova functional tests import the PlacementFixture from the placement
# repository these tests are, by default, set up to run with latest master from
# the placement repo. In the gate, Zuul will clone the latest master from
# placement OR the version of placement the Depends-On in the commit message
# suggests. If you want to run the test locally with an un-merged placement
# change, modify this line locally to point to your dependency or pip install
# placement into the appropriate tox virtualenv. We express the requirement
# here instead of test-requirements because we do not want placement present
# during unit tests.
deps =
{[testenv]deps}
git+https://opendev.org/openstack/placement#egg=openstack-placement
commands =
# NOTE(cdent): The group_regex describes how stestr will group tests into the
# same process when running concurently. The following ensures that gabbi tests
# coming from the same YAML file are all in the same process. This is important
# because each YAML file represents an ordered sequence of HTTP requests. Note
# that tests which do not match this regex will not be grouped in any
# special way. See the following for more details.
# http://stestr.readthedocs.io/en/latest/MANUAL.html#grouping-tests
# https://gabbi.readthedocs.io/en/latest/#purpose
stestr --test-path=./nova/tests/functional run {posargs}
stestr slowest
[testenv:functional-py36]
description =
Run functional tests using python3.6.
deps = {[testenv:functional]deps}
commands =
{[testenv:functional]commands}
[testenv:functional-py37]
description =
Run functional tests using python3.7.
deps = {[testenv:functional]deps}
commands =
{[testenv:functional]commands}
[testenv:api-samples]
setenv =
{[testenv]setenv}
GENERATE_SAMPLES=True
PYTHONHASHSEED=0
deps = {[testenv:functional]deps}
commands =
stestr --test-path=./nova/tests/functional/api_sample_tests run {posargs}
stestr slowest
[testenv:genconfig]
envdir = {toxworkdir}/shared
commands =
oslo-config-generator --config-file=etc/nova/nova-config-generator.conf
[testenv:genpolicy]
envdir = {toxworkdir}/shared
commands =
oslopolicy-sample-generator --config-file=etc/nova/nova-policy-generator.conf
[testenv:cover]
# TODO(stephenfin): Remove the PYTHON hack below in favour of a [coverage]
# section once we rely on coverage 4.3+
#
# https://bitbucket.org/ned/coveragepy/issues/519/
envdir = {toxworkdir}/shared
setenv =
{[testenv]setenv}
PYTHON=coverage run --source nova --parallel-mode
commands =
coverage erase
stestr run {posargs}
coverage combine
coverage html -d cover
coverage xml -o cover/coverage.xml
coverage report
[testenv:debug]
envdir = {toxworkdir}/shared
commands =
oslo_debug_helper {posargs}
[testenv:venv]
deps =
{[testenv]deps}
-r{toxinidir}/doc/requirements.txt
commands =
{posargs}
[testenv:docs]
description =
Build main documentation.
# Note that we don't use {[testenv]deps} for deps here because we don't want
# to install (test-)requirements.txt for docs.
deps =
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/doc/requirements.txt
commands =
rm -rf doc/build/html doc/build/doctrees
# Check that all JSON files don't have \r\n in line.
bash -c "! find doc/ -type f -name *.json | xargs grep -U -n $'\r'"
# Check that all included JSON files are valid JSON
bash -c '! find doc/ -type f -name *.json | xargs -t -n1 python -m json.tool 2>&1 > /dev/null | grep -B1 -v ^python'
sphinx-build -W --keep-going -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]
description =
Build PDF documentation.
envdir = {toxworkdir}/docs
deps = {[testenv:docs]deps}
commands =
rm -rf doc/build/pdf
sphinx-build -W -b latex doc/source doc/build/pdf
make -C doc/build/pdf
[testenv:api-guide]
description =
Generate the API guide. Called from CI scripts to test and publish to docs.openstack.org.
envdir = {toxworkdir}/docs
deps = {[testenv:docs]deps}
commands =
rm -rf api-guide/build
sphinx-build -W --keep-going -b html -d api-guide/build/doctrees api-guide/source api-guide/build/html
[testenv:api-ref]
description =
Generate the API ref. Called from CI scripts to test and publish to docs.openstack.org.
envdir = {toxworkdir}/docs
deps = {[testenv:docs]deps}
commands =
rm -rf api-ref/build
sphinx-build -W --keep-going -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html
[testenv:releasenotes]
description =
Generate release notes.
envdir = {toxworkdir}/docs
deps = {[testenv:docs]deps}
commands =
rm -rf releasenotes/build
sphinx-build -W --keep-going -b html -d releasenotes/build/doctrees releasenotes/source releasenotes/build/html
[testenv:all-docs]
description =
Build all documentation including API guides and refs.
envdir = {toxworkdir}/docs
deps = {[testenv:docs]deps}
commands =
{[testenv:docs]commands}
{[testenv:api-guide]commands}
{[testenv:api-ref]commands}
{[testenv:releasenotes]commands}
[testenv:bandit]
# NOTE(browne): This is required for the integration test job of the bandit
# project. Please do not remove.
envdir = {toxworkdir}/shared
commands = bandit -r nova -x tests -n 5 -ll
[flake8]
# E125 is deliberately excluded. See
# https://github.com/jcrocholl/pep8/issues/126. It's just wrong.
#
# Most of the whitespace related rules (E12* and E131) are excluded
# because while they are often useful guidelines, strict adherence to
# them ends up causing some really odd code formatting and forced
# extra line breaks. Updating code to enforce these will be a hard sell.
#
# H405 is another one that is good as a guideline, but sometimes
# multiline doc strings just don't have a natural summary
# line. Rejecting code for this reason is wrong.
#
# E251 Skipped due to https://github.com/jcrocholl/pep8/issues/301
#
# W504 skipped since you must choose either W503 or W504 (they conflict)
#
# E731 temporarily skipped because of the number of
# these that have to be fixed
enable-extensions = H106,H203,H904
ignore = E121,E122,E123,E124,E125,E126,E127,E128,E129,E131,E251,H405,W504,E731
exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,tools/xenserver*,releasenotes
# To get a list of functions that are more complex than 25, set max-complexity
# to 25 and run 'tox -epep8'.
# 39 is currently the most complex thing we have
# TODO(jogo): get this number down to 25 or so
max-complexity=40
[hacking]
import_exceptions = typing,nova.i18n
[flake8:local-plugins]
extension =
N307 = checks:import_no_db_in_virt
N309 = checks:no_db_session_in_public_api
N310 = checks:use_timeutils_utcnow
N311 = checks:import_no_virt_driver_import_deps
N312 = checks:import_no_virt_driver_config_deps
N313 = checks:capital_cfg_help
N316 = checks:assert_true_instance
N317 = checks:assert_equal_type
N335 = checks:assert_raises_regexp
N319 = checks:no_translate_debug_logs
N337 = checks:no_import_translation_in_tests
N320 = checks:no_setting_conf_directly_in_tests
N322 = checks:no_mutable_default_args
N323 = checks:check_explicit_underscore_import
N324 = checks:use_jsonutils
N332 = checks:check_api_version_decorator
N325 = checks:CheckForStrUnicodeExc
N326 = checks:CheckForTransAdd
N334 = checks:assert_true_or_false_with_in
N336 = checks:dict_constructor_with_list_copy
N338 = checks:assert_equal_in
N339 = checks:check_http_not_implemented
N340 = checks:check_greenthread_spawns
N341 = checks:check_no_contextlib_nested
N342 = checks:check_config_option_in_central_place
N350 = checks:check_policy_registration_in_central_place
N351 = checks:check_policy_enforce
N343 = checks:check_doubled_words
N344 = checks:check_python3_no_iteritems
N345 = checks:check_python3_no_iterkeys
N346 = checks:check_python3_no_itervalues
N327 = checks:check_python3_xrange
N348 = checks:no_os_popen
N352 = checks:no_log_warn
N349 = checks:CheckForUncalledTestClosure
N353 = checks:check_context_log
N355 = checks:no_assert_equal_true_false
N356 = checks:no_assert_true_false_is_not
N357 = checks:check_uuid4
N358 = checks:return_followed_by_space
N359 = checks:no_redundant_import_alias
N360 = checks:yield_followed_by_space
N361 = checks:assert_regexpmatches
N362 = checks:privsep_imports_not_aliased
N363 = checks:did_you_mean_tuple
N364 = checks:nonexistent_assertion_methods_and_attributes
N365 = checks:useless_assertion
paths =
./nova/hacking
[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
usedevelop = False
deps = bindep
commands =
bindep test
[testenv:lower-constraints]
usedevelop = False
deps =
-c{toxinidir}/lower-constraints.txt
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt