| [tox] |
| minversion = 3.6.1 |
| envlist = fix_lint, embed, py{27,34,35,36,37}, pypy{,3}, cross_python{2,3}, docs, package_readme |
| isolated_build = true |
| skip_missing_interpreters = true |
| |
| [testenv] |
| description = run tests with {basepython} |
| deps = pip >= 19.1.1 |
| setenv = COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} |
| passenv = https_proxy http_proxy no_proxy HOME PYTEST_* PIP_* CI_RUN TERM |
| extras = testing |
| install_command = python -m pip install {opts} {packages} --disable-pip-version-check |
| commands = coverage run --source=virtualenv \ |
| -m pytest tests \ |
| {posargs:\ |
| --junitxml={env:JUNIT_XML_FILE:{toxworkdir}/junit.{envname}.xml} \ |
| } |
| coverage combine |
| coverage report --show-missing |
| |
| [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 = {[testenv]deps} |
| coverage >= 4.4.1, < 5 |
| diff_cover |
| extras = |
| skip_install = True |
| passenv = DIFF_AGAINST |
| setenv = COVERAGE_FILE={toxworkdir}/.coverage |
| commands = coverage combine |
| coverage report --show-missing |
| coverage xml -o {toxworkdir}/coverage.xml |
| coverage html -d {toxworkdir}/htmlcov |
| 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" -W docs "{toxworkdir}/docs_out" --color -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 = {[testenv]deps} |
| twine >= 1.12.1 |
| 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 |
| changedir = {toxinidir}/tasks |
| extras = |
| commands = python update_embedded.py |
| |
| [testenv:upgrade] |
| description = upgrade pip/wheels/setuptools to latest |
| skip_install = true |
| changedir = {toxinidir}/tasks |
| commands = python upgrade_wheels.py |
| |
| [testenv:fix_lint] |
| description = format the code base to adhere to our styles, and complain about what we cannot do automatically |
| basepython = python3.8 |
| passenv = * |
| deps = {[testenv]deps} |
| pre-commit >= 1.12.0, <2 |
| 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 = git,packaging,pypiserver,pytest,pytest_localserver,setuptools,six |
| |
| [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 |
| usedevelop = True |
| commands = python -m pip list --format=columns |
| python -c 'import sys; print(sys.executable)' |
| |
| [testenv:release] |
| description = do a release, required posarg of the version number |
| basepython = python3.8 |
| skip_install = true |
| passenv = * |
| deps = {[testenv]deps} |
| gitpython >= 2.1.10, < 3 |
| towncrier >= 18.5.0 |
| packaging >= 17.1 |
| changedir = {toxinidir}/tasks |
| commands = python release.py --version {posargs} |