# Copyright 2020 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.
[tox]
envlist = pep8
skipsdist = True

[testenv]
setenv = VIRTUAL_ENV={envdir}
         PYTHONHASHSEED=0
whitelist_externals = juju
                      sleep
passenv = HOME TERM CS_API_* OS_* AMULET_*
install_command =
  pip install {opts} {packages}

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

[testenv:lint]
basepython = python3
deps =
    black
    yamllint
    flake8
commands =
    black --check --diff . --exclude "release/|.tox/"
    yamllint .
    flake8 reactive/ --max-line-length=100

[testenv:pep8]
basepython = python3
deps=charm-tools
commands = charm-proof

[testenv:venv]
commands = {posargs}
