[tox] minversion = 3.3.0 envlist = fix_lint, embed, py{27,34,35,36,37}, pypy{,3}, jython, cross_python{2,3}, docs, package_readme isolated_build = true skip_missing_interpreters = true [testenv] description = run tests with {basepython} setenv = PIP_DISABLE_VERSION_CHECK = 1 COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} extras = testing commands = coverage run --source=virtualenv \ --rcfile="{toxinidir}/tox.ini" \ -m pytest tests \ {posargs:\ --junitxml={env:JUNIT_XML_FILE:{toxworkdir}/.test.{envname}.xml} \ !jython: --timeout=180 \ } coverage combine --rcfile="{toxinidir}/tox.ini" !jython: coverage report --show-missing --rcfile="{toxinidir}/tox.ini" [testenv:.package] deps = [coverage:run] branch = false parallel = true [coverage:report] skip_covered = True show_missing = True [coverage:paths] source = src .tox/*/lib/python*/site-packages .tox/pypy*/site-packages .tox\*\Lib\site-packages */src *\src [testenv:coverage] description = [run locally after tests]: combine coverage data and create report; generates a diff coverage against origin/master (can be changed by setting DIFF_AGAINST env var) deps = coverage >= 4.4.1, < 5 diff_cover extras = skip_install = True passenv = DIFF_AGAINST setenv = COVERAGE_FILE={toxworkdir}/.coverage commands = coverage combine --rcfile="{toxinidir}/tox.ini" coverage report --show-missing --rcfile="{toxinidir}/tox.ini" coverage xml -o {toxworkdir}/coverage.xml --rcfile="{toxinidir}/tox.ini" coverage html -d {toxworkdir}/htmlcov --rcfile="{toxinidir}/tox.ini" diff-cover --compare-branch {env:DIFF_AGAINST:origin/master} {toxworkdir}/coverage.xml [testenv:cross_python2] description = test creating a python3 venv with a python2-based virtualenv basepython = python2 extras = commands = virtualenv -p python3 {envtmpdir}/{envname} {envtmpdir}/{envname}/bin/python -V 2>&1 | grep "Python 3" [testenv:cross_python3] description = test creating a python2 venv with a python3-based virtualenv basepython = python3 extras = commands = virtualenv -p python2 {envtmpdir}/{envname} {envtmpdir}/{envname}/bin/python -V 2>&1 | grep "Python 2" [testenv:docs] basepython = python3 description = build documentation extras = docs commands = sphinx-build -d "{envtmpdir}/doctree" docs "{toxworkdir}/docs_out" --color -W -bhtml {posargs} python -c 'import pathlib; print("documentation available under file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "docs_out" / "index.html"))' [testenv:package_readme] description = check that the long description is valid (need for PyPi) deps = twine >= 1.12.1 pip >= 18.0.0 skip_install = true extras = commands = pip wheel -w {envtmpdir}/build --no-deps . twine check {envtmpdir}/build/* [testenv:embed] description = embed dependencies into virtualenv.py skip_install = true extras = commands = python {toxinidir}/bin/rebuild-script.py [testenv:upgrade] description = upgrade pip/wheels/setuptools to latest skip_install = true extras = pip >= 18.1.0 commands = python {toxinidir}/bin/rebuild-support.py [testenv:fix_lint] description = format the code base to adhere to our styles, and complain about what we cannot do automatically basepython = python3.7 passenv = HOMEPATH PROGRAMDATA http_proxy https_proxy no_proxy deps = pre-commit == 1.12.0 skip_install = True commands = pre-commit run --all-files --show-diff-on-failure python -c 'import pathlib; print("hint: run \{\} install to add checks as pre-commit hook".format(pathlib.Path(r"{envdir}") / "bin" / "pre-commit"))' [isort] multi_line_output = 3 include_trailing_comma = True force_grid_wrap = 0 line_length = 120 known_standard_library = ConfigParser known_first_party = virtualenv known_third_party = pytest [flake8] max-complexity = 22 max-line-length = 120 ignore = E203, W503, C901, E402 exclude = virtualenv_embedded/site.py [pep8] max-line-length = 120 [testenv:dev] description = generate a DEV environment extras = testing, docs # required to make looponfail reload on every source code change usedevelop = True basepython = python3.7 commands = python -m pip list --format=columns python -c 'import sys; print(sys.executable)'