-
Notifications
You must be signed in to change notification settings - Fork 11
/
tox.ini
130 lines (116 loc) · 4.25 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
# Copyright 2023 Canonical Ltd.
# See LICENSE file for licensing details.
[flake8]
max-line-length = 100
[tox]
skipsdist = True
skip_missing_interpreters = True
envlist = fmt, lint, unit, integration
[vars]
all_path = {[vars]src_path} {[vars]tst_path}
src_path = {toxinidir}/src/
tst_path = {toxinidir}/tests/
[testenv]
passenv =
PYTHONPATH
CHARM_BUILD_DIR
MODEL_SETTINGS
KUBECONFIG
setenv =
PYTHONPATH = {toxinidir}:{toxinidir}/lib:{[vars]src_path}
PYTHONBREAKPOINT=ipdb.set_trace
PY_COLORS=1
[testenv:update-requirements]
allowlist_externals =
bash
find
pip-compile
commands =
; we must preserve the order of compilation, since each *.in file depends on some *.txt file.
; For example, requirements-unit.in depends on requirements.txt and we must compile first
; requirements.txt to ensure that requirements-unit.txt get the same dependency as the requirements.txt
bash -c 'for pattern in "requirements.in" "requirements-fmt.in" "requirements*.in"; do find . -type f -name "$pattern" -exec bash -c "cd \$(dirname "{}") && pip-compile --resolver=backtracking \$(basename "{}")" \;; done'
deps =
pip-tools
# Pin due to https://github.com/jazzband/pip-tools/issues/2131
pip==24.2
description = Update requirements files by executing pip-compile on all requirements*.in files, including those in subdirs.
[testenv:fmt]
commands =
isort {[vars]all_path}
black {[vars]all_path}
deps =
-r requirements-fmt.txt
description = Apply coding style standards to code
[testenv:lint]
commands =
# uncomment the following line if this charm owns a lib
# codespell {[vars]lib_path}
codespell {toxinidir}/. --skip {toxinidir}/./.git --skip {toxinidir}/./.tox \
--skip {toxinidir}/./build --skip {toxinidir}/./lib --skip {toxinidir}/./venv \
--skip {toxinidir}/./.mypy_cache \
--skip {toxinidir}/./icon.svg --skip *.json.tmpl
# pflake8 wrapper supports config from pyproject.toml
pflake8 {[vars]all_path}
isort --check-only --diff {[vars]all_path}
black --check --diff {[vars]all_path}
deps =
-r requirements-lint.txt
description = Check code against coding style standards
[testenv:unit]
commands =
coverage run --source={[vars]src_path} \
-m pytest --ignore={[vars]tst_path}integration -vv --tb native {posargs}
coverage report
deps =
-r requirements-unit.txt
description = Run unit tests
[testenv:integration]
commands =
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}integration/test_deploy_runners.py --keep-models --log-cli-level=INFO -s {posargs}
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}integration/test_charm.py --log-cli-level=INFO -s {posargs}
deps =
-r requirements-integration.txt
description = Run integration tests
[testenv:aws-integration]
commands =
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}integration/test_deploy_aws.py --keep-models --log-cli-level=INFO -s {posargs}
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}integration/test_charm.py --log-cli-level=INFO -s {posargs}
deps =
-r requirements-integration.txt
description = Run integration tests
[testenv:bundle-test]
commands =
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}integration/test_bundle.py --keep-models --log-cli-level=INFO -s {posargs}
deps =
aiohttp
pytest-operator
tenacity
ops>=2.3.0
juju==3.0.4
description = Run bundle test
[testenv:tflint]
allowlist_externals =
tflint
commands =
tflint --chdir=terraform --recursive
description = Check Terraform code against coding style standards
[testenv:test_bundle_deployment-{2.15,latest}]
commands =
pytest -v --tb native --asyncio-mode=auto {[vars]tst_path}/integration/test_bundle_deployment.py --keep-models --log-cli-level=INFO -s {posargs}
setenv =
2.15: BUNDLE_PATH = "./releases/2.15/stable/mlflow/bundle.yaml"
2.15: KUBEFLOW_CHANNEL = 1.9/stable
2.15: RESOURCE_DISPATCHER_CHANNEL = 2.0/stable
latest: BUNDLE_PATH = "./releases/latest/edge/mlflow/bundle.yaml"
latest: KUBEFLOW_CHANNEL = 1.9/stable
latest: RESOURCE_DISPATCHER_CHANNEL = 2.0/stable
deps =
aiohttp
lightkube
pytest-operator
tenacity
ops>=2.3.0
2.15: juju<4.0.0
latest: juju<4.0.0
description = Test bundle deployment