-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathtox.ini
133 lines (123 loc) · 3.62 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
# Copyright 2021 Canonical Ltd.
# See LICENSE file for licensing details.
[tox]
skipsdist=True
skip_missing_interpreters = True
envlist = lint, static-{charm,lib}, unit
[vars]
src_path = {toxinidir}/src
tst_path = {toxinidir}/tests
lib_path = {toxinidir}/lib/charms/alertmanager_k8s
all_path = {[vars]src_path} {[vars]tst_path} {[vars]lib_path}
[testenv]
basepython = python3
setenv =
PYTHONPATH = {toxinidir}:{toxinidir}/lib:{[vars]src_path}
PYTHONBREAKPOINT=ipdb.set_trace
PY_COLORS=1
passenv =
PYTHONPATH
HOME
PATH
CHARM_BUILD_DIR
MODEL_SETTINGS
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
[testenv:fmt]
description = Apply coding style standards to code
deps =
black
isort
commands =
isort {[vars]all_path}
black {[vars]all_path}
[testenv:lint]
description = Check code against coding style standards
deps =
black
flake8 < 5
flake8-docstrings
flake8-copyright
flake8-builtins
pyproject-flake8
pep8-naming
isort
codespell
commands =
codespell {[vars]lib_path}
codespell . --skip .git --skip .tox --skip build --skip lib --skip venv --skip .mypy_cache
# pflake8 wrapper supports config from pyproject.toml
pflake8 {[vars]all_path}
isort --check-only --diff {[vars]all_path}
black --check --diff {[vars]all_path}
[testenv:static-{charm,lib,unit,integration}]
description = Run static analysis checks
setenv =
unit: MYPYPATH = {[vars]tst_path}/unit
integration: MYPYPATH = {[vars]tst_path}/integration
deps =
mypy
types-PyYAML
types-requests
types-setuptools
types-toml
charm: -r{toxinidir}/requirements.txt
lib: ops
unit: {[testenv:unit]deps}
integration: {[testenv:integration]deps}
commands =
charm: mypy {[vars]src_path} {posargs}
lib: mypy --python-version 3.5 {[vars]lib_path} {posargs}
unit: mypy {[vars]tst_path}/unit {posargs}
integration: mypy {[vars]tst_path}/integration {posargs}
[testenv:reqs]
description = Check for missing or unused requirements
deps =
-r{toxinidir}/requirements.txt
pip-check-reqs
# pip-check-reqs does not yet work with recent pip
pip<=21.1.3
commands =
pip-missing-reqs {toxinidir}/src {toxinidir}/lib --requirements-file={toxinidir}/requirements.txt
pip-extra-reqs {toxinidir}/src {toxinidir}/lib --requirements-file={toxinidir}/requirements.txt
[testenv:unit]
description = Run unit tests
deps =
pytest
coverage[toml]
deepdiff
hypothesis
validators
-r{toxinidir}/requirements.txt
commands =
coverage run \
--source={[vars]src_path},{[vars]lib_path} \
-m pytest -v --tb native --log-cli-level=INFO -s {posargs} {[vars]tst_path}/unit
coverage report
[testenv:integration]
description = Run integration tests
deps =
deepdiff
juju
pytest
pytest-operator
pytest-httpserver
commands =
pytest -v --tb native --log-cli-level=INFO -s {posargs} {toxinidir}/tests/integration
[testenv:integration-bundle]
description = Run cos-lite bundle integration tests but with alertmanager built from source
bundle_dir = {envtmpdir}/cos-lite-bundle
deps =
# deps from cos-lite bundle - these are needed here because running pytest on the bundle
jinja2
juju
pytest
pytest-operator
allowlist_externals =
git
commands =
git clone --single-branch --depth=1 https://github.com/canonical/cos-light-bundle.git {[testenv:integration-bundle]bundle_dir}
# run pytest on the integration tests of the cos-lite bundle, but override alertmanager with
# path to this source dir
pytest -v --tb native --log-cli-level=INFO -s --alertmanager={toxinidir} {posargs} {[testenv:integration-bundle]bundle_dir}/tests/integration