[tox]
minversion = 2.9.1
skipsdist = True
envlist = py3,pep8

[testenv]
basepython = python3
usedevelop = True
install_command = pip install -U {opts} {packages}
passenv = OS_* STORYBOARD_*
setenv =
    VIRTUAL_ENV={envdir}
    OS_LOG_CAPTURE={env:OS_LOG_CAPTURE:true}
    OS_STDOUT_CAPTURE={env:OS_STDOUT_CAPTURE:true}
    OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:true}
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands = stestr run {posargs}
           stestr slowest
whitelist_externals = bash

[testenv:sqlite]
setenv =
    {[testenv]setenv}
    STORYBOARD_TEST_DB=sqlite:///{envtmpdir}

[testenv:pep8]
commands = flake8

[testenv:venv]
commands = {posargs}

[testenv:docs]
deps = -r{toxinidir}/doc/requirements.txt
commands =
    rm -rf doc/html doc/build
    rm -rf doc/source/apidoc doc/source/api
    sphinx-build -W -b html doc/source doc/build/html
whitelist_externals = rm

[testenv:cover]
setenv =
    {[testenv]setenv}
    PYTHON=coverage run --source storyboard --parallel-mode
commands =
    stestr run {posargs}
    coverage combine
    coverage html -d cover
    coverage xml -o cover/coverage.xml

[flake8]
# E125 and E128 are ignored on purpose, they are invalid pep8
# W503 is ignored on purpose, it is no longer valid pep8
# The following rules should either be addressed or determined to be
# skippable long term.
# E265 is ignored to make switch to newer hacking easier
# H216 is ignored to allow use of the mock library instead of unittest.mock
# H405 is ignored to make switch to newer hacking easier
ignore = E125,E128,E265,H216,H405,W503
builtins = _
show-source = True
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build

[testenv:bindep]
# Do not install any requirements. We want this to be fast and work even if
# system dependencies are missing, since it's used to tell you what system
# dependencies are missing! This also means that bindep must be installed
# separately, outside of the requirements files.
deps = bindep
commands = bindep test

[testenv:lpimport]
# The Launchpad bug import tool uses launchpadlib, which is not a typical
# runtime dependency of anything else in StoryBoard
deps = launchpadlib
commands = storyboard-migrate {posargs}

[hacking]
import_exceptions = storyboard._i18n
