Nolan Brubaker 608640c52a Add missing line number report, fix coverage dep
The coverage missing line number report will be helpful in the gate to
show exactly what lines were not exercised by the existing tests.

Also, when coverage was added to the test requirements file it appeared
to have broken the `inventory` tox environment because coverage was also
specified directly in the tox.ini file. Even if it does not break the
gate, being specified in both places is at best redundant.

Change-Id: Ic94313018f565e186a93c991906fbfc802a84034
2016-04-21 18:12:02 -04:00

104 lines
3.3 KiB
INI

[tox]
minversion = 1.6
skipsdist = True
envlist = docs,linters,releasenotes
[testenv]
usedevelop = True
install_command = pip install -U {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
deps = -r{toxinidir}/test-requirements.txt
whitelist_externals = bash
[testenv:releasenotes]
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[testenv:docs]
commands=
python setup.py build_sphinx
# environment used by the -infra templated docs job
[testenv:venv]
deps = -r{toxinidir}/test-requirements.txt
commands = {posargs}
# Run hacking/flake8 check for all python files
[testenv:pep8]
commands =
bash -c "grep -Irl \
-e '!/usr/bin/env python' \
-e '!/bin/python' \
-e '!/usr/bin/python' \
--exclude-dir '.*' \
--exclude-dir 'doc' \
--exclude-dir '*.egg' \
--exclude-dir '*.egg-info' \
--exclude-dir '*templates' \
--exclude 'tox.ini' \
--exclude '*.sh' \
{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-lint]
commands =
# Perform an Ansible lint check
bash -c "ansible-lint {toxinidir}/playbooks/*.yml"
[testenv:ansible-syntax]
commands =
# Perform an Ansible syntax check
bash -c "mkdir -p {envtmpdir}/ansible; \
export ANSIBLE_CONFIG={envtmpdir}/ansible/ansible.cfg; \
export ANSIBLE_ROLES_PATH={envtmpdir}/ansible/roles; \
sed 's|/etc/ansible|{envtmpdir}/ansible|' \
{toxinidir}/tests/ansible.cfg | \
tee {envtmpdir}/ansible/ansible.cfg; \
sed 's|path: /etc/ansible|path: {envtmpdir}/ansible|' \
{toxinidir}/ansible-role-requirements.yml | \
tee {envtmpdir}/ansible/ansible-role-requirements.yml; \
ansible-galaxy install \
--role-file={envtmpdir}/ansible/ansible-role-requirements.yml \
--roles-path={envtmpdir}/ansible/roles \
--force; \
ansible-playbook -i 'localhost ansible-connection=local,' \
--syntax-check \
--list-tasks \
{toxinidir}/playbooks/*.yml"
[testenv:inventory]
commands =
coverage erase
coverage run {toxinidir}/tests/test_inventory.py
coverage report --show-missing --include={toxinidir}/playbooks/inventory/*
[testenv:linters]
commands =
{[testenv:pep8]commands}
{[testenv:bashate]commands}
{[testenv:ansible-lint]commands}
{[testenv:ansible-syntax]commands}
{[testenv:inventory]commands}