![Jesse Pretorius](/assets/img/avatar_default.png)
As many scripts are deployed as templates and use use jinja templating, this will often fail. This test is reasonably safely ignored as the syntax error will be identified when executing the resulting script. Change-Id: If0be1b40c4bc547ea63347370b4d4421ac77f40e
116 lines
3.5 KiB
INI
116 lines
3.5 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
|
|
|
|
[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]
|
|
deps = flake8
|
|
whitelist_externals = bash
|
|
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]
|
|
deps =
|
|
bashate
|
|
whitelist_externals = bash
|
|
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]
|
|
deps =
|
|
ansible>1.9,<2.0
|
|
ansible-lint
|
|
whitelist_externals = bash
|
|
commands =
|
|
# Perform an Ansible lint check
|
|
bash -c "ansible-lint {toxinidir}/playbooks/*.yml"
|
|
|
|
[testenv:ansible-syntax]
|
|
deps =
|
|
ansible>1.9,<2.0
|
|
whitelist_externals = bash
|
|
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 \
|
|
--ignore-errors \
|
|
--force; \
|
|
ansible-playbook -i 'localhost ansible-connection=local,' \
|
|
--syntax-check \
|
|
--list-tasks \
|
|
{toxinidir}/playbooks/*.yml"
|
|
|
|
[testenv:linters]
|
|
deps =
|
|
{[testenv:pep8]deps}
|
|
{[testenv:bashate]deps}
|
|
{[testenv:ansible-lint]deps}
|
|
# note that the ansible-syntax deps are omitted on purpose as the
|
|
# ansible-lint env contains duplicate items in its dep list
|
|
whitelist_externals = bash
|
|
commands =
|
|
{[testenv:pep8]commands}
|
|
{[testenv:bashate]commands}
|
|
{[testenv:ansible-lint]commands}
|
|
{[testenv:ansible-syntax]commands}
|