[tox]
minversion = 2.0
skipsdist = True
envlist = pep8,py27,py37,tht

[testenv]
usedevelop = True
deps =
       -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
       -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands = python setup.py testr --slowest --testr-args='{posargs}'

[testenv:venv]
basepython = python3
commands = {posargs}

[testenv:pep8]
basepython = python3
whitelist_externals =
    bash
commands =
    python ./tools/process-templates.py
    python ./network/endpoints/build_endpoint_map.py --check
    python ./tools/yaml-validate.py .
    bash -c ./tools/roles-data-validation.sh
    bash -c ./tools/check-up-to-date.sh
    flake8 --exclude releasenotes --ignore {[testenv:flake8]ignore}

[testenv:flake8]
basepython = python3
# E125 is deliberately excluded. See
# https://github.com/jcrocholl/pep8/issues/126. It's just wrong.
#
# Most of the whitespace related rules (E12* and E131) are excluded
# because while they are often useful guidelines, strict adherence to
# them ends up causing some really odd code formatting and forced
# extra line breaks. Updating code to enforce these will be a hard sell.
#
# H405 is another one that is good as a guideline, but sometimes
# multiline doc strings just don't have a natural summary
# line. Rejecting code for this reason is wrong.
#
# E251 Skipped due to https://github.com/jcrocholl/pep8/issues/301
#
# The following two are also ignored that we don't think it is useful.
# W503 line break before binary operator
# W504 line break after binary operator
#
# The following rules are currently ignored, but will be enforced
# in the future
# E501 line too long
# E731 do not assign a lambda expression, use a def
# W605 invalid escape sequence
ignore = E121,E122,E123,E124,E125,E126,E127,E128,E129,E131,E251,H405,W503,W504,E501,E731,W605
exclude = releasenotes

[testenv:templates]
basepython = python3
commands = python ./tools/process-templates.py

[testenv:clean]
basepython = python3
commands = python ./tools/process-templates.py -c

[testenv:releasenotes]
basepython = python3
whitelist_externals =
    bash
commands = bash -c tools/releasenotes_tox.sh

[testenv:cover]
basepython = python3
commands = python setup.py test --coverage --coverage-package-name=tripleo_heat_templates --testr-args='{posargs}'

[testenv:genconfig]
basepython = python3
commands =
           python ./tools/process-templates.py
           python ./tripleo_heat_templates/environment_generator.py sample-env-generator/

[testenv:genroledata]
basepython = python3
whitelist_externals =
    bash
commands =
    bash -c tools/roles-data-generate-samples.sh

[testenv:lower-constraints]
basepython = python3
deps =
  -c{toxinidir}/lower-constraints.txt
  -r{toxinidir}/test-requirements.txt
  -r{toxinidir}/requirements.txt

[testenv:tht]
basepython = python3
usedevelop = True
setenv =
    ANSIBLE_FORCE_COLOR=1
    ANSIBLE_INVENTORY={toxinidir}/test/hosts.ini
    ANSIBLE_THT_FOLDER={toxinidir}
    ANSIBLE_NOCOWS=1
    ANSIBLE_RETRY_FILES_ENABLED=0
    ANSIBLE_STDOUT_CALLBACK=debug
    PY_COLORS=1
    VIRTUAL_ENV={envdir}
    # Avoid 2020-01-01 warnings: https://github.com/pypa/pip/issues/6207
    PYTHONWARNINGS=ignore:DEPRECATION::pip._internal.cli.base_command
    PIP_DISABLE_PIP_VERSION_CHECK=1
passenv =
    ANSIBLE_*
deps =
  -r{toxinidir}/test-ansible-requirements.txt
whitelist_externals =
    bash
commands_pre =
    pip install -q bindep
    bindep test
commands =
    pytest --color=no \
           --html={envlogdir}/reports.html \
           --self-contained-html \
           {toxinidir}/tripleo_heat_templates/tests/test_tht_ansible_syntax.py
