# Copyright 2021 Canonical Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
##

[tox]
envlist = pep8
skipsdist = True

[testenv]
setenv = VIRTUAL_ENV={envdir}
         PYTHONHASHSEED=0
whitelist_externals = juju
passenv = HOME TERM CS_API_* OS_* AMULET_*
deps = -r{toxinidir}/test-requirements.txt
install_command =
  pip install {opts} {packages}

[testenv:build]
basepython = python3
passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY
setenv = CHARM_LAYERS_DIR = /tmp
         CHARM_INTERFACES_DIR = /tmp/canonical-osm/charms/interfaces/
whitelist_externals = git
                      charm
                      mkdir
                      rm
                      mv
                      cp
commands =
    rm -rf /tmp/canonical-osm /tmp/osm-common
    rm -rf release/
    git clone https://git.launchpad.net/canonical-osm /tmp/canonical-osm
    git clone https://git.launchpad.net/charm-osm-common /tmp/osm-common
    charm build . --build-dir /tmp
    mv /tmp/kafka-k8s/ release/

[testenv:black]
basepython = python3
deps =
    black
    yamllint
    flake8
commands =
    black --check --diff .
    yamllint .
    flake8 reactive/ --max-line-length=88
    flake8 tests/ --max-line-length=88
[testenv:pep8]
basepython = python3
deps=charm-tools
commands = charm-proof

[testenv:func-noop]
basepython = python3
commands =
    true

[testenv:func]
basepython = python3
commands = functest-run-suite


[testenv:func-smoke]
basepython = python3
commands = functest-run-suite --keep-model --smoke

[testenv:venv]
commands = {posargs}
