mirror of
https://github.com/certbot/certbot.git
synced 2026-01-27 19:42:53 +03:00
Fixes #5490. There's a lot of possibilities discussed in #5490, but I'll try and explain what I actually did here as succinctly as I can. Unfortunately, there's a fair bit to explain. My goal was to break lockstep and give us tests to ensure the minimum specified versions are correct without taking the time now to refactor our whole test setup. To handle specifying each package's minimum acme/certbot version, I added a requirements file to each package. This won't actually be included in the shipped package (because it's not in the MANIFEST). After creating these files and modifying tools/pip_install.sh to use them, I created a separate tox env for most packages (I kept the DNS plugins together for convenience). The reason this is necessary is because we currently use a single environment for each plugin, but if we used this approach for these tests we'd hit issues due to different installed plugins requiring different versions of acme/certbot. There's a lot more discussion about this in #5490 if you're interested in this piece. I unfortunately wasted a lot of time trying to remove the boilerplate this approach causes in tox.ini, but to do this I think we need negations described at complex factor conditions which hasn't made it into a tox release yet. The biggest missing piece here is how to make sure the oldest versions that are currently pinned to master get updated. Currently, they'll stay pinned that way without manual intervention and won't be properly testing the oldest version. I think we should solve this during the larger test/repo refactoring after the release because the tests are using the correct values now and I don't see a simple way around the problem. Once this lands, I'm planning on updating the test-everything tests to do integration tests with the "oldest" versions here. * break lockstep between packages * Use per package requirements files * add local oldest requirements files * update tox.ini * work with dev0 versions * Install requirements in separate step. * don't error when we don't have requirements * install latest packages in editable mode * Update .travis.yml * Add reminder comments * move dev to requirements * request acme[dev] * Update pip_install documentation
231 lines
6.6 KiB
INI
231 lines
6.6 KiB
INI
# Tox (http://tox.testrun.org/) is a tool for running tests in
|
|
# multiple virtualenvs. To use it, "pip install tox" and then run
|
|
# "tox" from this directory.
|
|
|
|
[tox]
|
|
skipsdist = true
|
|
envlist = modification,py{34,35,36},cover,lint
|
|
|
|
[base]
|
|
# pip installs the requested packages in editable mode
|
|
pip_install = {toxinidir}/tools/pip_install_editable.sh
|
|
# pip installs the requested packages in editable mode and runs unit tests on
|
|
# them. Each package is installed and tested in the order they are provided
|
|
# before the script moves on to the next package. All dependencies are pinned
|
|
# to a specific version for increased stability for developers.
|
|
install_and_test = {toxinidir}/tools/install_and_test.sh
|
|
dns_packages =
|
|
certbot-dns-cloudflare \
|
|
certbot-dns-cloudxns \
|
|
certbot-dns-digitalocean \
|
|
certbot-dns-dnsimple \
|
|
certbot-dns-dnsmadeeasy \
|
|
certbot-dns-google \
|
|
certbot-dns-luadns \
|
|
certbot-dns-nsone \
|
|
certbot-dns-rfc2136 \
|
|
certbot-dns-route53
|
|
all_packages =
|
|
acme[dev] \
|
|
.[dev] \
|
|
certbot-apache \
|
|
{[base]dns_packages} \
|
|
certbot-nginx \
|
|
letshelp-certbot
|
|
install_packages =
|
|
{toxinidir}/tools/pip_install_editable.sh {[base]all_packages}
|
|
source_paths =
|
|
acme/acme
|
|
certbot
|
|
certbot-apache/certbot_apache
|
|
certbot-compatibility-test/certbot_compatibility_test
|
|
certbot-dns-cloudflare/certbot_dns_cloudflare
|
|
certbot-dns-cloudxns/certbot_dns_cloudxns
|
|
certbot-dns-digitalocean/certbot_dns_digitalocean
|
|
certbot-dns-dnsimple/certbot_dns_dnsimple
|
|
certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy
|
|
certbot-dns-google/certbot_dns_google
|
|
certbot-dns-luadns/certbot_dns_luadns
|
|
certbot-dns-nsone/certbot_dns_nsone
|
|
certbot-dns-rfc2136/certbot_dns_rfc2136
|
|
certbot-dns-route53/certbot_dns_route53
|
|
certbot-nginx/certbot_nginx
|
|
letshelp-certbot/letshelp_certbot
|
|
tests/lock_test.py
|
|
|
|
[testenv]
|
|
commands =
|
|
{[base]install_and_test} {[base]all_packages}
|
|
python tests/lock_test.py
|
|
setenv =
|
|
PYTHONPATH = {toxinidir}
|
|
PYTHONHASHSEED = 0
|
|
passenv =
|
|
TRAVIS
|
|
|
|
[testenv:py27-oldest]
|
|
commands =
|
|
{[testenv]commands}
|
|
setenv =
|
|
{[testenv]setenv}
|
|
CERTBOT_OLDEST=1
|
|
passenv =
|
|
{[testenv]passenv}
|
|
|
|
[testenv:py27-acme-oldest]
|
|
commands =
|
|
{[base]install_and_test} acme[dev]
|
|
setenv =
|
|
{[testenv:py27-oldest]setenv}
|
|
passenv =
|
|
{[testenv:py27-oldest]passenv}
|
|
|
|
[testenv:py27-apache-oldest]
|
|
commands =
|
|
{[base]install_and_test} certbot-apache
|
|
setenv =
|
|
{[testenv:py27-oldest]setenv}
|
|
passenv =
|
|
{[testenv:py27-oldest]passenv}
|
|
|
|
[testenv:py27-certbot-oldest]
|
|
commands =
|
|
{[base]install_and_test} .[dev]
|
|
setenv =
|
|
{[testenv:py27-oldest]setenv}
|
|
passenv =
|
|
{[testenv:py27-oldest]passenv}
|
|
|
|
[testenv:py27-dns-oldest]
|
|
commands =
|
|
{[base]install_and_test} {[base]dns_packages}
|
|
setenv =
|
|
{[testenv:py27-oldest]setenv}
|
|
passenv =
|
|
{[testenv:py27-oldest]passenv}
|
|
|
|
[testenv:py27-nginx-oldest]
|
|
commands =
|
|
{[base]install_and_test} certbot-nginx
|
|
python tests/lock_test.py
|
|
setenv =
|
|
{[testenv:py27-oldest]setenv}
|
|
passenv =
|
|
{[testenv:py27-oldest]passenv}
|
|
|
|
[testenv:py27_install]
|
|
basepython = python2.7
|
|
commands =
|
|
{[base]install_packages}
|
|
|
|
[testenv:cover]
|
|
basepython = python2.7
|
|
commands =
|
|
{[base]install_packages}
|
|
./tox.cover.sh
|
|
passenv =
|
|
{[testenv]passenv}
|
|
|
|
[testenv:lint]
|
|
basepython = python2.7
|
|
# separating into multiple invocations disables cross package
|
|
# duplicate code checking; if one of the commands fails, others will
|
|
# continue, but tox return code will reflect previous error
|
|
commands =
|
|
{[base]install_packages}
|
|
pylint --reports=n --rcfile=.pylintrc {[base]source_paths}
|
|
|
|
[testenv:mypy]
|
|
basepython = python3.4
|
|
commands =
|
|
{[base]pip_install} mypy
|
|
{[base]install_packages}
|
|
mypy --py2 --ignore-missing-imports {[base]source_paths}
|
|
|
|
[testenv:apacheconftest]
|
|
#basepython = python2.7
|
|
commands =
|
|
{[base]pip_install} acme . certbot-apache certbot-compatibility-test
|
|
{toxinidir}/certbot-apache/certbot_apache/tests/apache-conf-files/apache-conf-test --debian-modules
|
|
|
|
[testenv:nginxroundtrip]
|
|
commands =
|
|
{[base]pip_install} acme . certbot-apache certbot-nginx
|
|
python certbot-compatibility-test/nginx/roundtrip.py certbot-compatibility-test/nginx/nginx-roundtrip-testdata
|
|
|
|
# This is a duplication of the command line in testenv:le_auto to
|
|
# allow users to run the modification check by running `tox`
|
|
[testenv:modification]
|
|
commands =
|
|
{toxinidir}/tests/modification-check.sh
|
|
|
|
[testenv:apache_compat]
|
|
commands =
|
|
docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile .
|
|
docker build -t apache-compat -f certbot-compatibility-test/Dockerfile-apache .
|
|
docker run --rm -it apache-compat -c apache.tar.gz -vvvv
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:nginx_compat]
|
|
commands =
|
|
docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile .
|
|
docker build -t nginx-compat -f certbot-compatibility-test/Dockerfile-nginx .
|
|
docker run --rm -it nginx-compat -c nginx.tar.gz -vv -aie
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:le_auto_precise]
|
|
# At the moment, this tests under Python 2.7 only, as only that version is
|
|
# readily available on the Precise Docker image.
|
|
commands =
|
|
docker build -f letsencrypt-auto-source/Dockerfile.precise -t lea letsencrypt-auto-source
|
|
docker run --rm -t -i lea
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:le_auto_trusty]
|
|
# At the moment, this tests under Python 2.7 only, as only that version is
|
|
# readily available on the Trusty Docker image.
|
|
commands =
|
|
{toxinidir}/tests/modification-check.sh
|
|
docker build -f letsencrypt-auto-source/Dockerfile.trusty -t lea letsencrypt-auto-source
|
|
docker run --rm -t -i lea
|
|
whitelist_externals =
|
|
docker
|
|
passenv =
|
|
DOCKER_*
|
|
TRAVIS_BRANCH
|
|
|
|
[testenv:le_auto_wheezy]
|
|
# At the moment, this tests under Python 2.7 only, as only that version is
|
|
# readily available on the Wheezy Docker image.
|
|
commands =
|
|
docker build -f letsencrypt-auto-source/Dockerfile.wheezy -t lea letsencrypt-auto-source
|
|
docker run --rm -t -i lea
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:le_auto_centos6]
|
|
# At the moment, this tests under Python 2.6 only, as only that version is
|
|
# readily available on the CentOS 6 Docker image.
|
|
commands =
|
|
docker build -f letsencrypt-auto-source/Dockerfile.centos6 -t lea letsencrypt-auto-source
|
|
docker run --rm -t -i lea
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:docker_dev]
|
|
# tests the Dockerfile-dev file to ensure development with it works
|
|
# as expected
|
|
commands =
|
|
docker-compose run --rm --service-ports development bash -c 'tox -e lint'
|
|
whitelist_externals =
|
|
docker
|
|
passenv = DOCKER_*
|