-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathtox.ini
139 lines (120 loc) · 3.99 KB
/
tox.ini
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
# Can be run through "tox.sh" for convenience
[tox]
# Required for `tox -p auto` to work; here's the commit we're after:
# https://github.com/tox-dev/tox/pull/1202
minversion = 3.8.0
build_version = 1.2.2.post1
mypy_version = 1.15.0
ruff_version = 0.10.0
pytest_version = 8.3.5
setuptools_version = 76.0.0
envlist=
version.py
ruff-format
mypy
ruff-check
shellcheck
installtest
pytest
package, test-package
test-wheel
test-build-from-clean-clone
[testenv]
skip_install = true
basepython = python3
allowlist_externals = /bin/bash
[testenv:version.py]
deps =
setuptools == {[tox]setuptools_version}
commands =
# This keeps px/version.py up to date
/bin/bash -c 'python3 -c "import setup; setup.update_version_py()"'
[testenv:ruff-format]
deps =
ruff=={[tox]ruff_version}
# Format locally, check in CI and fail on not-formatted code
commands = /bin/bash -c 'if [ "{env:CI:}" ] ; then CHECK="--check --diff" ; fi ; ruff format $CHECK ./*.py ./*/*.py'
[testenv:mypy]
# NOTE: In theory mypy should probably depend on ruff-format to get line numbers
# in any error messages right. But since mypy tends to finish last, and being a
# bit off isn't the end of the world, let's not depend on ruff-format for now
# and hope nobody notices.
depends = version.py
deps =
mypy=={[tox]mypy_version}
pytest=={[tox]pytest_version}
types-setuptools==67.7.0.1 # Matches what was on Johan's laptop 2023-05-08
types-python-dateutil==2.8.19
commands =
/bin/bash -c 'mypy --pretty ./*.py ./*/*.py'
[testenv:ruff-check]
# Depend on ruff-format to not complain about formatting errors
depends = version.py, ruff-format
deps =
ruff=={[tox]ruff_version}
pytest=={[tox]pytest_version}
# Auto-fix locally but not in CI
commands =
/bin/bash -c 'FIX="--fix" ; if [ "{env:CI:}" ] ; then FIX="--no-fix" ; fi ; ruff check $FIX ./*.py ./*/*.py'
[testenv:shellcheck]
commands =
/bin/bash -c 'shellcheck ./*.sh ./*/*.sh'
[testenv:installtest]
allowlist_externals = {toxinidir}/tests/installtest.sh
commands =
{toxinidir}/tests/installtest.sh
[testenv:pytest]
depends = version.py, ruff-format
deps =
pytest == {[tox]pytest_version}
pytest-avoidance == 0.3.0
python-dateutil >= 2.6.1
commands =
pytest --durations=10 --color=yes tests
[testenv:package]
# Create {toxinidir}/px.pex
depends = version.py, ruff-format
allowlist_externals = {toxinidir}/devbin/make-executable-zip.sh
deps =
# Used by the make-executable-zip.sh script
virtualenv
commands =
{toxinidir}/devbin/make-executable-zip.sh
[testenv:test-package]
depends = package
commands =
# Verify we have the correct shebang
/bin/bash -c 'head -n1 {toxinidir}/px.pex | grep -Eq "^\#!/usr/bin/env python3$"'
# Test that there are no natively compiled dependencies. They make
# distribution a lot harder. If this triggers, fix your dependencies!
/bin/bash -c '! unzip -qq -l "{toxinidir}/px.pex" "*.so"'
# Run pex and ensure it doesn't fail
python -Werror {toxinidir}/px.pex
# Test version string vs git
/bin/bash -x -c 'test "$("{toxinidir}/px.pex" --version)" = "$(git describe --dirty)"'
[testenv:test-wheel]
# Test installing using pip
depends = version.py, ruff-format
allowlist_externals =
/bin/bash
/bin/rm
deps =
setuptools == {[tox]setuptools_version}
build == {[tox]build_version}
commands =
# clean up build/ and dist/ folders
/bin/rm -rf build dist
# build wheel, must match the test in test_clone_and_build.py
python -m build --outdir {toxinidir}/dist
# Start testing it
/bin/bash -c "pip uninstall --yes pxpx"
/bin/bash -c "pip install {toxinidir}/dist/pxpx-*.whl"
# Verify we can run the px we just installed using pip
px tox
# Test version string vs git
/bin/bash -x -c 'test "$(px --version)" = "$(git describe --dirty)"'
[testenv:test-build-from-clean-clone]
deps =
setuptools == {[tox]setuptools_version}
build == {[tox]build_version}
commands = python3 {toxinidir}/devbin/test_clone_and_build.py