909bf76ffb
If a developer uses an operating system with Python 3 as a default, tox will use the Python 3 interpreter to run the tests. However, this introduces some errors since some standard library modules and classes are changed or missing in Python 3. This will cause some false failiures. By enforcing the base python to Python 2, the tests are ensured to be running on the same interpreter regardless of the operating system's default. Change-Id: Ied142fe44a38ee3119d02921ef680fd09ce62f0e
105 lines
3.3 KiB
INI
105 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
|
|
basepython = python2
|
|
|
|
[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}
|