# 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.
#
# 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]
skipsdist = True
envlist = unit, lint
sitepackages = False
skip_missing_interpreters = False

[testenv]
basepython = python3.8
setenv =
  PYTHONHASHSEED=0
  PYTHONPATH = {toxinidir}/src
  CHARM_NAME = mon

[testenv:build]
passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY
whitelist_externals =
  charmcraft
  rm
  unzip
commands =
  rm -rf release mon.charm
  charmcraft build
  unzip mon.charm -d release

[testenv:unit]
commands =
  coverage erase
  stestr run --slowest --test-path=./tests --top-dir=./
  coverage combine
  coverage html -d cover
  coverage xml -o cover/coverage.xml
  coverage report
deps =
  coverage
  stestr
  mock
  ops
setenv =
  {[testenv]setenv}
  PYTHON=coverage run

[testenv:lint]
deps =
  black
  yamllint
  flake8
commands =
  black --check --diff . --exclude "build/|.tox/|mod/|lib/|release/"
  yamllint .
  flake8 . --max-line-length=100 --ignore="E501,W503,W504,F722" --exclude "build/ .tox/ mod/ lib/ release/"
[coverage:run]
branch = True
concurrency = multiprocessing
parallel = True
source =
  .
omit =  
  .tox/*
  tests/*
