Merge pull request #9919 from certbot/unpin-poetry-tox

Unpin poetry and use tox >= v4
This commit is contained in:
Will Greenberg
2024-04-10 11:54:31 -07:00
committed by GitHub
7 changed files with 104 additions and 95 deletions
@@ -18,7 +18,7 @@ jobs:
PYTHON_VERSION: 3.11 PYTHON_VERSION: 3.11
TOXENV: py311 TOXENV: py311
linux-isolated: linux-isolated:
TOXENV: 'isolated-{acme,certbot,apache,cloudflare,digitalocean,dnsimple,dnsmadeeasy,gehirn,google,linode,luadns,nsone,ovh,rfc2136,route53,sakuracloud,nginx}' TOXENV: 'isolated-acme,isolated-certbot,isolated-apache,isolated-cloudflare,isolated-digitalocean,isolated-dnsimple,isolated-dnsmadeeasy,isolated-gehirn,isolated-google,isolated-linode,isolated-luadns,isolated-nsone,isolated-ovh,isolated-rfc2136,isolated-route53,isolated-sakuracloud,isolated-nginx'
linux-boulder-v2-integration-certbot-oldest: linux-boulder-v2-integration-certbot-oldest:
PYTHON_VERSION: 3.8 PYTHON_VERSION: 3.8
TOXENV: integration-certbot-oldest TOXENV: integration-certbot-oldest
@@ -186,7 +186,7 @@ jobs:
displayName: Install Certbot snap displayName: Install Certbot snap
- script: | - script: |
set -e set -e
venv/bin/python -m tox -e integration-external,apacheconftest-external-with-pebble venv/bin/python -m tox run -e integration-external,apacheconftest-external-with-pebble
displayName: Run tox displayName: Run tox
- job: snap_dns_run - job: snap_dns_run
dependsOn: snaps_build dependsOn: snaps_build
@@ -44,7 +44,7 @@ steps:
export TARGET_BRANCH="`echo "${BUILD_SOURCEBRANCH}" | sed -E 's!refs/(heads|tags)/!!g'`" export TARGET_BRANCH="`echo "${BUILD_SOURCEBRANCH}" | sed -E 's!refs/(heads|tags)/!!g'`"
[ -z "${SYSTEM_PULLREQUEST_TARGETBRANCH}" ] || export TARGET_BRANCH="${SYSTEM_PULLREQUEST_TARGETBRANCH}" [ -z "${SYSTEM_PULLREQUEST_TARGETBRANCH}" ] || export TARGET_BRANCH="${SYSTEM_PULLREQUEST_TARGETBRANCH}"
env env
python3 -m tox python3 -m tox run
env: env:
AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID) AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
+5 -5
View File
@@ -134,7 +134,7 @@ For debugging, we recommend putting
Once you are done with your code changes, and the tests in ``foo_test.py`` Once you are done with your code changes, and the tests in ``foo_test.py``
pass, run all of the unit tests for Certbot and check for coverage with ``tox pass, run all of the unit tests for Certbot and check for coverage with ``tox
-e cover``. You should then check for code style with ``tox -e lint`` (all -e cover``. You should then check for code style with ``tox run -e lint`` (all
files) or ``pylint --rcfile=.pylintrc path/to/file.py`` (single file at a files) or ``pylint --rcfile=.pylintrc path/to/file.py`` (single file at a
time). time).
@@ -163,7 +163,7 @@ With a user allowed to access your local Docker daemon, run:
.. code-block:: shell .. code-block:: shell
tox -e integration tox run -e integration
Tests will be run using pytest. A test report and a code coverage report will be Tests will be run using pytest. A test report and a code coverage report will be
displayed at the end of the integration tests execution. displayed at the end of the integration tests execution.
@@ -485,7 +485,7 @@ annotations; we can find bugs in Certbot even without a fully annotated codebase
Zulip wrote a `great guide`_ to using mypy. Its useful, but you dont have to read the whole thing Zulip wrote a `great guide`_ to using mypy. Its useful, but you dont have to read the whole thing
to start contributing to Certbot. to start contributing to Certbot.
To run mypy on Certbot, use ``tox -e mypy`` on a machine that has Python 3 installed. To run mypy on Certbot, use ``tox run -e mypy`` on a machine that has Python 3 installed.
Also note that OpenSSL, which we rely on, has type definitions for crypto but not SSL. We use both. Also note that OpenSSL, which we rely on, has type definitions for crypto but not SSL. We use both.
Those imports should look like this: Those imports should look like this:
@@ -509,12 +509,12 @@ Steps:
something we have the time and interest to review. something we have the time and interest to review.
1. Write your code! When doing this, you should add :ref:`mypy type annotations 1. Write your code! When doing this, you should add :ref:`mypy type annotations
<type annotations>` for any functions you add or modify. You can check that <type annotations>` for any functions you add or modify. You can check that
you've done this correctly by running ``tox -e mypy`` on a machine that has you've done this correctly by running ``tox run -e mypy`` on a machine that has
Python 3 installed. Python 3 installed.
2. Make sure your environment is set up properly and that you're in your 2. Make sure your environment is set up properly and that you're in your
virtualenv. You can do this by following the instructions in the virtualenv. You can do this by following the instructions in the
:ref:`Getting Started <getting_started>` section. :ref:`Getting Started <getting_started>` section.
3. Run ``tox -e lint`` to check for pylint errors. Fix any errors. 3. Run ``tox run -e lint`` to check for pylint errors. Fix any errors.
4. Run ``tox --skip-missing-interpreters`` to run all the tests we recommend 4. Run ``tox --skip-missing-interpreters`` to run all the tests we recommend
developers run locally. The ``--skip-missing-interpreters`` argument ignores developers run locally. The ``--skip-missing-interpreters`` argument ignores
missing versions of Python needed for running the tests. Fix any errors. missing versions of Python needed for running the tests. Fix any errors.
+6 -9
View File
@@ -8,6 +8,9 @@ license = "Apache License 2.0"
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.8" python = "^3.8"
# workaround for: https://github.com/python-poetry/poetry-plugin-export/issues/183
urllib3 = ">=1.25.4,<1.27"
# Local dependencies # Local dependencies
# Any local packages that have dependencies on other local packages must be # Any local packages that have dependencies on other local packages must be
# listed below before the package it depends on. For instance, certbot depends # listed below before the package it depends on. For instance, certbot depends
@@ -65,16 +68,10 @@ pylint = "3.0.2"
# Making sure that it would not get installed (Fixing https://github.com/certbot/certbot/issues/9336) # Making sure that it would not get installed (Fixing https://github.com/certbot/certbot/issues/9336)
cryptography = "!= 37.0.3" cryptography = "!= 37.0.3"
# If poetry>=1.3.0 is selected, multiple versions of virtualenv are selected # Branch 4.x of tox introduces backward incompatibility changes, so require a newer
# causing problems when exporting dependencies so let's pin poetry back until # version of tox to keep deterministic builds.
# https://github.com/python-poetry/poetry-plugin-export/issues/168 is resolved. tox = ">=4"
poetry = "<1.3.0"
# Branch 4.x of tox introduces backward incompatibility changes. The tox.ini
# file in the project must be adapted accordingly before moving out of the 3.x
# branch. Once done, the following constraint should become tox >= 4 to keep
# deterministic builds.
tox = "<4"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
+72 -74
View File
@@ -11,28 +11,29 @@ appnope==0.1.4 ; python_version >= "3.8" and python_version < "4.0" and sys_plat
astroid==3.0.3 ; python_version >= "3.8" and python_version < "4.0" astroid==3.0.3 ; python_version >= "3.8" and python_version < "4.0"
asttokens==2.4.1 ; python_version >= "3.8" and python_version < "4.0" asttokens==2.4.1 ; python_version >= "3.8" and python_version < "4.0"
attrs==23.2.0 ; python_version >= "3.8" and python_version < "4.0" attrs==23.2.0 ; python_version >= "3.8" and python_version < "4.0"
azure-core==1.30.0 ; python_version >= "3.8" and python_version < "4.0" azure-core==1.30.1 ; python_version >= "3.8" and python_version < "4.0"
azure-devops==7.1.0b4 ; python_version >= "3.8" and python_version < "4.0" azure-devops==7.1.0b4 ; python_version >= "3.8" and python_version < "4.0"
babel==2.14.0 ; python_version >= "3.8" and python_version < "4.0" babel==2.14.0 ; python_version >= "3.8" and python_version < "4.0"
backcall==0.2.0 ; python_version >= "3.8" and python_version < "4.0" backcall==0.2.0 ; python_version >= "3.8" and python_version < "4.0"
bcrypt==4.1.2 ; python_version >= "3.8" and python_version < "4.0" bcrypt==4.1.2 ; python_version >= "3.8" and python_version < "4.0"
beautifulsoup4==4.12.3 ; python_version >= "3.8" and python_version < "4.0" beautifulsoup4==4.12.3 ; python_version >= "3.8" and python_version < "4.0"
boto3==1.34.36 ; python_version >= "3.8" and python_version < "4.0" boto3==1.34.73 ; python_version >= "3.8" and python_version < "4.0"
botocore==1.34.36 ; python_version >= "3.8" and python_version < "4.0" botocore==1.34.73 ; python_version >= "3.8" and python_version < "4.0"
cachecontrol==0.12.14 ; python_version >= "3.8" and python_version < "4.0" build==1.2.1 ; python_version >= "3.8" and python_version < "4.0"
cachetools==5.3.2 ; python_version >= "3.8" and python_version < "4.0" cachecontrol==0.14.0 ; python_version >= "3.8" and python_version < "4.0"
cachy==0.3.0 ; python_version >= "3.8" and python_version < "4.0" cachetools==5.3.3 ; python_version >= "3.8" and python_version < "4.0"
certifi==2024.2.2 ; python_version >= "3.8" and python_version < "4.0" certifi==2024.2.2 ; python_version >= "3.8" and python_version < "4.0"
cffi==1.16.0 ; python_version >= "3.8" and python_version < "4.0" cffi==1.16.0 ; python_version >= "3.8" and python_version < "4.0"
chardet==5.2.0 ; python_version >= "3.8" and python_version < "4.0"
charset-normalizer==3.3.2 ; python_version >= "3.8" and python_version < "4.0" charset-normalizer==3.3.2 ; python_version >= "3.8" and python_version < "4.0"
cleo==1.0.0a5 ; python_version >= "3.8" and python_version < "4.0" cleo==2.1.0 ; python_version >= "3.8" and python_version < "4.0"
cloudflare==2.17.0 ; python_version >= "3.8" and python_version < "4.0" cloudflare==2.19.2 ; python_version >= "3.8" and python_version < "4.0"
colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0"
configargparse==1.7 ; python_version >= "3.8" and python_version < "4.0" configargparse==1.7 ; python_version >= "3.8" and python_version < "4.0"
configobj==5.0.8 ; python_version >= "3.8" and python_version < "4.0" configobj==5.0.8 ; python_version >= "3.8" and python_version < "4.0"
coverage==7.4.1 ; python_version >= "3.8" and python_version < "4.0" coverage==7.4.4 ; python_version >= "3.8" and python_version < "4.0"
crashtest==0.3.1 ; python_version >= "3.8" and python_version < "4.0" crashtest==0.4.1 ; python_version >= "3.8" and python_version < "4.0"
cryptography==42.0.2 ; python_version >= "3.8" and python_version < "4.0" cryptography==42.0.5 ; python_version >= "3.8" and python_version < "4.0"
cython==0.29.37 ; python_version >= "3.8" and python_version < "4.0" cython==0.29.37 ; python_version >= "3.8" and python_version < "4.0"
decorator==5.1.1 ; python_version >= "3.8" and python_version < "4.0" decorator==5.1.1 ; python_version >= "3.8" and python_version < "4.0"
deprecated==1.2.14 ; python_version >= "3.8" and python_version < "4.0" deprecated==1.2.14 ; python_version >= "3.8" and python_version < "4.0"
@@ -40,113 +41,110 @@ dill==0.3.8 ; python_version < "4.0" and python_version >= "3.8"
distlib==0.3.8 ; python_version >= "3.8" and python_version < "4.0" distlib==0.3.8 ; python_version >= "3.8" and python_version < "4.0"
distro==1.9.0 ; python_version >= "3.8" and python_version < "4.0" distro==1.9.0 ; python_version >= "3.8" and python_version < "4.0"
dns-lexicon==3.17.0 ; python_version >= "3.8" and python_version < "4.0" dns-lexicon==3.17.0 ; python_version >= "3.8" and python_version < "4.0"
dnspython==2.5.0 ; python_version >= "3.8" and python_version < "4.0" dnspython==2.6.1 ; python_version >= "3.8" and python_version < "4.0"
docutils==0.20.1 ; python_version >= "3.8" and python_version < "4.0" docutils==0.20.1 ; python_version >= "3.8" and python_version < "4.0"
dulwich==0.20.50 ; python_version >= "3.8" and python_version < "4.0" dulwich==0.21.7 ; python_version >= "3.8" and python_version < "4.0"
exceptiongroup==1.2.0 ; python_version >= "3.8" and python_version < "3.11" exceptiongroup==1.2.0 ; python_version >= "3.8" and python_version < "3.11"
execnet==2.0.2 ; python_version >= "3.8" and python_version < "4.0" execnet==2.0.2 ; python_version >= "3.8" and python_version < "4.0"
executing==2.0.1 ; python_version >= "3.8" and python_version < "4.0" executing==2.0.1 ; python_version >= "3.8" and python_version < "4.0"
fabric==3.2.2 ; python_version >= "3.8" and python_version < "4.0" fabric==3.2.2 ; python_version >= "3.8" and python_version < "4.0"
filelock==3.13.1 ; python_version >= "3.8" and python_version < "4.0" fastjsonschema==2.19.1 ; python_version >= "3.8" and python_version < "4.0"
google-api-core==2.16.2 ; python_version >= "3.8" and python_version < "4.0" filelock==3.13.3 ; python_version >= "3.8" and python_version < "4.0"
google-api-python-client==2.116.0 ; python_version >= "3.8" and python_version < "4.0" google-api-core==2.18.0 ; python_version >= "3.8" and python_version < "4.0"
google-api-python-client==2.124.0 ; python_version >= "3.8" and python_version < "4.0"
google-auth-httplib2==0.2.0 ; python_version >= "3.8" and python_version < "4.0" google-auth-httplib2==0.2.0 ; python_version >= "3.8" and python_version < "4.0"
google-auth==2.27.0 ; python_version >= "3.8" and python_version < "4.0" google-auth==2.29.0 ; python_version >= "3.8" and python_version < "4.0"
googleapis-common-protos==1.62.0 ; python_version >= "3.8" and python_version < "4.0" googleapis-common-protos==1.63.0 ; python_version >= "3.8" and python_version < "4.0"
html5lib==1.1 ; python_version >= "3.8" and python_version < "4.0"
httplib2==0.22.0 ; python_version >= "3.8" and python_version < "4.0" httplib2==0.22.0 ; python_version >= "3.8" and python_version < "4.0"
idna==3.6 ; python_version >= "3.8" and python_version < "4.0" idna==3.6 ; python_version >= "3.8" and python_version < "4.0"
imagesize==1.4.1 ; python_version >= "3.8" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.8" and python_version < "4.0"
importlib-metadata==4.13.0 ; python_version >= "3.8" and python_version < "4.0" importlib-metadata==7.1.0 ; python_version >= "3.8" and python_version < "4.0"
importlib-resources==6.1.1 ; python_version >= "3.8" and python_version < "4.0" importlib-resources==6.4.0 ; python_version >= "3.8" and python_version < "4.0"
iniconfig==2.0.0 ; python_version >= "3.8" and python_version < "4.0" iniconfig==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
installer==0.7.0 ; python_version >= "3.8" and python_version < "4.0"
invoke==2.2.0 ; python_version >= "3.8" and python_version < "4.0" invoke==2.2.0 ; python_version >= "3.8" and python_version < "4.0"
ipdb==0.13.13 ; python_version >= "3.8" and python_version < "4.0" ipdb==0.13.13 ; python_version >= "3.8" and python_version < "4.0"
ipython==8.12.3 ; python_version >= "3.8" and python_version < "4.0" ipython==8.12.3 ; python_version >= "3.8" and python_version < "4.0"
isodate==0.6.1 ; python_version >= "3.8" and python_version < "4.0" isodate==0.6.1 ; python_version >= "3.8" and python_version < "4.0"
isort==5.13.2 ; python_version >= "3.8" and python_version < "4.0" isort==5.13.2 ; python_version >= "3.8" and python_version < "4.0"
jaraco-classes==3.3.0 ; python_version >= "3.8" and python_version < "4.0" jaraco-classes==3.3.1 ; python_version >= "3.8" and python_version < "4.0"
jedi==0.19.1 ; python_version >= "3.8" and python_version < "4.0" jedi==0.19.1 ; python_version >= "3.8" and python_version < "4.0"
jeepney==0.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" jeepney==0.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux"
jinja2==3.1.3 ; python_version >= "3.8" and python_version < "4.0" jinja2==3.1.3 ; python_version >= "3.8" and python_version < "4.0"
jmespath==1.0.1 ; python_version >= "3.8" and python_version < "4.0" jmespath==1.0.1 ; python_version >= "3.8" and python_version < "4.0"
josepy==1.14.0 ; python_version >= "3.8" and python_version < "4.0" josepy==1.14.0 ; python_version >= "3.8" and python_version < "4.0"
jsonlines==4.0.0 ; python_version >= "3.8" and python_version < "4.0" jsonlines==4.0.0 ; python_version >= "3.8" and python_version < "4.0"
jsonpickle==3.0.2 ; python_version >= "3.8" and python_version < "4.0" jsonpickle==3.0.3 ; python_version >= "3.8" and python_version < "4.0"
jsonschema-specifications==2023.12.1 ; python_version >= "3.8" and python_version < "4.0" keyring==24.3.1 ; python_version >= "3.8" and python_version < "4.0"
jsonschema==4.21.1 ; python_version >= "3.8" and python_version < "4.0"
keyring==24.3.0 ; python_version >= "3.8" and python_version < "4.0"
lockfile==0.12.2 ; python_version >= "3.8" and python_version < "4.0"
markdown-it-py==3.0.0 ; python_version >= "3.8" and python_version < "4.0" markdown-it-py==3.0.0 ; python_version >= "3.8" and python_version < "4.0"
markupsafe==2.1.5 ; python_version >= "3.8" and python_version < "4.0" markupsafe==2.1.5 ; python_version >= "3.8" and python_version < "4.0"
matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "4.0" matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "4.0"
mccabe==0.7.0 ; python_version >= "3.8" and python_version < "4.0" mccabe==0.7.0 ; python_version >= "3.8" and python_version < "4.0"
mdurl==0.1.2 ; python_version >= "3.8" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.8" and python_version < "4.0"
more-itertools==10.2.0 ; python_version >= "3.8" and python_version < "4.0" more-itertools==10.2.0 ; python_version >= "3.8" and python_version < "4.0"
msgpack==1.0.7 ; python_version >= "3.8" and python_version < "4.0" msgpack==1.0.8 ; python_version >= "3.8" and python_version < "4.0"
msrest==0.7.1 ; python_version >= "3.8" and python_version < "4.0" msrest==0.7.1 ; python_version >= "3.8" and python_version < "4.0"
mypy-extensions==1.0.0 ; python_version >= "3.8" and python_version < "4.0" mypy-extensions==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
mypy==1.8.0 ; python_version >= "3.8" and python_version < "4.0" mypy==1.9.0 ; python_version >= "3.8" and python_version < "4.0"
nh3==0.2.15 ; python_version >= "3.8" and python_version < "4.0" nh3==0.2.17 ; python_version >= "3.8" and python_version < "4.0"
oauthlib==3.2.2 ; python_version >= "3.8" and python_version < "4.0" oauthlib==3.2.2 ; python_version >= "3.8" and python_version < "4.0"
packaging==23.2 ; python_version >= "3.8" and python_version < "4.0" packaging==24.0 ; python_version >= "3.8" and python_version < "4.0"
paramiko==3.4.0 ; python_version >= "3.8" and python_version < "4.0" paramiko==3.4.0 ; python_version >= "3.8" and python_version < "4.0"
parsedatetime==2.6 ; python_version >= "3.8" and python_version < "4.0" parsedatetime==2.6 ; python_version >= "3.8" and python_version < "4.0"
parso==0.8.3 ; python_version >= "3.8" and python_version < "4.0" parso==0.8.3 ; python_version >= "3.8" and python_version < "4.0"
pexpect==4.9.0 ; python_version >= "3.8" and python_version < "4.0" pexpect==4.9.0 ; python_version >= "3.8" and python_version < "4.0"
pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "4.0" pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "4.0"
pip==24.0 ; python_version >= "3.8" and python_version < "4.0" pip==24.0 ; python_version >= "3.8" and python_version < "4.0"
pkginfo==1.9.6 ; python_version >= "3.8" and python_version < "4.0" pkginfo==1.10.0 ; python_version >= "3.8" and python_version < "4.0"
pkgutil-resolve-name==1.3.10 ; python_version >= "3.8" and python_version < "3.9" platformdirs==4.2.0 ; python_version >= "3.8" and python_version < "4.0"
platformdirs==2.6.2 ; python_version >= "3.8" and python_version < "4.0"
pluggy==1.4.0 ; python_version >= "3.8" and python_version < "4.0" pluggy==1.4.0 ; python_version >= "3.8" and python_version < "4.0"
ply==3.11 ; python_version >= "3.8" and python_version < "4.0" ply==3.11 ; python_version >= "3.8" and python_version < "4.0"
poetry-core==1.3.2 ; python_version >= "3.8" and python_version < "4.0" poetry-core==1.9.0 ; python_version >= "3.8" and python_version < "4.0"
poetry-plugin-export==1.2.0 ; python_version >= "3.8" and python_version < "4.0" poetry-plugin-export==1.7.1 ; python_version >= "3.8" and python_version < "4.0"
poetry==1.2.2 ; python_version >= "3.8" and python_version < "4.0" poetry==1.8.2 ; python_version >= "3.8" and python_version < "4.0"
prompt-toolkit==3.0.43 ; python_version >= "3.8" and python_version < "4.0" prompt-toolkit==3.0.43 ; python_version >= "3.8" and python_version < "4.0"
protobuf==4.25.2 ; python_version >= "3.8" and python_version < "4.0" proto-plus==1.23.0 ; python_version >= "3.8" and python_version < "4.0"
protobuf==4.25.3 ; python_version >= "3.8" and python_version < "4.0"
ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "4.0" ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "4.0"
pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "4.0" pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "4.0"
py==1.11.0 ; python_version >= "3.8" and python_version < "4.0" pyasn1-modules==0.4.0 ; python_version >= "3.8" and python_version < "4.0"
pyasn1-modules==0.3.0 ; python_version >= "3.8" and python_version < "4.0" pyasn1==0.6.0 ; python_version >= "3.8" and python_version < "4.0"
pyasn1==0.5.1 ; python_version >= "3.8" and python_version < "4.0"
pycparser==2.21 ; python_version >= "3.8" and python_version < "4.0" pycparser==2.21 ; python_version >= "3.8" and python_version < "4.0"
pygments==2.17.2 ; python_version >= "3.8" and python_version < "4.0" pygments==2.17.2 ; python_version >= "3.8" and python_version < "4.0"
pylev==1.4.0 ; python_version >= "3.8" and python_version < "4.0"
pylint==3.0.2 ; python_version >= "3.8" and python_version < "4.0" pylint==3.0.2 ; python_version >= "3.8" and python_version < "4.0"
pynacl==1.5.0 ; python_version >= "3.8" and python_version < "4.0" pynacl==1.5.0 ; python_version >= "3.8" and python_version < "4.0"
pynsist==2.7 ; python_version >= "3.8" and python_version < "4.0" pynsist==2.7 ; python_version >= "3.8" and python_version < "4.0"
pyopenssl==24.0.0 ; python_version >= "3.8" and python_version < "4.0" pyopenssl==24.1.0 ; python_version >= "3.8" and python_version < "4.0"
pyotp==2.9.0 ; python_version >= "3.8" and python_version < "4.0" pyotp==2.9.0 ; python_version >= "3.8" and python_version < "4.0"
pyparsing==3.1.1 ; python_version >= "3.8" and python_version < "4.0" pyparsing==3.1.2 ; python_version >= "3.8" and python_version < "4.0"
pyproject-api==1.6.1 ; python_version >= "3.8" and python_version < "4.0"
pyproject-hooks==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
pyrfc3339==1.1 ; python_version >= "3.8" and python_version < "4.0" pyrfc3339==1.1 ; python_version >= "3.8" and python_version < "4.0"
pytest-cov==4.1.0 ; python_version >= "3.8" and python_version < "4.0" pytest-cov==5.0.0 ; python_version >= "3.8" and python_version < "4.0"
pytest-xdist==3.5.0 ; python_version >= "3.8" and python_version < "4.0" pytest-xdist==3.5.0 ; python_version >= "3.8" and python_version < "4.0"
pytest==8.0.0 ; python_version >= "3.8" and python_version < "4.0" pytest==8.1.1 ; python_version >= "3.8" and python_version < "4.0"
python-augeas==1.1.0 ; python_version >= "3.8" and python_version < "4.0" python-augeas==1.1.0 ; python_version >= "3.8" and python_version < "4.0"
python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0" python-dateutil==2.9.0.post0 ; python_version >= "3.8" and python_version < "4.0"
python-digitalocean==1.17.0 ; python_version >= "3.8" and python_version < "4.0" python-digitalocean==1.17.0 ; python_version >= "3.8" and python_version < "4.0"
pytz==2024.1 ; python_version >= "3.8" and python_version < "4.0" pytz==2024.1 ; python_version >= "3.8" and python_version < "4.0"
pywin32-ctypes==0.2.2 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" pywin32-ctypes==0.2.2 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
pywin32==306 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" pywin32==306 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0"
readme-renderer==42.0 ; python_version >= "3.8" and python_version < "4.0" rapidfuzz==3.7.0 ; python_version >= "3.8" and python_version < "4.0"
referencing==0.33.0 ; python_version >= "3.8" and python_version < "4.0" readme-renderer==43.0 ; python_version >= "3.8" and python_version < "4.0"
requests-download==0.1.2 ; python_version >= "3.8" and python_version < "4.0" requests-download==0.1.2 ; python_version >= "3.8" and python_version < "4.0"
requests-file==2.0.0 ; python_version >= "3.8" and python_version < "4.0" requests-file==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
requests-oauthlib==1.3.1 ; python_version >= "3.8" and python_version < "4.0" requests-oauthlib==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
requests-toolbelt==0.9.1 ; python_version >= "3.8" and python_version < "4.0" requests-toolbelt==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
requests==2.31.0 ; python_version >= "3.8" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.8" and python_version < "4.0"
rfc3986==2.0.0 ; python_version >= "3.8" and python_version < "4.0" rfc3986==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
rich==13.7.0 ; python_version >= "3.8" and python_version < "4.0" rich==13.7.1 ; python_version >= "3.8" and python_version < "4.0"
rpds-py==0.17.1 ; python_version >= "3.8" and python_version < "4.0"
rsa==4.9 ; python_version >= "3.8" and python_version < "4" rsa==4.9 ; python_version >= "3.8" and python_version < "4"
s3transfer==0.10.0 ; python_version >= "3.8" and python_version < "4.0" s3transfer==0.10.1 ; python_version >= "3.8" and python_version < "4.0"
secretstorage==3.3.3 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" secretstorage==3.3.3 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux"
semantic-version==2.10.0 ; python_version >= "3.8" and python_version < "4.0" semantic-version==2.10.0 ; python_version >= "3.8" and python_version < "4.0"
setuptools-rust==1.8.1 ; python_version >= "3.8" and python_version < "4.0" setuptools-rust==1.9.0 ; python_version >= "3.8" and python_version < "4.0"
setuptools==69.0.3 ; python_version >= "3.8" and python_version < "4.0" setuptools==69.2.0 ; python_version >= "3.8" and python_version < "4.0"
shellingham==1.5.4 ; python_version >= "3.8" and python_version < "4.0" shellingham==1.5.4 ; python_version >= "3.8" and python_version < "4.0"
six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" six==1.16.0 ; python_version >= "3.8" and python_version < "4.0"
snowballstemmer==2.2.0 ; python_version >= "3.8" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.8" and python_version < "4.0"
@@ -161,30 +159,30 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.8" and python_version < "4.0"
sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.8" and python_version < "4.0" sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.8" and python_version < "4.0"
sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.8" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.8" and python_version < "4.0"
stack-data==0.6.3 ; python_version >= "3.8" and python_version < "4.0" stack-data==0.6.3 ; python_version >= "3.8" and python_version < "4.0"
tldextract==5.1.1 ; python_version >= "3.8" and python_version < "4.0" tldextract==5.1.2 ; python_version >= "3.8" and python_version < "4.0"
tomli==2.0.1 ; python_version >= "3.8" and python_full_version <= "3.11.0a6" tomli==2.0.1 ; python_version >= "3.8" and python_full_version <= "3.11.0a6"
tomlkit==0.12.3 ; python_version >= "3.8" and python_version < "4.0" tomlkit==0.12.4 ; python_version >= "3.8" and python_version < "4.0"
tox==3.28.0 ; python_version >= "3.8" and python_version < "4.0" tox==4.14.2 ; python_version >= "3.8" and python_version < "4.0"
traitlets==5.14.1 ; python_version >= "3.8" and python_version < "4.0" traitlets==5.14.2 ; python_version >= "3.8" and python_version < "4.0"
twine==4.0.2 ; python_version >= "3.8" and python_version < "4.0" trove-classifiers==2024.3.25 ; python_version >= "3.8" and python_version < "4.0"
types-httplib2==0.22.0.2 ; python_version >= "3.8" and python_version < "4.0" twine==5.0.0 ; python_version >= "3.8" and python_version < "4.0"
types-pyopenssl==24.0.0.20240130 ; python_version >= "3.8" and python_version < "4.0" types-httplib2==0.22.0.20240310 ; python_version >= "3.8" and python_version < "4.0"
types-pyopenssl==24.0.0.20240311 ; python_version >= "3.8" and python_version < "4.0"
types-pyrfc3339==1.1.1.5 ; python_version >= "3.8" and python_version < "4.0" types-pyrfc3339==1.1.1.5 ; python_version >= "3.8" and python_version < "4.0"
types-python-dateutil==2.8.19.20240106 ; python_version >= "3.8" and python_version < "4.0" types-python-dateutil==2.9.0.20240316 ; python_version >= "3.8" and python_version < "4.0"
types-pytz==2024.1.0.20240203 ; python_version >= "3.8" and python_version < "4.0" types-pytz==2024.1.0.20240203 ; python_version >= "3.8" and python_version < "4.0"
types-pywin32==306.0.0.20240130 ; python_version >= "3.8" and python_version < "4.0" types-pywin32==306.0.0.20240319 ; python_version >= "3.8" and python_version < "4.0"
types-requests==2.31.0.6 ; python_version >= "3.8" and python_version < "4.0" types-requests==2.31.0.6 ; python_version >= "3.8" and python_version < "4.0"
types-setuptools==69.0.0.20240125 ; python_version >= "3.8" and python_version < "4.0" types-setuptools==69.2.0.20240317 ; python_version >= "3.8" and python_version < "4.0"
types-six==1.16.21.20240106 ; python_version >= "3.8" and python_version < "4.0" types-six==1.16.21.20240311 ; python_version >= "3.8" and python_version < "4.0"
types-urllib3==1.26.25.14 ; python_version >= "3.8" and python_version < "4.0" types-urllib3==1.26.25.14 ; python_version >= "3.8" and python_version < "4.0"
typing-extensions==4.9.0 ; python_version >= "3.8" and python_version < "4.0" typing-extensions==4.10.0 ; python_version >= "3.8" and python_version < "4.0"
uritemplate==4.1.1 ; python_version >= "3.8" and python_version < "4.0" uritemplate==4.1.1 ; python_version >= "3.8" and python_version < "4.0"
urllib3==1.26.18 ; python_version < "4.0" and python_version >= "3.8" urllib3==1.26.18 ; python_version < "4.0" and python_version >= "3.8"
virtualenv==20.21.1 ; python_version >= "3.8" and python_version < "4.0" virtualenv==20.25.1 ; python_version >= "3.8" and python_version < "4.0"
wcwidth==0.2.13 ; python_version >= "3.8" and python_version < "4.0" wcwidth==0.2.13 ; python_version >= "3.8" and python_version < "4.0"
webencodings==0.5.1 ; python_version >= "3.8" and python_version < "4.0" wheel==0.43.0 ; python_version >= "3.8" and python_version < "4.0"
wheel==0.42.0 ; python_version >= "3.8" and python_version < "4.0"
wrapt==1.16.0 ; python_version >= "3.8" and python_version < "4.0" wrapt==1.16.0 ; python_version >= "3.8" and python_version < "4.0"
xattr==0.9.9 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "darwin" xattr==1.1.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "darwin"
yarg==0.1.9 ; python_version >= "3.8" and python_version < "4.0" yarg==0.1.9 ; python_version >= "3.8" and python_version < "4.0"
zipp==3.17.0 ; python_version >= "3.8" and python_version < "4.0" zipp==3.18.1 ; python_version >= "3.8" and python_version < "4.0"
+18 -4
View File
@@ -2,6 +2,7 @@
# mypy doesn't current pass for us on Windows. Fixing that is being tracked by # mypy doesn't current pass for us on Windows. Fixing that is being tracked by
# https://github.com/certbot/certbot/issues/7803. # https://github.com/certbot/certbot/issues/7803.
envlist = {cover,lint}-{win,posix},mypy envlist = {cover,lint}-{win,posix},mypy
skipsdist = true skipsdist = true
[base] [base]
@@ -22,6 +23,7 @@ setenv =
install_command = python -I {toxinidir}/tools/pip_install.py {opts} {packages} install_command = python -I {toxinidir}/tools/pip_install.py {opts} {packages}
deps = deps =
-e acme[test] -e acme[test]
-e certbot
-e certbot[test] -e certbot[test]
!win: -e certbot-apache[dev] !win: -e certbot-apache[dev]
-e certbot-dns-cloudflare -e certbot-dns-cloudflare
@@ -38,7 +40,7 @@ deps =
-e certbot-dns-route53 -e certbot-dns-route53
-e certbot-dns-sakuracloud -e certbot-dns-sakuracloud
-e certbot-nginx -e certbot-nginx
whitelist_externals = allowlist_externals =
echo echo
false false
# This and the next few testenvs are a workaround for # This and the next few testenvs are a workaround for
@@ -73,7 +75,7 @@ basepython = python3.8
setenv = CERTBOT_OLDEST=1 setenv = CERTBOT_OLDEST=1
commands = {[testenv:py]commands} commands = {[testenv:py]commands}
[testenv:cover{,-posix}] [testenv:cover]
coverage_report = python -m coverage report coverage_report = python -m coverage report
# These coverage report commands are used on both posix and windows # These coverage report commands are used on both posix and windows
common_coverage_report_commands = common_coverage_report_commands =
@@ -98,6 +100,10 @@ commands =
{[testenv:cover]coverage_report} --fail-under 100 --include certbot-apache/* {[testenv:cover]coverage_report} --fail-under 100 --include certbot-apache/*
{[testenv:cover]common_coverage_report_commands} {[testenv:cover]common_coverage_report_commands}
# Another workaround for https://github.com/tox-dev/tox/issues/2858 in tox v4.
[testenv:cover-posix]
commands = {[testenv:cover]commands}
[testenv:cover-win] [testenv:cover-win]
commands = commands =
{[testenv:py-win]commands} --cov --cov-report= {[testenv:py-win]commands} --cov --cov-report=
@@ -171,11 +177,15 @@ commands =
{toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test --debian-modules {toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test --debian-modules
passenv = passenv =
SERVER SERVER
allowlist_externals =
{toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test
[testenv:apacheconftest-external-with-pebble] [testenv:apacheconftest-external-with-pebble]
description = Run apacheconftest with pebble and Certbot outside of the tox virtual environment. description = Run apacheconftest with pebble and Certbot outside of the tox virtual environment.
deps = deps =
-e certbot-ci -e certbot-ci
allowlist_externals =
{toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py
commands = commands =
{toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py --debian-modules {toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py --debian-modules
@@ -183,6 +193,8 @@ commands =
deps = deps =
{[testenv:apacheconftest]deps} {[testenv:apacheconftest]deps}
{[testenv:apacheconftest-external-with-pebble]deps} {[testenv:apacheconftest-external-with-pebble]deps}
allowlist_externals =
{toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py
commands = {[testenv:apacheconftest-external-with-pebble]commands} commands = {[testenv:apacheconftest-external-with-pebble]commands}
[testenv:nginxroundtrip] [testenv:nginxroundtrip]
@@ -205,7 +217,7 @@ commands =
docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile . docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile .
docker build -t apache-compat -f certbot-compatibility-test/Dockerfile-apache . docker build -t apache-compat -f certbot-compatibility-test/Dockerfile-apache .
docker run --rm -t apache-compat -c apache.tar.gz -vvvv docker run --rm -t apache-compat -c apache.tar.gz -vvvv
whitelist_externals = allowlist_externals =
docker docker
passenv = passenv =
DOCKER_* DOCKER_*
@@ -216,7 +228,7 @@ commands =
docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile . docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile .
docker build -t nginx-compat -f certbot-compatibility-test/Dockerfile-nginx . docker build -t nginx-compat -f certbot-compatibility-test/Dockerfile-nginx .
docker run --rm -t nginx-compat -c nginx.tar.gz -vv -aie docker run --rm -t nginx-compat -c nginx.tar.gz -vv -aie
whitelist_externals = allowlist_externals =
docker docker
passenv = passenv =
DOCKER_* DOCKER_*
@@ -306,3 +318,5 @@ setenv = AWS_DEFAULT_REGION=us-east-1
changedir = letstest changedir = letstest
deps = -e {toxinidir}/letstest deps = -e {toxinidir}/letstest
commands = {toxinidir}/tools/retry.sh letstest targets/targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_apache2.sh --repo {toxinidir} commands = {toxinidir}/tools/retry.sh letstest targets/targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_apache2.sh --repo {toxinidir}
allowlist_externals =
{toxinidir}/tools/retry.sh