[tox]
minversion = 3.18.0
envlist = py3,pep8

[testenv]
deps =
    -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/test-requirements.txt
setenv =
    PYTHONDONTWRITEBYTECODE=1
commands =
    stestr run --slowest {posargs}

[testenv:pep8]
description =
    Run style checks.
deps =
    pre-commit
    {[testenv:mypy]deps}
commands =
    pre-commit run -a
    {[testenv:mypy]commands}

[testenv:mypy]
description =
    Run type checks.
deps =
    {[testenv]deps}
    mypy
commands =
    mypy --cache-dir="{envdir}/mypy_cache" {posargs:futurist}

[testenv:venv]
commands = {posargs}

[testenv:cover]
setenv =
    PYTHON=coverage run --source $project --parallel-mode
commands =
    coverage erase
    find . -type f -name "*.pyc" -delete
    stestr run {posargs}
    coverage combine
    coverage html -d cover
    coverage xml -o cover/coverage.xml
    coverage report

[testenv:docs]
allowlist_externals =
    rm
deps =
    -r{toxinidir}/doc/requirements.txt
commands =
    rm -rf doc/build
    sphinx-build -E -W --keep-going -b html doc/source doc/build/html

[testenv:releasenotes]
allowlist_externals =
    rm
deps = {[testenv:docs]deps}
commands =
    rm -rf releasenotes/build
    sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html

[testenv:debug]
commands = oslo_debug_helper {posargs}

[flake8]
show-source = True
# We only enable the hacking (H) checks
select = H
# H301 Black will put commas after imports that can't fit on one line
# H405 Multi-line docstrings are fine
ignore = H301,H405
exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build
