-
Notifications
You must be signed in to change notification settings - Fork 2
/
tox.ini
135 lines (120 loc) · 3.01 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
# Copyright 2021 Canonical Ltd.
# See LICENSE file for licensing details.
[tox]
isolated_build = True
skip_missing_interpreters = True
envlist = lint, static-{charm,lib}, unit-{k8s,machine}, scenario
[vars]
src_path = {toxinidir}/src
tst_path = {toxinidir}/tests
all_path = {[vars]src_path} {[vars]tst_path}
[testenv]
basepython = python3
setenv =
PYTHONPATH = {toxinidir}:{toxinidir}/lib:{[vars]src_path}
PYTHONBREAKPOINT=ipdb.set_trace
[testenv:fmt]
skip_install=True
description = Apply coding style standards to code
deps =
black
isort
commands =
isort {[vars]all_path}
black {[vars]all_path}
[testenv:pack-k8s]
skip_install=True
description = Pack as k8s charm
allowlist_externals =
cp
charmcraft
commands =
cp {toxinidir}/k8s_metadata.yaml {toxinidir}/metadata.yaml
charmcraft pack
rm {toxinidir}/metadata.yaml
[testenv:pack-machine]
skip_install=True
description = Pack as machine charm
allowlist_externals =
cp
charmcraft
commands =
cp {toxinidir}/machine_metadata.yaml {toxinidir}/metadata.yaml
charmcraft pack
rm {toxinidir}/metadata.yaml
[testenv:lint]
skip_install=True
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 . --skip .git --skip .tox --skip build --skip lib --skip venv --skip .mypy_cache --skip *.svg
# 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}]
skip_install=True
description = Run static analysis checks
deps =
pyright
-r {toxinidir}/requirements.txt
lib: ops
commands =
pyright {[vars]src_path}
[testenv:unit]
description = Run charm unit tests
deps =
pytest
pytest-subtests
coverage[toml]
deepdiff
fs
toml
responses
allowlist_externals = cp
commands =
# render as k8s
cp k8s_metadata.yaml metadata.yaml
coverage run \
--source={[vars]src_path} \
-m pytest -v --tb native --log-cli-level=INFO -s {posargs} {[vars]tst_path}/unit/k8s
coverage report -m
[testenv:integration]
skip_install=True
description = Run integration tests
deps =
aiohttp
asyncstdlib
# Libjuju needs to track the juju version
juju ~= 3.0.0
pytest
prometheus-api-client
pytest-operator
allowlist_externals = cp
commands =
# use a better solution when we actually have machine code
cp k8s_metadata.yaml metadata.yaml
pytest -v --tb native --log-cli-level=INFO -s {posargs} {[vars]tst_path}/integration
[testenv:scenario]
description = Run scenario tests
deps =
pytest
ops-scenario @ git+https://github.com/canonical/ops-scenario@relation-unit-and-app
commands =
pytest -v --tb native --log-cli-level=INFO -s {posargs} {[vars]tst_path}/scenario
[testenv:check]
skip_install=True
depends =
lint
static
[coverage:run]
relative_files = True