summaryrefslogtreecommitdiff
path: root/tox.ini
blob: ca895d38503a0f700172079d03e4294c9f741c31 (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
[tox]
envlist =
    fix
    py310
    py39
    py38
    py37
    py36
    cov
    type
    docs
    pkg_meta
isolated_build = true
skip_missing_interpreters = true
minversion = 3.21

[testenv]
description = run the tests with pytest
passenv =
    PYTEST_*
    SSL_CERT_FILE
setenv =
    COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}{/}.coverage.{envname}}
    COVERAGE_PROCESS_START = {toxinidir}{/}setup.cfg
extras =
    testing
commands =
    pytest {tty:--color=yes} {posargs: \
      --junitxml {toxworkdir}{/}junit.{envname}.xml --cov {envsitepackagesdir}{/}tox --cov {toxinidir}{/}tests \
      --cov-config=setup.cfg --no-cov-on-fail --cov-report term-missing:skip-covered --cov-context=test \
      --cov-report html:{envtmpdir}{/}htmlcov \
      --cov-report xml:{toxworkdir}{/}coverage.{envname}.xml \
      -n={env:PYTEST_XDIST_PROC_NR:auto} \
      tests --durations 5 --run-integration}
package = wheel
wheel_build_env = .pkg

[testenv:fix]
description = format the code base to adhere to our styles, and complain about what we cannot do automatically
passenv =
    {[testenv]passenv}
    PROGRAMDATA
basepython = python3.9
skip_install = true
deps =
    pre-commit>=2.13
commands =
    pre-commit run --all-files --show-diff-on-failure {tty:--color=always} {posargs}
    python -c 'print(r"hint: run {envbindir}{/}pre-commit install to add checks as pre-commit hook")'

[testenv:cov]
description = merge existing coverage reports and report coverage diff against DIFF_MASTER env-var (default upstream/rewrite)
passenv =
    {[testenv]passenv}
    DIFF_AGAINST
setenv =
    COVERAGE_FILE = {toxworkdir}/.coverage
skip_install = true
deps =
    covdefaults>=1.2
    coverage>=5.5
    diff_cover>=6.2
parallel_show_output = true
commands =
    coverage combine
    coverage report -m
    coverage xml -o {toxworkdir}{/}coverage.xml
    coverage html -d {toxworkdir}{/}htmlcov
    diff-cover --compare-branch {env:DIFF_AGAINST:upstream/rewrite} {toxworkdir}{/}coverage.xml
depends =
    py39
    py38
    py37
    py36

[testenv:type]
description = run type check on code base
setenv =
    {tty:MYPY_FORCE_COLOR = 1}
deps =
    mypy==0.910
    types-cachetools
    types-chardet
    types-filelock
    types-freezegun
    types-toml
commands =
    mypy src/tox
    mypy tests

[testenv:docs]
description = build documentation
basepython = python3.9
extras =
    docs
commands =
    sphinx-build -d "{envtmpdir}{/}doctree" docs "{toxworkdir}{/}docs_out" --color -b html {posargs}
    python -c 'print(r"documentation available under file://{toxworkdir}{/}docs_out{/}index.html")'

[testenv:pkg_meta]
description = check that the long description is valid
basepython = python3.9
skip_install = true
deps =
    build[virtualenv]>=0.5
    check-wheel-contents>=0.3.2
    twine>=3.4
commands =
    python -m build -o {envtmpdir} -s -w .
    twine check {envtmpdir}{/}*
    check-wheel-contents --no-config {envtmpdir}

[testenv:release]
description = do a release, required posarg of the version number
basepython = python3.9
skip_install = true
deps =
    gitpython>=3.1
    packaging>=21
    towncrier>=21.3
commands =
    python {toxinidir}/tasks/release.py --version {posargs}

[testenv:dev]
description = dev environment with all deps at {envdir}
usedevelop = true
deps =
    {[testenv:release]deps}
extras =
    docs
    testing
commands =
    python -m pip list --format=columns
    python -c "print(r'{envpython}')"

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

[pep8]
max-line-length = 120