network/tox.ini
Jiri Kucera 8102fd6443 Refactor Travis CI setup
This commit introduces the refactored Travis CI setup and tox.ini
to fullfil the need to have common CI setup across all roles.

The current proposal and discussion can be found at:
https://github.com/linux-system-roles/template/issues/4
2019-07-17 11:18:50 +02:00

232 lines
5.4 KiB
INI

[tox]
skipsdist = true
skip_missing_interpreters = true
[testenv]
basepython = python3
# List common dependencies for Python interpreters here:
deps =
py{26,27,36,37,38}: pytest-cov
py{27,36,37,38}: pytest>=3.5.1
py{26,27}: mock
py26: pytest
[base]
passenv = *
setenv =
PYTHONPATH = {toxinidir}/library:{toxinidir}/module_utils
LC_ALL = C
changedir = {toxinidir}/tests
covtarget = {toxinidir}/library --cov {toxinidir}/module_utils
pytesttarget = .
[testenv:black]
deps =
black
commands =
black --check --diff --include "^[^.].*\.py$" --exclude "/(\.[^.].*|tests/roles)/" .
[testenv:py26]
install_command =
pip install {opts} {packages}
list_dependencies_command =
pip freeze
basepython = python2.6
passenv = {[base]passenv}
setenv =
{[base]setenv}
changedir = {[base]changedir}
commands =
pytest --durations=5 \
--cov={[base]covtarget} \
--cov-report=html:htmlcov-py26 \
--cov-report=term \
{posargs} \
{[base]pytesttarget}
[testenv:py27]
basepython = python2.7
passenv = {[base]passenv}
setenv =
{[base]setenv}
changedir = {[base]changedir}
commands =
pytest --durations=5 \
--cov={[base]covtarget} \
--cov-report=html:htmlcov-py27 \
--cov-report=term \
{posargs} \
{[base]pytesttarget}
[testenv:py36]
basepython = python3.6
passenv = {[base]passenv}
setenv =
{[base]setenv}
changedir = {[base]changedir}
commands =
pytest --durations=5 \
--cov={[base]covtarget} \
--cov-report=html:htmlcov-py36 \
--cov-report=term \
{posargs} \
{[base]pytesttarget}
[testenv:py37]
basepython = python3.7
passenv = {[base]passenv}
setenv =
{[base]setenv}
changedir = {[base]changedir}
commands =
pytest --durations=5 \
--cov={[base]covtarget} \
--cov-report=html:htmlcov-py37
--cov-report=term \
{posargs} \
{[base]pytesttarget}
[testenv:py38]
basepython = python3.8
passenv = {[base]passenv}
setenv =
{[base]setenv}
changedir = {[base]changedir}
commands =
pytest --durations=5 \
--cov={[base]covtarget} \
--cov-report=html:htmlcov-py38 \
--cov-report=term \
{posargs} \
{[base]pytesttarget}
# Custom role settings may set LSR_PYLINT_DIRS environment variable if there is
# a reason to have other than default directories (library/ module_utils/ and
# tests/). For example, network role should have this set like
#
# LSR_PYLINT_DIRS="library/network_connections.py module_utils/network_lsr tests/unit/test_network_connections.py"
#
[testenv:pylint]
basepython = python2.7
setenv =
{[base]setenv}
deps =
pylint>=1.8.4
ansible
commands =
pylint --errors-only \
{posargs} \
{env:LSR_PYLINT_DIRS:library module_utils tests}
[testenv:flake8]
basepython = python2.7
deps =
flake8>=3.5
whitelist_externals = flake8
commands =
flake8 --statistics {posargs} .
[testenv:coveralls]
basepython = python2.7
passenv = TRAVIS TRAVIS_*
deps =
coveralls
changedir = {[base]changedir}
commands =
coveralls
# Here we provide a way how a role can add its custom command to be run. Such
# extra command is run at the end of each testenv run and is driven by
# environment variables. Involved environment variables are:
#
# LSR_TEXTRA_DEPS
# - contains dependency needed by commands to run smoothly; if more than
# one dependency is needed, use external file together with '-r' option
# (see PEP 508)
#
# LSR_TEXTRA_DIR
# - directory to which to cd
#
# LSR_TEXTRA_CMD
# - custom command to be run
#
# Example: `network` system role need to run `./tests/ensure_non_running_provider.py`
# to check for the existence of `*_provider.yml` playbooks. The script
# is run in Python 3.6.
#
# To make this possible, we add to `.travis/before_install.sh` a snippet:
#
# if [ x${LSRENV} = x3.6 ]; then
# LSR_TEXTRA_DEPS='PyYAML'
# LSR_TEXTRA_DIR='tests'
# LSR_TEXTRA_CMD='./ensure_non_running_provider.py'
# fi
#
[testenv:extra]
passenv = *
deps =
{env:LSR_TEXTRA_DEPS}
changedir = {toxinidir}/{env:LSR_TEXTRA_DIR:.}
commands =
{env:LSR_TEXTRA_CMD:python --version}
# LSR_MOLECULE_DEPS may contain aditional Molecule dependencies. For example,
# in `network` system role, LSR_MOLECULE_DEPS can be set as
#
# LSR_MOLECULE_DEPS='-rmolecule_requirements.txt'
#
# where `molecule_requirements.txt` contains two lines:
#
# jmespath
# git+https://github.com/tyll/selinux-pypi-shim@fulllocation
#
[molecule]
deps =
docker
molecule
{env:LSR_MOLECULE_DEPS}
[testenv:molecule_lint]
deps =
{[molecule]deps}
commands_pre =
molecule --version
ansible --version
commands =
molecule {posargs} lint
[testenv:molecule_syntax]
deps =
{[molecule]deps}
commands =
molecule {posargs} syntax
[testenv:molecule_test]
deps =
{[molecule]deps}
commands =
molecule {posargs} test
[pytest]
addopts = -rxs
[flake8]
show_source = true
max-line-length = 88
ignore = E402,W503
[pylint]
max-line-length = 88
disable = wrong-import-position
[pycodestyle]
max-line-length = 88
[travis]
python =
2.6: py26,extra
2.7: py27,coveralls,flake8,pylint,extra
3.5: molecule_lint,molecule_syntax,molecule_test,extra
3.6: py36,black,extra
3.7: py37,extra
3.8: py38,extra