-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathtox.ini
154 lines (143 loc) · 4.48 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
# 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/prometheus_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
[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
commands =
codespell .
ruff check {[vars]all_path}
black --check --diff {[vars]all_path}
[testenv:static-{charm,lib,unit,integration}]
description = Run static analysis checks
deps =
cosl
pyright
charm: -r{toxinidir}/requirements.txt
lib: ops
charm: responses==0.20.0
charm: httpcore==0.14.7
unit: {[testenv:unit]deps}
integration: {[testenv:integration]deps}
integration: pytest-operator==1.0.0b1
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'
unit: pyright {[vars]tst_path}/unit {posargs}
integration: pyright {[vars]tst_path}/integration {posargs}
allowlist_externals = /usr/bin/env
[testenv:unit]
description = Run unit tests
deps =
cosl
fs
pytest
pytest-asyncio
coverage[toml]
responses==0.20.0
-r{toxinidir}/requirements.txt
.[lib_pydeps]
deepdiff
# deepdiff 8.0 requires numpy, see https://github.com/seperman/deepdiff/issues/478
numpy
httpcore==0.14.7
commands =
python -m doctest {[vars]src_path}/charm.py
/usr/bin/env sh -c 'stat cos-tool-amd64 > /dev/null 2>&1 || curl -L -O https://github.com/canonical/cos-tool/releases/latest/download/cos-tool-amd64'
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
setenv =
{[testenv]setenv}
JUJU_VERSION = 3.0.3
allowlist_externals =
/usr/bin/env
# 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]
description = Scenario tests
deps =
pytest
ops[testing]
-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
pytest-interface-tester > 2.0.0
-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 =
aiohttp
deepdiff
# deepdiff 8.0 requires numpy, see https://github.com/seperman/deepdiff/issues/478
numpy
.[lib_pydeps]
# Libjuju needs to track the juju version
juju ~= 3.1.0
lightkube >= 0.11
lightkube-models >= 1.22.0.4
pytest
pytest-operator
prometheus-api-client
tenacity
# https://github.com/juju/python-libjuju/issues/1184
websockets < 14.0
minio
commands =
pytest -vv --tb native --log-cli-level=INFO --color=yes -s {posargs} {toxinidir}/tests/integration
allowlist_externals =
/usr/bin/env
[testenv:integration-lma]
description = Run lma bundle integration tests but with prometheus built from source
lma_bundle_dir = {envtmpdir}/lma-light-bundle
deps =
# deps from lma-bundle - these are needed here because will be running pytest on lma-bundle
jinja2
juju
pytest
pytest-operator
allowlist_externals =
git
commands =
git clone --single-branch --depth=1 https://github.com/canonical/lma-light-bundle.git {[testenv:integration-lma]lma_bundle_dir}
# run pytest on the integration tests of the lma bundle, but override alertmanager with path to
# this source dir
pytest -v --tb native --log-cli-level=INFO -s --prometheus={toxinidir} {posargs} {[testenv:integration-lma]lma_bundle_dir}/tests/integration