[tox]
minversion = 1.6
envlist = docs, linters
skipdist = True

[testenv]
usedevelop = True
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/queens} {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
deps = -r{toxinidir}/test-requirements.txt
whitelist_externals = bash

[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:docs]
commands = python setup.py build_sphinx

[testenv:bashate]
commands =
# Run bashate check for all bash scripts
# Ignores the following rules:
# E006: Line longer than 79 columns (as many scripts use jinja
#       templating, this is very difficult)
# E040: Syntax error determined using `bash -n` (as many scripts
#       use jinja templating, this will often fail and the syntax
#       error will be discovered in execution anyway)
    bash -c "git ls-files | xargs grep --binary-files=without-match \
        --files-with-match '^.!.*\(ba\)\?sh$' \
        --exclude-dir .tox \
        --exclude-dir .git \
        | xargs bashate --error . --verbose --ignore=E006,E040"

[testenv:pep8]
commands =
    # Run hacking/flake8 check for all python files
    bash -c "git ls-files | grep -v releasenotes |  xargs grep --binary-files=without-match \
        --files-with-match '^.!.*python$' \
        --exclude-dir .tox \
        --exclude-dir .git \
        --exclude-dir .eggs \
        --exclude-dir *.egg-info \
        --exclude-dir dist \
        --exclude-dir *lib/python* \
        --exclude-dir doc \
        | xargs flake8 --verbose"

[testenv:ansible-lint]
basepython=python2
commands =
  bash ci-scripts/ansible-lint.sh

[testenv:linters]
deps =
    -r{toxinidir}/test-requirements.txt
    -r{toxinidir}/ansible-requirements.txt
commands =
    {[testenv:bashate]commands}
    {[testenv:pep8]commands}
    {[testenv:ansible-lint]commands}

[testenv:releasenotes]
whitelist_externals = bash
commands = bash -c ci-scripts/releasenotes_tox.sh

[testenv:venv]
commands = {posargs}

[flake8]
# E123, E125 skipped as they are invalid PEP-8.
# E265 deals withs paces inside of comments
show-source = True
ignore = E123,E125,E265
builtins = _
