[tox] minversion = 4.6.3 envlist = lint pkg docs py py-devel py39-ansible214 py39-ansible215 py310-ansible214 py310-ansible215 py311-ansible214 py311-ansible215 py312-ansible216 isolated_build = true skip_missing_interpreters = True requires = tox >= 4.6.3 setuptools >= 65.3.0 # editable installs [testenv] description = Run the tests devel: ansible devel branch ansible214: ansible-core 2.14 ansible215: ansible-core 2.15 ansible216: ansible-core 2.16 ansible217: ansible-core 2.17 deps = ansible214: ansible-core>=2.14,<2.15 ansible215: ansible-core>=2.15,<2.16 ansible216: ansible-core>=2.16,<2.17 ansible217: ansible-core>=2.17,<2.18 devel: ansible-core @ git+https://github.com/ansible/ansible.git@c5d18c39d81e2b3b10856b2fb76747230e4fac4a # GPLv3+ # avoid installing ansible-core on -devel envs: !devel: ansible-core extras = test commands_pre = # safety measure to assure we do not accidentally run tests with broken dependencies {envpython} -m pip check # cleaning needed to prevent errors between runs sh -c "rm -f {envdir}/.coverage.* 2>/dev/null || true" commands = sh -c "ansible --version | head -n 1" # We add coverage options but not making them mandatory as we do not want to force # pytest users to run coverage when they just want to run a single test with `pytest -k test` coverage run -m pytest {posargs:} # needed for upload to codecov.io {py,py39,py310,py311,py312,py313}: sh -c "coverage combine -q --data-file={envdir}/.coverage {envdir}/.coverage.* && coverage xml --data-file={envdir}/.coverage -o {envdir}/coverage.xml --ignore-errors --fail-under=0 && COVERAGE_FILE={envdir}/.coverage coverage lcov --fail-under=0 --ignore-errors -q && COVERAGE_FILE={envdir}/.coverage coverage report --fail-under=0 --ignore-errors" # lcov needed for vscode integration due to https://github.com/ryanluker/vscode-coverage-gutters/issues/403 # We fail if files are modified at the end git diff --exit-code passenv = CURL_CA_BUNDLE # https proxies, https://github.com/tox-dev/tox/issues/1437 FORCE_COLOR HOME NO_COLOR PYTEST_* # allows developer to define their own preferences PYTEST_REQPASS # needed for CI PYTHON* # PYTHONPYCACHEPREFIX, PYTHONIOENCODING, PYTHONBREAKPOINT,... PY_COLORS RTD_TOKEN REQUESTS_CA_BUNDLE # https proxies SETUPTOOLS_SCM_DEBUG SSL_CERT_FILE # https proxies SSH_AUTH_SOCK # may be needed by git LANG LC_* setenv = ANSIBLE_DEVEL_WARNING='false' COVERAGE_FILE = {env:COVERAGE_FILE:{envdir}/.coverage.{envname}} COVERAGE_PROCESS_START={toxinidir}/pyproject.toml PIP_DISABLE_PIP_VERSION_CHECK = 1 PIP_CONSTRAINT = {toxinidir}/.config/constraints.txt PRE_COMMIT_COLOR = always FORCE_COLOR = 1 allowlist_externals = ansible git sh # https://tox.wiki/en/latest/upgrading.html#editable-mode package = editable [testenv:lint] description = Run all linters # locked basepython is needed because to keep constrains.txt predictable basepython = python3.10 deps = pre-commit>=2.6.0 skip_install = true usedevelop = false commands = pre-commit run -a --show-diff-on-failure {posargs:} pre-commit run -a pip-compile passenv = {[testenv]passenv} PRE_COMMIT_HOME setenv = {[testenv]setenv} PIP_CONSTRAINT = /dev/null [testenv:deps] description = Bump all test dependencies basepython = {[testenv:lint]basepython} envdir = {toxworkdir}/lint deps = {[testenv:lint]deps} skip_install = true commands = pre-commit run -a --hook-stage manual pip-compile-upgrade {[testenv:lint]commands} setenv = {[testenv]setenv} PIP_CONSTRAINT = /dev/null [testenv:pkg] description = Build package, verify metadata, install package and assert behavior when ansible is missing. deps = build >= 0.9.0 twine >= 4.0.1 skip_install = true # Ref: https://twitter.com/di_codes/status/1044358639081975813 commands = # build wheel and sdist using PEP-517 {envpython} -c 'import os.path, shutil, sys; \ dist_dir = os.path.join("{toxinidir}", "dist"); \ os.path.isdir(dist_dir) or sys.exit(0); \ print("Removing \{!s\} contents...".format(dist_dir), file=sys.stderr); \ shutil.rmtree(dist_dir)' {envpython} -m build \ --outdir {toxinidir}/dist/ \ {toxinidir} # Validate metadata using twine twine check --strict {toxinidir}/dist/* # Install the wheel sh -c "python3 -m pip install {toxinidir}/dist/*.whl" pip uninstall -y ansible-compat [testenv:py] description = Run the tests with {basepython} ansible-core 2.14+ deps = {[testenv]deps} ansible-core>=2.14 [testenv:rpm] description = Use packit to build RPM (requires RPM based Linux distro) deps = packitos commands = sh -c "packit build in-mock --root=fedora-40-$(arch)" [testenv:docs] description = Build docs commands = mkdocs {posargs:build} --strict extras = docs passenv = * [testenv:smoke] description = Run ansible-lint own testing with current code from compat library commands_pre = ansible localhost -m ansible.builtin.git -a 'repo=https://github.com/ansible/ansible-lint dest={envdir}/tmp/ansible-lint' pip install -e "{envdir}/tmp/ansible-lint[test]" commands = bash -c "pip freeze|grep ansible" pytest -k role deps = ansible-core setenv = {[testenv]setenv} PIP_CONSTRAINT = /dev/null PYTEST_REQPASS = 0 changedir = {envdir}/tmp/ansible-lint allowlist_externals = pwd bash