# Copyright 2019 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 = cover, flake8, pylint

[testenv]

[testenv:cover]
basepython = python3
deps =
  nose2
  -rrequirements.txt
  -rtest-requirements.txt
commands =
  coverage erase
  nose2 -C --coverage n2vc --plugin nose2.plugins.junitxml -s n2vc
  coverage report --omit='*tests*'
  coverage html -d ./cover --omit='*tests*'
  coverage xml -o coverage.xml --omit='*tests*'

[testenv:pylint]
basepython = python3
deps =
  pylint
  -rrequirements.txt
commands =
  pylint -E n2vc

[testenv:black]
basepython = python3
deps =
  black
commands =
  black --check --diff n2vc

[testenv:flake8]
basepython = python3
deps =
  flake8
  -rrequirements.txt
commands =
  flake8 n2vc

[flake8]
# W503 is invalid PEP-8
max-line-length = 88
show-source = True
ignore = W503,E203
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,devops_stages/*,.rst

[testenv:build]
deps =
  stdeb
  setuptools-version-command
commands = python3 setup.py --command-packages=stdeb.command bdist_deb
