Files
openstacksdk/tox.ini
Stephen Finucane e0845449d3 Run mypy from tox
This avoids the need to duplicate our dependency list in multiple
places and allows us to take advantage of tox's dependency management
infrastructure, to ensure we always get the latest and greatest version
of a package allowed by upper-constraints.

Change-Id: I46eac909846b2d6bd41608efedbed7db08df0c20
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2026-02-13 18:45:28 +00:00

176 lines
4.9 KiB
INI

[tox]
minversion = 4.3.0
envlist = pep8,py3
[testenv]
description =
Run unit tests.
passenv =
OS_*
OPENSTACKSDK_*
setenv =
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_ALL=C
OS_LOG_CAPTURE={env:OS_LOG_CAPTURE:true}
OS_STDOUT_CAPTURE={env:OS_STDOUT_CAPTURE:true}
OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:true}
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
commands =
stestr run {posargs}
stestr slowest
[testenv:functional{,-py39,-py310,-py311,-py312}]
description =
Run functional tests.
# Some jobs (especially heat) takes longer, therefore increase default timeout
# This timeout should not be smaller, than the longest individual timeout
setenv =
{[testenv]setenv}
OS_TEST_TIMEOUT=600
OPENSTACKSDK_FUNC_TEST_TIMEOUT_LOAD_BALANCER=600
OPENSTACKSDK_EXAMPLE_CONFIG_KEY=functional
OPENSTACKSDK_FUNC_TEST_TIMEOUT_PROJECT_CLEANUP=1200
commands =
stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs}
stestr slowest
# Acceptance tests are the ones running on real clouds
[testenv:acceptance-regular-user]
description =
Run acceptance tests.
# This env intends to test functions of a regular user without admin privileges
# Some jobs (especially heat) takes longer, therefore increase default timeout
# This timeout should not be smaller, than the longest individual timeout
setenv =
{[testenv]setenv}
OS_TEST_TIMEOUT=600
OPENSTACKSDK_FUNC_TEST_TIMEOUT_LOAD_BALANCER=600
# OPENSTACKSDK_DEMO_CLOUD and OS_CLOUD should point to the cloud to test
# Othee clouds are explicitly set empty to let tests detect absense
OPENSTACKSDK_DEMO_CLOUD_ALT=
OPENSTACKSDK_OPERATOR_CLOUD=
commands =
stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs} --include-list include-acceptance-regular-user.txt
stestr slowest
[testenv:pep8]
description =
Run style checks.
deps =
pre-commit
{[testenv:mypy]deps}
commands =
pre-commit run -a
{[testenv:mypy]commands}
[testenv:mypy]
description =
Run type checks.
deps =
{[testenv]deps}
mypy
types-decorator
types-jmespath
types-PyYAML
types-requests
types-simplejson
commands =
mypy --cache-dir="{envdir}/mypy_cache" {posargs:openstack}
[testenv:venv]
description =
Run specified command in a virtual environment with all dependencies installed.
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
-r{toxinidir}/doc/requirements.txt
commands = {posargs}
[testenv:debug]
description =
Run specified tests through oslo_debug_helper, which allows use of pdb.
# allow 1 year, or 31536000 seconds, to debug a test before it times out
setenv =
OS_TEST_TIMEOUT=31536000
allowlist_externals = find
commands =
find . -type f -name "*.pyc" -delete
oslo_debug_helper -t openstack/tests {posargs}
[testenv:cover]
description =
Run unit tests and generate coverage report.
setenv =
{[testenv]setenv}
PYTHON=coverage run --source openstack --parallel-mode
commands =
stestr run {posargs}
coverage combine
coverage html -d cover
coverage xml -o cover/coverage.xml
[testenv:ansible]
description =
Run ansible tests.
# Need to pass some env vars for the Ansible playbooks
passenv =
HOME
USER
ANSIBLE_VAR_*
deps =
{[testenv]deps}
ansible
commands = {toxinidir}/extras/run-ansible-tests.sh -e {envdir} {posargs}
[testenv:docs]
description =
Build documentation in HTML format.
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/doc/requirements.txt
commands =
sphinx-build -W --keep-going -b html -j auto doc/source/ doc/build/html
[testenv:pdf-docs]
description =
Build documentation in PDF format.
deps = {[testenv:docs]deps}
allowlist_externals =
make
commands =
sphinx-build -W --keep-going -b latex -j auto doc/source/ doc/build/pdf
make -C doc/build/pdf
[testenv:releasenotes]
description =
Build release note documentation in HTML format.
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/doc/requirements.txt
commands =
sphinx-build -W --keep-going -b html -j auto releasenotes/source releasenotes/build/html
[flake8]
# We only enable the hacking (H) and openstacksdk (O) checks
select = H,O
# H301 Black will put commas after imports that can't fit on one line
# H404 Docstrings don't always start with a newline
# H405 Multiline docstrings are okay
ignore = H301,H403,H404,H405
show-source = True
exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,openstack/_services_mixin.py
[flake8:local-plugins]
extension =
O300 = checks:assert_no_setupclass
O310 = checks:assert_no_deprecated_exceptions
paths = ./openstack/_hacking
[doc8]
extensions = .rst, .yaml