-
Notifications
You must be signed in to change notification settings - Fork 17
/
tox.ini
149 lines (137 loc) · 4.23 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
# 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 check --fix {[vars]all_path}
black {[vars]all_path}
[testenv:lint]
description = Check code against coding style standards
deps =
black
ruff
codespell<2.3.0 # https://github.com/codespell-project/codespell/issues/3430
commands =
codespell {[vars]lib_path}
codespell . --skip .git --skip .tox --skip build --skip lib --skip venv --skip .mypy_cache
ruff check {[vars]all_path}
black --check --diff {[vars]all_path}
[testenv:static-{charm,lib}]
description = Run static analysis checks
deps =
pyright
-r{toxinidir}/requirements.txt
setenv =
PYRIGHT_PYTHON_FORCE_VERSION = latest
commands =
charm: pyright {[vars]src_path} {posargs}
lib: pyright --pythonversion 3.8 {[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
setenv =
{[testenv]setenv}
JUJU_VERSION=3.0.3
passenv =
PYTHONPATH
deps =
pytest
coverage[toml]
deepdiff
# deepdiff 8.0 requires numpy, see https://github.com/seperman/deepdiff/issues/478
numpy
hypothesis
validators>=0.21.2
-r{toxinidir}/requirements.txt
cosl
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:scenario]
description = Scenario tests
deps =
pytest
ops-scenario<7
cosl
-r{toxinidir}/requirements.txt
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
# deepdiff 8.0 requires numpy, see https://github.com/seperman/deepdiff/issues/478
numpy
# https://github.com/juju/python-libjuju/issues/1025
juju<=3.3.0,>=3.0
pytest
pytest-operator
pytest-httpserver
sh
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