summaryrefslogtreecommitdiff
path: root/tox.ini
blob: e65ee3dc9d1553b315ac8ea59b8e5b79c7850ea2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
[tox]
minversion = 3.14.0
envlist =
    fix_lint
    py38
    py37
    py36
    py35
    py34
    py27
    pypy
    pypy3
    coverage
    readme
    docs
isolated_build = true
skip_missing_interpreters = true

[testenv]
description = run tests with {basepython}
setenv =
    COVERAGE_FILE = {toxworkdir}/.coverage.{envname}
    COVERAGE_PROCESS_START = {toxinidir}/.coveragerc
    _COVERAGE_SRC = {envsitepackagesdir}/virtualenv
    PYTHONIOENCODING=utf-8
    {py34,py27,pypy, upgrade}: PYTHONWARNINGS=ignore:DEPRECATION::pip._internal.cli.base_command
    {pypy,py27}: PYTEST_XDIST = 0
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 =
    python -m coverage erase
    python -m coverage run -m pytest \
    --junitxml {toxworkdir}/junit.{envname}.xml \
    {posargs:tests --int --timeout 600 -n {env:PYTEST_XDIST:auto}}

    python -m coverage combine
    python -m coverage report --skip-covered --show-missing
    python -m coverage xml -o {toxworkdir}/coverage.{envname}.xml
    python -m coverage html -d {envtmpdir}/htmlcov

[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 >= 5.0.1
    diff_cover >= 3
extras =
skip_install = True
passenv = DIFF_AGAINST
setenv =
    COVERAGE_FILE={toxworkdir}/.coverage
commands =
    python -m coverage combine
    python -m coverage report --skip-covered --show-missing
    python -m coverage xml -o {toxworkdir}/coverage.xml
    python -m coverage html -d {toxworkdir}/htmlcov
    python -m diff_cover.diff_cover_tool --compare-branch {env:DIFF_AGAINST:origin/master} {toxworkdir}/coverage.xml
depends =
    py38
    py37
    py36
    py35
    py34
    py27
    pypy
    pypy3
parallel_show_output = True

[testenv:docs]
basepython = python3.8
description = build documentation
extras = docs
commands =
    python -c 'import glob; import subprocess; subprocess.call(["proselint"] + glob.glob("docs/*.rst") + glob.glob("docs/**/*.rst"))'
    sphinx-build -d "{envtmpdir}/doctree" docs "{toxworkdir}/docs_out" --color -b html {posargs}
    python -c 'import pathlib; print("documentation available under file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "docs_out" / "index.html"))'

[testenv:readme]
description = check that the long description is valid (need for PyPI)
deps =
    twine >= 1.12.1
    pep517 >= 0.8.2
skip_install = true
extras =
commands =
    python -m pep517.build -o {envtmpdir} -b -s .
    twine check {envtmpdir}/*

[testenv:upgrade]
description = upgrade pip/wheels/setuptools to latest
skip_install = true
deps =
    black
passenv = UPGRADE_ADVISORY
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 =
    pre-commit >= 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]
profile = black
line_length = 120
known_first_party = virtualenv

[flake8]
max-complexity = 22
max-line-length = 120
ignore = E203, W503, C901, E402

[pep8]
max-line-length = 120

[testenv:release]
description = do a release, required posarg of the version number
basepython = python3.8
passenv = *
deps =
    gitpython >= 3
    towncrier >= 19.9.0rc1
    packaging  >= 17.1
changedir = {toxinidir}/tasks
commands =
    python release.py --version {posargs}

[testenv:dev]
description = generate a DEV environment
extras = testing, docs
usedevelop = True
deps =
    {[testenv:release]deps}
    setuptools_scm[toml]>=3.4
commands =
    python -m pip list --format=columns
    python -c 'import sys; print(sys.executable)'

[testenv:zipapp]
description = generate a zipapp
skip_install = true
deps =
    packaging >= 20
commands =
    python tasks/make_zipapp.py