summary refs log tree commit diff
path: root/tox.ini
blob: b4ce400edfc112a6ef43b1d74a418bca946a8571 (plain) (blame)
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
[tox]
envlist = py37, py38, py39, py310, check_codestyle, check_isort

# we require tox>=2.3.2 for the fix to https://github.com/tox-dev/tox/issues/208
minversion = 2.3.2

# the tox-venv plugin makes tox use python's built-in `venv` module rather than
# the legacy `virtualenv` tool. `virtualenv` embeds its own `pip`, `setuptools`,
# etc, and ends up being rather unreliable.
requires = tox-venv

[base]
deps =
    python-subunit
    junitxml
    coverage

    # this is pinned since it's a bit of an obscure package.
    coverage-enable-subprocess==1.0

    # cyptography 2.2 requires setuptools >= 18.5
    #
    # older versions of virtualenv (?) give us a virtualenv with the same
    # version of setuptools as is installed on the system python (and tox runs
    # virtualenv under python3, so we get the version of setuptools that is
    # installed on that).
    #
    # anyway, make sure that we have a recent enough setuptools.
    setuptools>=18.5

    # we also need a semi-recent version of pip, because old ones fail to
    # install the "enum34" dependency of cryptography.
    pip>=10

# directories/files we run the linters on.
# TODO: this is now out of date; we will remove as part of poetry migration.
lint_targets =
    setup.py
    synapse
    tests
    # annoyingly, black doesn't find these so we have to list them
    scripts-dev
    stubs
    contrib
    synmark
    .ci
    docker

# default settings for all tox environments
[testenv]
deps =
    {[base]deps}
extras =
    # install the optional dependendencies for tox environments without
    # '-noextras' in their name
    # (this requires tox 3)
    !noextras: all
    test

setenv =
    # use a postgres db for tox environments with "-postgres" in the name
    # (see https://tox.readthedocs.io/en/3.20.1/config.html#factors-and-factor-conditional-settings)
    postgres: SYNAPSE_POSTGRES = 1

    # this is used by .coveragerc to refer to the top of our tree.
    TOP={toxinidir}

passenv = *

commands =
    # the "env" invocation enables coverage checking for sub-processes. This is
    # particularly important when running trial with `-j`, since that will make
    # it run tests in a subprocess, whose coverage would otherwise not be
    # tracked.  (It also makes an explicit `coverage run` command redundant.)
    #
    # (See https://coverage.readthedocs.io/en/coverage-5.3/subprocess.html.
    # Note that the `coverage.process_startup()` call is done by
    # `coverage-enable-subprocess`.)
    #
    # we use "env" rather than putting a value in `setenv` so that it is not
    # inherited by other tox environments.
    #
    /usr/bin/env COVERAGE_PROCESS_START={toxinidir}/.coveragerc "{envbindir}/trial" {env:TRIAL_FLAGS:} {posargs:tests} {env:TOXSUFFIX:}

# As of twisted 16.4, trial tries to import the tests as a package (previously
# it loaded the files explicitly), which means they need to be on the
# pythonpath. Our sdist doesn't include the 'tests' package, so normally it
# doesn't work within the tox virtualenv.
#
# As a workaround, we tell tox to do install with 'pip -e', which just
# creates a symlink to the project directory instead of unpacking the sdist.
#
# (An alternative to this would be to set PYTHONPATH to include the project
# directory. Note two problems with this:
#
#   - if you set it via `setenv`, then it is also set during the 'install'
#     phase, which inhibits unpacking the sdist, so the virtualenv isn't
#     useful for anything else without setting PYTHONPATH similarly.
#
#   - `synapse` is also loaded from PYTHONPATH so even if you only set
#     PYTHONPATH for the test phase, we're still running the tests against
#     the working copy rather than the contents of the sdist. So frankly
#     you might as well use -e in the first place.
#
# )
usedevelop=true



[testenv:benchmark]
deps =
    {[base]deps}
    pyperf
setenv =
    SYNAPSE_POSTGRES = 1
commands =
    python -m synmark {posargs:}

[testenv:check_codestyle]
extras = lint
commands =
    python -m black --check --diff {[base]lint_targets}
    flake8 {[base]lint_targets} {env:PEP8SUFFIX:}

[testenv:check_isort]
extras = lint
commands = isort -c --df {[base]lint_targets}

[testenv:mypy]
deps =
    {[base]deps}
extras = all,mypy
commands = mypy