blob: 5bd7b8a797c63d3b71fa1611eea3dded600b3b3d [file] [log] [blame]
[tox]
envlist = py{pypy3.5,3.5,3.6,3.7,3.8},checks,lint,pylint,mypy,docs,coverage
skipsdist = true
[testenv]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
deps =
-r{toxinidir}/requirements-tests.txt
fasteners
libvirt-python==5.9.0
setuptools==42.0.2
basepython =
pypypy3.5: pypy3.5
pypypy3: pypy3
py3.5: python3.5
py3.6: python3.6
{py3.7,docs,checks,lint,pylint,mypy,coverage,docs,py3.7-dist,py3.7-dist-wheel}: python3.7
{py3.8,py3.8-windows}: python3.8
commands = cp libcloud/test/secrets.py-dist libcloud/test/secrets.py
python setup.py test
whitelist_externals = cp
bash
scripts/*.sh
[testenv:py3.8-windows]
deps =
-r{toxinidir}/requirements-tests.txt
fasteners
setuptools==42.0.2
[testenv:py3.7-dist]
# Verify library installs without any dependencies when using python setup.py
# install
skipdist = True
recreate = True
# NOTE: We intentionally set empty deps to ensure it works on a clean
# environment without any dependencies
deps =
# Ensure those packages are not installed. If they are, it indicates unclean
# environment so those checks won't work correctly
commands = bash -c "pip show requests && exit 1 || exit 0"
bash -c "pip show typing && exit 1 || exit 0"
bash -c "pip show enum34 && exit 1 || exit 0"
bash -c "pip show apache-libcloud || exit 0"
python setup.py install
pip show apache-libcloud
# Verify all dependencies were installed
pip show requests
bash -c "pip show typing && exit 1 || exit 0"
bash -c "pip show enum34 && exit 1 || exit 0"
[testenv:py3.7-dist-wheel]
# Verify library installs without any dependencies when using built wheel
skipdist = True
recreate = True
# NOTE: We intentionally set empty deps to ensure it works on a clean
# environment without any dependencies
deps =
# Ensure those packages are not installed. If they are, it indicates unclean
# environment so those checks won't work correctly
commands = bash -c "pip show requests && exit 1 || exit 0"
bash -c "pip show typing && exit 1 || exit 0"
bash -c "pip show enum34 && exit 1 || exit 0"
bash -c "pip show apache-libcloud || exit 0"
bash -c "rm -rf dist/apache_libcloud-*.whl"
pip install wheel
python setup.py bdist_wheel
bash -c "pip install dist/apache_libcloud-*.whl"
# Verify all dependencies were installed
pip show requests
bash -c "pip show typing && exit 1 || exit 0"
bash -c "pip show enum34 && exit 1 || exit 0"
[testenv:docs]
deps = pyopenssl
fasteners
rstcheck
changedir = docs
commands = pip install sphinx~=1.6.0
rstcheck --report warning ../CHANGES.rst
python ../contrib/generate_provider_feature_matrix_table.py
sphinx-apidoc -d 4 ../libcloud/ -o apidocs/
/bin/bash -c "ls apidocs/modules.rst && (grep orphan apidocs/modules.rst || sed -i '1i :orphan:\n' apidocs/modules.rst) || (exit 0)"
sphinx-build -W -b html -d {envtmpdir}/doctrees . _build/html
[testenv:docs-travis]
# Note: We don't build API docs on Travis since it causes build failures because
# those API docs files are not included anywhere.
deps = pyopenssl
fasteners
rstcheck
changedir = docs
commands = pip install sphinx~=1.6.0
rstcheck --report warning ../README.rst
rstcheck --report warning ../CHANGES.rst
rstcheck --report warning ../CONTRIBUTING.rst
python ../contrib/generate_provider_feature_matrix_table.py
/bin/bash -c "ls apidocs/modules.rst && (grep orphan apidocs/modules.rst || sed -i '1i :orphan:\n' apidocs/modules.rst) || (exit 0)"
sphinx-build -W -b html -d {envtmpdir}/doctrees . _build/html
[testenv:provider-tables]
basepython: python3.7
deps = typing
pyopenssl
fasteners
rstcheck
requests
commands = python ./contrib/generate_provider_feature_matrix_table.py
[testenv:scrape-and-publish-provider-prices]
basepython: python3.7
deps = requests
demjson
setenv =
PYTHONPATH={toxinidir}
passenv = GCE_API_KEY PRICING_DATA_BUCKET_NAME AWS_REGION AWS_ACCESS_KEY_ID AWS_ACCESS_KEY_SECRET
commands =
python contrib/scrape-gce-prices.py --all
python contrib/scrape-gce-prices.py
python contrib/scrape-ec2-prices.py
python contrib/scrape-azure-prices.py
# We also store the SHa512 sum so users can check if something has changed
# by caching and checking the value of the shasum file
bash -c "(cd libcloud/data/ ; sha256sum pricing.json > {toxinidir}/libcloud/data/pricing.json.sha256)"
bash -c "(cd libcloud/data/ ; sha512sum pricing.json > {toxinidir}/libcloud/data/pricing.json.sha512)"
python contrib/upload-pricing-data-to-s3.py libcloud/data/pricing.json
[testenv:scrape-provider-prices]
basepython: python3.7
deps = requests
demjson
passenv = GCE_API_KEY
whitelist_externals = sha512sum
bash
commands =
python contrib/scrape-gce-prices.py --all
python contrib/scrape-gce-prices.py
python contrib/scrape-ec2-prices.py
python contrib/scrape-azure-prices.py
# We also store the SHa512 sum so users can check if something has changed
# by caching and checking the value of the shasum file
bash -c "(cd libcloud/data/ ; sha256sum pricing.json > {toxinidir}/libcloud/data/pricing.json.sha256)"
bash -c "(cd libcloud/data/ ; sha512sum pricing.json > {toxinidir}/libcloud/data/pricing.json.sha512)"
[testenv:scrape-ec2-prices]
basepython: python3.7
deps = requests
demjson
commands = python contrib/scrape-ec2-prices.py
[testenv:scrape-ec2-sizes]
basepython: python3.7
deps = requests
ijson
commands =
bash -c 'echo "Scrapping EC2 sizes, this may take up to 10 minutes or more since the actual JSON data we download and scrape is very large"'
bash -c 'python contrib/scrape-ec2-sizes.py > libcloud/compute/constants.py'
[testenv:pylint]
deps = -r{toxinidir}/requirements-tests.txt
bottle
fasteners
paramiko==2.7.1
pysphere
setenv =
PYTHONPATH={toxinidir}
commands = pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/common/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/compute/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/container/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/backup/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/dns/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/storage/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc libcloud/utils/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc demos/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc contrib/
pylint -E --load-plugins=pylint_plugins.driver_class --rcfile=./.pylintrc pylint_plugins/
[testenv:lint]
deps = -r{toxinidir}/requirements-tests.txt
fasteners
rstcheck
commands = flake8 libcloud/
flake8 --max-line-length=160 libcloud/test/
flake8 demos/
flake8 integration/
flake8 scripts/
flake8 --ignore=E402,E902,W503,W504 docs/examples/
flake8 --ignore=E402,E902,W503,W504 --max-line-length=160 contrib/
python -mjson.tool libcloud/data/pricing.json /dev/null
rstcheck --report warning README.rst
rstcheck --report warning CHANGES.rst
rstcheck --report warning CONTRIBUTING.rst
[testenv:checks]
commands =
bash ./scripts/check_file_names.sh
python ./scripts/check_asf_license_headers.py .
[testenv:integration]
deps = -r{toxinidir}/integration/requirements.txt
commands = python -m integration
[testenv:coverage]
deps =
-r{toxinidir}/requirements-tests.txt
setuptools==42.0.2
paramiko==2.7.1
pyopenssl
python-dateutil
libvirt-python==5.9.0
fasteners
set-env =
commands = cp libcloud/test/secrets.py-dist libcloud/test/secrets.py
coverage run --source=libcloud setup.py test
[testenv:coverage-travis]
passenv = TOXENV CI TRAVIS TRAVIS_*
deps =
-r{toxinidir}/requirements-tests.txt
paramiko==2.7.1
pyopenssl
libvirt-python==5.9.0
fasteners
set-env =
commands = cp libcloud/test/secrets.py-dist libcloud/test/secrets.py
coverage run --source=libcloud setup.py test
codecov
[testenv:mypy]
deps =
setuptools==42.0.2
typing
mypy==0.782
commands =
mypy --no-incremental libcloud/common/
mypy --no-incremental libcloud/compute/
mypy --no-incremental libcloud/storage/
mypy --no-incremental libcloud/dns/
mypy --no-incremental libcloud/container/
mypy --no-incremental example_compute.py
mypy --no-incremental example_storage.py
mypy --no-incremental example_dns.py
mypy --no-incremental example_container.py