-
Notifications
You must be signed in to change notification settings - Fork 2
/
tox.ini
223 lines (199 loc) · 5.35 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
[tox]
envlist = py34,py35,py36,py37,flake8,pylint,doc8,packaging,docs
minversion = 2.7.0
## Configure test + coverage process
[pytest]
addopts = -ra -q --color=yes
norecursedirs = .* *.egg* config docs dist build
xfail_strict = True
rsyncdirs = src tests
looponfailroots = src tests
[coverage:run]
branch = True
source =
src
tests
omit = **/_[a-zA-Z0-9]*.py
[coverage:report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Don't complain if tests don't hit defensive assertion code:
pass
raise AssertionError
raise NotImplementedError
[testenv]
description = Run tests with coverage with pytest under current Python env
setenv = COVERAGE_FILE=.coverage.{envname}
passenv = CI TRAVIS TRAVIS_*
deps =
-rtests/requirements.txt
coverage
usedevelop = True
commands =
pip install -U {toxinidir}/tests/functional/gradient_descent_algo
coverage run --parallel-mode setup.py test --addopts '--timeout=180 {posargs}'
coverage combine
coverage report -m
[testenv:demo_random]
description = Run a demo with random search algorithm
setenv = COVERAGE_FILE=.coverage.random
passenv = CI TRAVIS TRAVIS_*
deps =
-rtests/requirements.txt
coverage
commands =
coverage run --parallel-mode src/kleio/core/cli/__init__.py hunt --config tests/functional/demo/kleio_config_random.yaml tests/functional/demo/black_box.py -x~'normal(30, 5)'
coverage combine
coverage report -m
[testenv:final-coverage]
description = Combine coverage data across environments (run after tests)
skip_install = True
setenv = COVERAGE_FILE=.coverage
passenv = {[testenv]passenv}
deps = coverage
commands =
coverage erase
coverage combine
coverage report -m
coverage xml
[testenv:codecov]
description = Upload coverage data to codecov (only run on CI)
setenv =
{[testenv:final-coverage]setenv}
passenv = {[testenv]passenv}
deps = codecov
commands = codecov --required
## Setup development process
[testenv:devel]
description = Incremental devel env command, defaults to running tests
deps =
-rtests/requirements.txt
usedevelop = True
commands =
pip install -U {toxinidir}/tests/functional/gradient_descent_algo
python setup.py test --addopts '-vvv --exitfirst --capture=no --looponfail {posargs}'
## Configure linters
[flake8]
count = True
show-source = True
doctests = True
# select = E, F, W, C90, I, D, B, B902
ignore =
# blank-line after doc summaries (annoying for modules' doc)
D205
# conflicts with D211: No blank lines allowed before class docstring
D203
# do not enforce first-line-period at module docs
D400
# conflicts with E133: closing bracket is missing indentation
E123
exclude =
.tox,
.git,
__pycache__,
docs,
config,
build,
dist,
*.pyc,
*.egg-info,
.cache,
.eggs,
src/kleio/core/_version.py,
src/kleio/core/utils/_appdirs.py
max-line-length = 100
# McCabe complexity checker
max-complexity = 20
# flake8-import-order: style
import-order-style = google
# flake8-import-order: local module name checker
application-import-names = kleio, versioneer
[testenv:flake8]
description = Use flake8 linter to impose standards on the project
basepython = python3.6
skip_install = true
deps =
flake8 == 3.5.0
flake8-import-order == 0.15
flake8-docstrings == 1.1.0
flake8-bugbear == 17.4.0
commands =
flake8 docs/ src/kleio/ tests/ setup.py
[testenv:pylint]
description = Perform static analysis and output code metrics
basepython = python3.6
skip_install = false
deps =
pylint == 1.8.1
commands =
pylint src/kleio/core src/kleio/client src/kleio/algo
[doc8]
max-line-length = 100
file-encoding = utf-8
[testenv:doc8]
description = Impose standards on *.rst documentation files
basepython = python3.6
skip_install = true
deps =
-rdocs/requirements.txt
doc8 == 0.8.0
commands =
doc8 docs/src/
[testenv:packaging]
description = Check whether README.rst is reST and missing from MANIFEST.in
basepython = python3.6
deps =
check-manifest
readme_renderer
commands =
check-manifest
python setup.py check -r -s
[testenv:lint]
description = Lint code and docs against some standard standards
basepython = python3.6
skip_install = false
deps =
{[testenv:flake8]deps}
{[testenv:pylint]deps}
{[testenv:doc8]deps}
{[testenv:packaging]deps}
commands =
{[testenv:flake8]commands}
{[testenv:pylint]commands}
{[testenv:doc8]commands}
{[testenv:packaging]commands}
## Documentation macros
[testenv:docs]
description = Invoke sphinx to build documentation and API reference
basepython = python3.6
deps =
-rdocs/requirements.txt
commands =
sphinx-build -E -W --color -c docs/src/ -b html docs/src/ docs/build/html
sphinx-build -E -W --color -c docs/src/ -b man docs/src/ docs/build/man
[testenv:serve-docs]
description = Host project's documentation and API reference in localhost
basepython = python3.6
skip_install = true
changedir = docs/build/html
deps =
commands =
python -m http.server 8000 --bind 127.0.0.1
## Release tooling (to be removed in favor of CI with CD)
[testenv:build]
basepython = python3.6
skip_install = true
deps =
wheel
setuptools
commands =
python setup.py -q sdist bdist_wheel
[testenv:release]
basepython = python3.6
skip_install = true
deps =
{[testenv:build]deps}
twine >= 1.5.0
commands =
{[testenv:build]commands}
twine upload --skip-existing dist/*