network/tox.ini
Jiri Kucera 7af5797b7d Reuse virtual environments
Virtual environments names are now based on the version of Python
interpreter that is used. This prevents creation of redundant
environments, that is there will be only one[1] virtual environment
per Python interpreter, which saves the time by preventing the
installation of the same packages more than once.

[1] In Travis CI, this is easy to implement by using the
    TRAVIS_PYTHON_VERSION environment variable. Locally, as there
    is no information about what version of Python interpreter is
    used when creating a virtual environment in tox, there may be
    more virtual environments per interpreter (for example, env-3.6
    and env-molecule may be both based on Python 3.6).
2019-08-01 00:19:07 +02:00

235 lines
5.7 KiB
INI

[tox]
envlist =
py{26,27,36,37,38},
black, pylint, flake8,
molecule_{lint,syntax,test},
extra
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:py26]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:2.6}
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]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:2.7}
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]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:3.6}
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]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:3.7}
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]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:3.8}
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}
[testenv:black]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:3.6}
basepython = python3.6
deps =
black
commands =
black --check --diff --include "^[^.].*\.py$" --exclude "/(\.[^.].*|tests/roles)/" .
[testenv:pylint]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:2.7}
basepython = python2.7
setenv =
{[base]setenv}
deps =
colorama
pylint>=1.8.4
ansible
commands =
{envpython} ./run_pylint.py --errors-only {posargs}
[testenv:flake8]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:2.7}
basepython = python2.7
deps =
flake8>=3.5
whitelist_externals = flake8
commands =
flake8 --statistics {posargs} .
[testenv:coveralls]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:2.7}
basepython = python2.7
passenv = TRAVIS TRAVIS_*
deps =
coveralls
changedir = {[base]changedir}
commands =
coveralls
# 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
# selinux
#
[molecule]
deps =
docker
molecule
{env:LSR_MOLECULE_DEPS:}
[testenv:molecule_lint]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:molecule}
deps =
{[molecule]deps}
commands_pre =
molecule --version
ansible --version
commands =
molecule {posargs} lint
[testenv:molecule_syntax]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:molecule}
deps =
{[molecule]deps}
commands =
molecule {posargs} syntax
[testenv:molecule_test]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:molecule}
deps =
{[molecule]deps}
commands =
molecule {posargs} test
# 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/config.sh` a snippet:
#
# export LSR_TEXTRA_DEPS='PyYAML'
# export LSR_TEXTRA_DIR='tests'
# export LSR_TEXTRA_CMD='./ensure_non_running_provider.py'
#
[testenv:extra]
envdir = {toxworkdir}/env-{env:TRAVIS_PYTHON_VERSION:extra}
deps =
{env:LSR_TEXTRA_DEPS:}
passenv = *
changedir = {toxinidir}/{env:LSR_TEXTRA_DIR:.}
commands =
{env:LSR_TEXTRA_CMD:python --version}
[pytest]
addopts = -rxs
[flake8]
show_source = true
max-line-length = 88
ignore = E402,W503
[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