[tox] skipsdist = True envlist = clean,ansible{2.12,2.13}-py{38,39,310}-{with_constraints,without_constraints},linters # Tox4 supports labels which allow us to group the environments rather than dumping all commands into a single environment labels = format = flynt, black, isort lint = complexity-report, ansible-lint, black-lint, isort-lint, flake8-lint, flynt-lint units = ansible{2.12,2.13}-py{38,39,310}-{with_constraints,without_constraints} [common] format_dirs = {toxinidir}/plugins {toxinidir}/tests [testenv] description = Run the test-suite and generate a HTML coverage report deps = pytest pytest-cov ansible2.12: ansible-core>2.12,<2.13 ansible2.13: ansible-core>2.13,<2.14 !ansible2.12-!ansible2.13: ansible-core pytest-ansible -rtest-requirements.txt with_constraints: -rtests/unit/constraints.txt commands = pytest --cov-report html --cov plugins/callback --cov plugins/inventory --cov plugins/lookup --cov plugins/module_utils --cov plugins/modules --cov plugins/plugin_utils plugins {posargs:tests/} [testenv:clean] deps = coverage skip_install = true commands = coverage erase [testenv:complexity-report] description = Generate a HTML complexity report in the complexity directory deps = # See: https://github.com/lordmauve/flake8-html/issues/30 flake8>=3.3.0,<5.0.0 flake8-html commands = -flake8 --select C90 --max-complexity 10 --format=html --htmldir={posargs:complexity} plugins [testenv:ansible-lint] deps = ansible-lint commands = ansible-lint {toxinidir}/plugins [testenv:black] depends = flynt, isort deps = black >=23.0, <24.0 commands = black {[common]format_dirs} [testenv:black-lint] deps = {[testenv:black]deps} commands = black -v --check --diff {[common]format_dirs} [testenv:isort] deps = isort commands = isort {[common]format_dirs} [testenv:isort-lint] deps = {[testenv:isort]deps} commands = isort --check-only --diff {[common]format_dirs} [testenv:flake8-lint] deps = flake8 commands = flake8 {posargs} {[common]format_dirs} [testenv:pylint-lint] # Additional pylint tests that ansible-test currently ignores deps = pylint commands = pylint \ --disable R,C,W,E \ --enable consider-using-dict-items,assignment-from-no-return,no-else-continue,no-else-break,simplifiable-if-statement,pointless-string-statement,redefined-outer-name,redefined-builtin \ {toxinidir}/plugins [testenv:flynt] deps = flynt commands = flynt {[common]format_dirs} [testenv:flynt-lint] deps = flynt commands = flynt --dry-run --fail-on-change {[common]format_dirs} [testenv:linters] deps = {[testenv:black]deps} {[testenv:isort]deps} flake8 commands = black -v --check {toxinidir}/plugins {toxinidir}/tests isort --check-only --diff {toxinidir}/plugins {toxinidir}/tests flake8 {posargs} {toxinidir}/plugins {toxinidir}/tests [flake8] # E123, E125 skipped as they are invalid PEP-8. show-source = True ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503 max-line-length = 160 builtins = _