summaryrefslogtreecommitdiff
path: root/tox.ini
blob: 5a5bfc90deaa85cd77c5e8364a0e412b670ae36a (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
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

[tox]
# When changing this list, be sure to check the [gh-actions] list below.
# PYVERSIONS
envlist = py{37,38,39,310,311,312}, pypy3, doc, lint
skip_missing_interpreters = {env:COVERAGE_SKIP_MISSING_INTERPRETERS:True}
toxworkdir = {env:TOXWORKDIR:.tox}

[testenv]
usedevelop = True
extras =
    toml

# PYVERSIONS
deps =
    -r requirements/pip.pip
    -r requirements/pytest.pip
    py{37,38,39,310,311}: -r requirements/light-threads.pip

# Windows can't update the pip version with pip running, so use Python
# to install things.
install_command = python -m pip install -U {opts} {packages}

passenv = *
setenv =
    pypy{3,37,38,39}: COVERAGE_NO_CTRACER=no C extension under PyPy
    # For some tests, we need .pyc files written in the current directory,
    # so override any local setting.
    PYTHONPYCACHEPREFIX=

commands =
    # Create tests/zipmods.zip
    python igor.py zip_mods

    # Build the C extension and test with the CTracer
    python setup.py --quiet build_ext --inplace
    python -m pip install -q -e .
    python igor.py test_with_tracer c {posargs}

    # Remove the C extension so that we can test the PyTracer
    python igor.py remove_extension

    # Test with the PyTracer
    python igor.py test_with_tracer py {posargs}

[testenv:anypy]
# $set_env.py: COVERAGE_ANYPY - The custom Python for "tox -e anypy"
# For running against my own builds of CPython, or any other specific Python.
basepython = {env:COVERAGE_ANYPY}

[testenv:doc]
# Build the docs so we know if they are successful.  We build twice: once with
# -q to get all warnings, and once with -QW to get a success/fail status
# return.
deps =
    -r doc/requirements.pip
allowlist_externals =
    make
commands =
    # If this command fails, see the comment at the top of doc/cmd.rst
    python -m cogapp -cP --check --verbosity=1 doc/*.rst
    #doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst
    sphinx-build -b html -aEnqW doc doc/_build/html
    rst2html.py --strict README.rst doc/_build/trash
    - sphinx-build -b html -b linkcheck -aEnq doc doc/_build/html
    - sphinx-build -b html -b linkcheck -aEnQW doc doc/_build/html

[testenv:lint]
deps =
    -r requirements/lint.pip

setenv =
    {[testenv]setenv}
    LINTABLE=coverage tests doc ci igor.py setup.py __main__.py

commands =
    python -m tabnanny {env:LINTABLE}
    python igor.py check_eol
    # If this command fails, see the comment at the top of doc/cmd.rst
    python -m cogapp -cP --check --verbosity=1 doc/*.rst
    python -m cogapp -cP --check --verbosity=1 .github/workflows/*.yml
    #doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst
    python -m pylint --notes= {env:LINTABLE}
    check-manifest --ignore 'doc/sample_html/*,.treerc'
    # If 'build -q' becomes a thing (https://github.com/pypa/build/issues/188),
    # this can be simplifed:
    python igor.py quietly "python -m build"
    twine check dist/*

[testenv:mypy]
deps =
    -r requirements/mypy.pip

setenv =
    {[testenv]setenv}
    C1=coverage/__init__.py coverage/__main__.py coverage/annotate.py coverage/bytecode.py
    C2=coverage/cmdline.py coverage/collector.py coverage/config.py coverage/context.py coverage/control.py
    C3=coverage/data.py coverage/debug.py coverage/disposition.py coverage/env.py coverage/exceptions.py coverage/execfile.py
    C4=coverage/files.py coverage/inorout.py coverage/jsonreport.py coverage/lcovreport.py coverage/misc.py coverage/multiproc.py coverage/numbits.py
    C5=coverage/parser.py coverage/phystokens.py coverage/plugin.py coverage/plugin_support.py coverage/python.py
    C6=coverage/report.py coverage/results.py coverage/sqldata.py coverage/summary.py
    C7=coverage/templite.py coverage/tomlconfig.py coverage/types.py coverage/version.py coverage/xmlreport.py
    # not done yet: html.py pytracer.py
    TYPEABLE_C={env:C1} {env:C2} {env:C3} {env:C4} {env:C5} {env:C6} {env:C7}
    T1=tests/conftest.py tests/coveragetest.py tests/goldtest.py tests/helpers.py tests/mixins.py tests/osinfo.py
    T2=tests/test_annotate.py tests/test_api.py tests/test_arcs.py tests/test_cmdline.py tests/test_collector.py tests/test_concurrency.py
    T3=tests/test_config.py tests/test_context.py tests/test_coverage.py tests/test_data.py tests/test_debug.py tests/test_execfile.py
    T4=tests/test_filereporter.py tests/test_files.py tests/test_goldtest.py tests/test_html.py tests/test_json.py tests/test_lcov.py
    T5=tests/test_misc.py tests/test_mixins.py tests/test_numbits.py tests/test_oddball.py tests/test_parser.py tests/test_phystokens.py
    T6=tests/test_process.py tests/test_python.py tests/test_report.py tests/test_results.py tests/test_setup.py
    T7=tests/test_summary.py tests/test_templite.py tests/test_testing.py tests/test_venv.py tests/test_version.py tests/test_xml.py
    # not done yet: test_plugins.py
    TYPEABLE_T={env:T1} {env:T2} {env:T3} {env:T4} {env:T5} {env:T6} {env:T7}
    TYPEABLE={env:TYPEABLE_C} {env:TYPEABLE_T}

commands =
    # PYVERSIONS
    mypy --python-version=3.7 {env:TYPEABLE}
    mypy --python-version=3.12 {env:TYPEABLE}

[gh-actions]
# PYVERSIONS
python =
    3.7: py37
    3.8: py38
    3.9: py39
    3.10: py310
    3.11: py311
    3.12: py312
    pypy-3: pypy3