-
Notifications
You must be signed in to change notification settings - Fork 17
/
tox.ini
146 lines (134 loc) · 4.21 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
# Copyright 2021 Canonical Ltd.
# See LICENSE file for licensing details.
[tox]
skipsdist=True
skip_missing_interpreters = True
envlist = lint, static-{charm,lib}, unit, scenario
[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
ruff
commands =
ruff --fix {[vars]all_path}
black {[vars]all_path}
[testenv:lint]
description = Check code against coding style standards
deps =
black
ruff
codespell
commands =
codespell {[vars]lib_path}
codespell . --skip .git --skip .tox --skip build --skip lib --skip venv --skip .mypy_cache
ruff {[vars]all_path}
black --check --diff {[vars]all_path}
[testenv:static-{charm,lib}]
description = Run static analysis checks
deps =
pyright
charm: -r{toxinidir}/requirements.txt
lib: ops
setenv =
PYRIGHT_PYTHON_FORCE_VERSION = latest
commands =
charm: pyright {[vars]src_path} {posargs}
lib: pyright --pythonversion 3.5 {[vars]lib_path} {posargs}
lib: /usr/bin/env sh -c 'for m in $(git diff main --name-only {[vars]lib_path}); do if ! git diff main $m | grep -q "+LIBPATCH\|+LIBAPI"; then echo "You forgot to bump the version on $m!"; exit 1; fi; done'
allowlist_externals = /usr/bin/env
[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
passenv =
PYTHONPATH
deps =
pytest
coverage[toml]
deepdiff
hypothesis
validators>=0.21.2
-r{toxinidir}/requirements.txt
pydantic < 2.0 # from traefik_k8s.v2.ingress
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
# Added a '-disabled' suffix so CI won't fail on scenario tests, due to
# - https://github.com/canonical/ops-scenario/issues/48
# - https://github.com/canonical/ops-scenario/issues/49
[testenv:scenario-disabled]
description = Scenario tests
deps =
pytest
pydantic < 2
ops-scenario
ops < 2.5.0 # https://github.com/canonical/ops-scenario/issues/48
-r{toxinidir}/requirements.txt
pydantic < 2.0 # from traefik_k8s.v2.ingress
commands =
pytest -v --tb native {[vars]tst_path}/scenario --log-cli-level=INFO -s {posargs}
[testenv:interface]
description = Run interface tests
deps =
pytest
ops-scenario
pytest-interface-tester > 0.3
-r{toxinidir}/requirements.txt
commands =
pytest -v --tb native {[vars]tst_path}/interface --log-cli-level=INFO -s {posargs}
[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