# Operator charm (with zaza): tox.ini [tox] envlist = pep8,py3 skipsdist = True # NOTE: Avoid build/test env pollution by not enabling sitepackages. sitepackages = False # NOTE: Avoid false positives by not skipping missing interpreters. skip_missing_interpreters = False # NOTES: # * We avoid the new dependency resolver by pinning pip < 20.3, see # https://github.com/pypa/pip/issues/9187 # * Pinning dependencies requires tox >= 3.2.0, see # https://tox.readthedocs.io/en/latest/config.html#conf-requires # * It is also necessary to pin virtualenv as a newer virtualenv would still # lead to fetching the latest pip in the func* tox targets, see # https://stackoverflow.com/a/38133283 # * It is necessary to declare setuptools as a dependency otherwise tox will # fail very early at not being able to load it. The version pinning is in # line with `pip.sh`. requires = pip virtualenv setuptools # NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci minversion = 3.2.0 [testenv] setenv = VIRTUAL_ENV={envdir} PYTHONHASHSEED=0 CHARM_DIR={envdir} TEST_JUJU3=1 # Note(mylesjp): Force Juju 3 install_command = pip install {opts} {packages} commands = stestr run --slowest {posargs} allowlist_externals = git bash charmcraft {toxinidir}/rename.sh passenv = HOME TERM CS_* OS_* TEST_* deps = -c {env:TEST_CONSTRAINTS_FILE:https://raw.githubusercontent.com/openstack-charmers/zaza-openstack-tests/master/constraints/constraints-noble.txt} -r{toxinidir}/test-requirements.txt [testenv:py35] basepython = python3.5 # python3.5 is irrelevant on a bionic+ charm. commands = /bin/true [testenv:py36] basepython = python3.6 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py37] basepython = python3.7 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py38] basepython = python3.8 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py39] basepython = python3.9 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py310] basepython = python3.10 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py311] basepython = python3.11 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py312] basepython = python3.12 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:py3] basepython = python3 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:pep8] basepython = python3 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = flake8 {posargs} src unit_tests tests [testenv:cover] # Technique based heavily upon # https://github.com/openstack/nova/blob/master/tox.ini basepython = python3 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt setenv = {[testenv]setenv} PYTHON=coverage run commands = coverage erase stestr run --slowest {posargs} coverage combine coverage html -d cover coverage xml -o cover/coverage.xml coverage report [coverage:run] branch = True concurrency = multiprocessing parallel = True source = . omit = .tox/* */charmhelpers/* unit_tests/* [testenv:venv] basepython = python3 commands = {posargs} [testenv:build] basepython = python3 deps = # NOTE(lourot): charmcraft 1.0.0 used to generate # nova-compute-nvidia-vgpu.charm, which is the behaviour expected by OSCI. # However charmcraft 1.2.1 now generates # nova-compute-nvidia-vgpu_ubuntu-20.04-amd64.charm instead. In order to keep # the old behaviour we rename the file at the end. commands = charmcraft clean charmcraft -v pack {toxinidir}/rename.sh charmcraft clean [testenv:func-noop] basepython = python3 commands = functest-run-suite --help [testenv:func] basepython = python3 commands = functest-run-suite --keep-model [testenv:func-smoke] basepython = python3 commands = functest-run-suite --keep-model --smoke [testenv:func-dev] basepython = python3 commands = functest-run-suite --keep-model --dev [testenv:func-target] basepython = python3 commands = functest-run-suite --keep-model --bundle {posargs} [flake8] # Ignore E902 because the unit_tests directory is missing in the built charm. ignore = E402,E226,W503,W504,E902