102 lines
3.2 KiB
INI
102 lines
3.2 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 \
|
|
--ignore-errors \
|
|
--force; \
|
|
ansible-playbook -i 'localhost ansible-connection=local,' \
|
|
--syntax-check \
|
|
--list-tasks \
|
|
{toxinidir}/playbooks/*.yml"
|
|
|
|
[testenv:inventory]
|
|
commands =
|
|
python {toxinidir}/tests/test_inventory.py
|
|
|
|
[testenv:linters]
|
|
commands =
|
|
{[testenv:pep8]commands}
|
|
{[testenv:bashate]commands}
|
|
{[testenv:ansible-lint]commands}
|
|
{[testenv:ansible-syntax]commands}
|
|
{[testenv:inventory]commands} |