openstack-ansible/tox.ini
Chris Smart 2b422dbad1 [DOCS] Fix up validation failures
Attempting to build the documentation with "tox -e docs" results in a
failure due to several lint errors. This patch fixes those errors so
that the docs build successfully.

The 'docs' target is also added to the 'linters' target chain so that
the doc8 linting is executed as part of the lint checks to ensure that
these issues don't re-occur.

Change-Id: I9e1bf2cabe9a0591963d1afadbeb24cb614e0b27
2016-07-25 13:54:02 +01:00

190 lines
5.5 KiB
INI

[tox]
minversion = 2.0
skipsdist = True
envlist = docs,linters,releasenotes
[testenv]
usedevelop = True
basepython = python2.7
install_command =
pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}
deps =
-r{toxinidir}/test-requirements.txt
passenv =
HOME
http_proxy
HTTP_PROXY
https_proxy
HTTPS_PROXY
no_proxy
NO_PROXY
whitelist_externals =
bash
rm
sudo
setenv =
VIRTUAL_ENV={envdir}
[testenv:docs]
commands=
bash -c "rm -rf doc/build"
doc8 doc
python setup.py build_sphinx
[doc8]
# Settings for doc8:
extensions = .rst
[testenv:releasenotes]
# NOTE(sdague): this target does not use constraints because
# upstream infra does not yet support it. Once that's fixed, we can
# drop the install_command.
install_command =
pip install -U --force-reinstall {opts} {packages}
commands =
sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
# environment used by the -infra templated docs job
[testenv:venv]
# NOTE(jaegerandi): this target does not use constraints because
# upstream infra does not yet support it. Once that's fixed, we can
# drop the install_command.
install_command =
pip install -U --force-reinstall {opts} {packages}
commands =
{posargs}
[testenv:pep8]
commands =
# Run hacking/flake8 check for all python files
bash -c "grep --recursive --binary-files=without-match \
--files-with-match '^.!.*python$' \
--exclude-dir .eggs \
--exclude-dir .git \
--exclude-dir .tox \
--exclude-dir *.egg-info \
--exclude-dir doc \
{toxinidir} | xargs flake8 --verbose"
[flake8]
# Ignores the following rules due to how ansible modules work in general
# F403 'from ansible.module_utils.basic import *' used;
# unable to detect undefined names
# H303 No wildcard (*) import.
ignore=F403,H303
[testenv:bashate]
commands =
# Run bashate check for all bash scripts
# Ignores the following rules:
# E003: Indent not multiple of 4 (we prefer to use multiples of 2)
# 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 "grep --recursive --binary-files=without-match \
--files-with-match '^.!.*\(ba\)\?sh$' \
--exclude-dir .tox \
--exclude-dir .git \
{toxinidir} | xargs bashate --error . --verbose --ignore=E003,E006,E040"
[testenv:ansible]
deps =
{[testenv]deps}
ansible==2.1.0
ansible-lint>=2.7.0,<3.0.0
setenv =
{[testenv]setenv}
ANSIBLE_HOST_KEY_CHECKING = False
ANSIBLE_SSH_CONTROL_PATH = /tmp/%%h-%%r
ANSIBLE_ACTION_PLUGINS = {homedir}/.ansible/roles/plugins/action
ANSIBLE_CALLBACK_PLUGINS = {homedir}/.ansible/roles/plugins/callback
ANSIBLE_FILTER_PLUGINS = {homedir}/.ansible/roles/plugins/filter
ANSIBLE_LOOKUP_PLUGINS = {homedir}/.ansible/roles/plugins/lookup
ANSIBLE_LIBRARY = {homedir}/.ansible/roles/plugins/library
ANSIBLE_ROLES_PATH = {homedir}/.ansible/roles
commands =
rm -rf {homedir}/.ansible/roles
ansible-galaxy install \
--role-file={toxinidir}/ansible-role-requirements.yml \
--force
[testenv:ansible-lint]
deps =
{[testenv:ansible]deps}
setenv =
{[testenv:ansible]setenv}
commands =
{[testenv:ansible]commands}
# Perform an Ansible lint check
ansible-lint --exclude {homedir}/.ansible/roles/sshd \
{toxinidir}/tests/bootstrap-aio.yml
ansible-lint {toxinidir}/playbooks/setup-everything.yml
[testenv:ansible-syntax]
deps =
{[testenv:ansible]deps}
setenv =
{[testenv:ansible]setenv}
commands =
{[testenv:ansible]commands}
# Perform an Ansible syntax check
ansible-playbook -i 'localhost ansible-connection=local,' \
--syntax-check \
--list-tasks \
{toxinidir}/tests/bootstrap-aio.yml
ansible-playbook -i 'localhost ansible-connection=local,' \
--syntax-check \
--list-tasks \
-e 'force_containers_destroy=yes' \
{toxinidir}/playbooks/setup-everything.yml
[testenv:inventory]
# Use a fixed seed since some inventory tests rely on specific ordering
setenv =
{[testenv]setenv}
PYTHONHASHSEED = 100
commands =
coverage erase
coverage run {toxinidir}/tests/test_inventory.py
coverage report --show-missing --include={toxinidir}/playbooks/inventory/*
[testenv:linters]
deps =
{[testenv:ansible]deps}
setenv =
{[testenv:ansible]setenv}
commands =
{[testenv:pep8]commands}
{[testenv:bashate]commands}
{[testenv:ansible-lint]commands}
{[testenv:ansible-syntax]commands}
{[testenv:inventory]commands}
{[testenv:docs]commands}
[testenv:functional]
# NOTE(odyssey4me): this target fails with the default install_command
# due to the lack of an upper-constraints.txt file in the repo. We
# do not want or need the file in-repo, nor do we want anything
# installed into the tox venv for this target, so we override both
# the install_command and the deps.
install_command =
pip install -U --force-reinstall {opts} {packages}
deps =
commands =
sudo {toxinidir}/scripts/gate-check-commit.sh