diff --git a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml index ab15c8c8d..09d0e22c7 100644 --- a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml +++ b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml @@ -18,7 +18,7 @@ jobs: PYTHON_VERSION: 3.11 TOXENV: py311 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: PYTHON_VERSION: 3.8 TOXENV: integration-certbot-oldest diff --git a/.azure-pipelines/templates/jobs/packaging-jobs.yml b/.azure-pipelines/templates/jobs/packaging-jobs.yml index 22f0f3790..d26f1d4d6 100644 --- a/.azure-pipelines/templates/jobs/packaging-jobs.yml +++ b/.azure-pipelines/templates/jobs/packaging-jobs.yml @@ -186,7 +186,7 @@ jobs: displayName: Install Certbot snap - script: | 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 - job: snap_dns_run dependsOn: snaps_build diff --git a/.azure-pipelines/templates/steps/tox-steps.yml b/.azure-pipelines/templates/steps/tox-steps.yml index 6a257821b..156bbeaa2 100644 --- a/.azure-pipelines/templates/steps/tox-steps.yml +++ b/.azure-pipelines/templates/steps/tox-steps.yml @@ -44,7 +44,7 @@ steps: export TARGET_BRANCH="`echo "${BUILD_SOURCEBRANCH}" | sed -E 's!refs/(heads|tags)/!!g'`" [ -z "${SYSTEM_PULLREQUEST_TARGETBRANCH}" ] || export TARGET_BRANCH="${SYSTEM_PULLREQUEST_TARGETBRANCH}" env - python3 -m tox + python3 -m tox run env: AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID) AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) diff --git a/certbot/docs/contributing.rst b/certbot/docs/contributing.rst index 9fded857b..b1876dca2 100644 --- a/certbot/docs/contributing.rst +++ b/certbot/docs/contributing.rst @@ -134,7 +134,7 @@ For debugging, we recommend putting 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 --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 time). @@ -163,7 +163,7 @@ With a user allowed to access your local Docker daemon, run: .. 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 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. It’s useful, but you don’t have to read the whole thing 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. Those imports should look like this: @@ -509,12 +509,12 @@ Steps: something we have the time and interest to review. 1. Write your code! When doing this, you should add :ref:`mypy 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. 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 :ref:`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 developers run locally. The ``--skip-missing-interpreters`` argument ignores missing versions of Python needed for running the tests. Fix any errors. diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml index 7ffd19986..1034ee8b5 100644 --- a/tools/pinning/current/pyproject.toml +++ b/tools/pinning/current/pyproject.toml @@ -8,6 +8,9 @@ license = "Apache License 2.0" [tool.poetry.dependencies] python = "^3.8" +# workaround for: https://github.com/python-poetry/poetry-plugin-export/issues/183 +urllib3 = ">=1.25.4,<1.27" + # Local dependencies # Any local packages that have dependencies on other local packages must be # 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) cryptography = "!= 37.0.3" -# If poetry>=1.3.0 is selected, multiple versions of virtualenv are selected -# causing problems when exporting dependencies so let's pin poetry back until -# https://github.com/python-poetry/poetry-plugin-export/issues/168 is resolved. -poetry = "<1.3.0" +# Branch 4.x of tox introduces backward incompatibility changes, so require a newer +# version of tox to keep deterministic builds. +tox = ">=4" -# 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] diff --git a/tools/requirements.txt b/tools/requirements.txt index 6012addb8..cf1109fac 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -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" 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" -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" 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" 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" -boto3==1.34.36 ; python_version >= "3.8" and python_version < "4.0" -botocore==1.34.36 ; python_version >= "3.8" and python_version < "4.0" -cachecontrol==0.12.14 ; python_version >= "3.8" and python_version < "4.0" -cachetools==5.3.2 ; python_version >= "3.8" and python_version < "4.0" -cachy==0.3.0 ; 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.73 ; python_version >= "3.8" and python_version < "4.0" +build==1.2.1 ; python_version >= "3.8" and python_version < "4.0" +cachecontrol==0.14.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" 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" -cleo==1.0.0a5 ; python_version >= "3.8" and python_version < "4.0" -cloudflare==2.17.0 ; 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" +cleo==2.1.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" 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" -coverage==7.4.1 ; python_version >= "3.8" and python_version < "4.0" -crashtest==0.3.1 ; python_version >= "3.8" and python_version < "4.0" -cryptography==42.0.2 ; python_version >= "3.8" and python_version < "4.0" +coverage==7.4.4 ; 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.5 ; 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" 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" 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" -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" -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" 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" 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" -google-api-core==2.16.2 ; 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" +fastjsonschema==2.19.1 ; python_version >= "3.8" and python_version < "4.0" +filelock==3.13.3 ; 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==2.27.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" -html5lib==1.1 ; 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.63.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" 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-resources==6.1.1 ; 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.4.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" 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" 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" -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" 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" 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" 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" -jsonschema-specifications==2023.12.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" +jsonpickle==3.0.3 ; python_version >= "3.8" and python_version < "4.0" +keyring==24.3.1 ; 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" 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" 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" -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" 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" -nh3==0.2.15 ; 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.17 ; 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" 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" 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" 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" -pkgutil-resolve-name==1.3.10 ; python_version >= "3.8" and python_version < "3.9" -platformdirs==2.6.2 ; python_version >= "3.8" and python_version < "4.0" +pkginfo==1.10.0 ; python_version >= "3.8" and python_version < "4.0" +platformdirs==4.2.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" -poetry-core==1.3.2 ; 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==1.2.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.7.1 ; 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" -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" 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.3.0 ; python_version >= "3.8" and python_version < "4.0" -pyasn1==0.5.1 ; python_version >= "3.8" and python_version < "4.0" +pyasn1-modules==0.4.0 ; python_version >= "3.8" and python_version < "4.0" +pyasn1==0.6.0 ; 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" -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" 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" -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" -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" -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==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-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" 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==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" -readme-renderer==42.0 ; python_version >= "3.8" and python_version < "4.0" -referencing==0.33.0 ; python_version >= "3.8" and python_version < "4.0" +rapidfuzz==3.7.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-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-toolbelt==0.9.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==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" 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" -rpds-py==0.17.1 ; python_version >= "3.8" and python_version < "4.0" +rich==13.7.1 ; python_version >= "3.8" and python_version < "4.0" 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" 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==69.0.3 ; 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.2.0 ; 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" 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-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" -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" -tomlkit==0.12.3 ; python_version >= "3.8" and python_version < "4.0" -tox==3.28.0 ; python_version >= "3.8" and python_version < "4.0" -traitlets==5.14.1 ; python_version >= "3.8" and python_version < "4.0" -twine==4.0.2 ; python_version >= "3.8" and python_version < "4.0" -types-httplib2==0.22.0.2 ; python_version >= "3.8" and python_version < "4.0" -types-pyopenssl==24.0.0.20240130 ; python_version >= "3.8" and python_version < "4.0" +tomlkit==0.12.4 ; 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.2 ; python_version >= "3.8" and python_version < "4.0" +trove-classifiers==2024.3.25 ; python_version >= "3.8" and python_version < "4.0" +twine==5.0.0 ; 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-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-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-setuptools==69.0.0.20240125 ; 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-setuptools==69.2.0.20240317 ; 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" -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" 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" -webencodings==0.5.1 ; python_version >= "3.8" and python_version < "4.0" -wheel==0.42.0 ; python_version >= "3.8" and python_version < "4.0" +wheel==0.43.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" -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" diff --git a/tox.ini b/tox.ini index 8178771d4..1ad33dc27 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,7 @@ # mypy doesn't current pass for us on Windows. Fixing that is being tracked by # https://github.com/certbot/certbot/issues/7803. envlist = {cover,lint}-{win,posix},mypy + skipsdist = true [base] @@ -22,6 +23,7 @@ setenv = install_command = python -I {toxinidir}/tools/pip_install.py {opts} {packages} deps = -e acme[test] + -e certbot -e certbot[test] !win: -e certbot-apache[dev] -e certbot-dns-cloudflare @@ -38,7 +40,7 @@ deps = -e certbot-dns-route53 -e certbot-dns-sakuracloud -e certbot-nginx -whitelist_externals = +allowlist_externals = echo false # This and the next few testenvs are a workaround for @@ -73,7 +75,7 @@ basepython = python3.8 setenv = CERTBOT_OLDEST=1 commands = {[testenv:py]commands} -[testenv:cover{,-posix}] +[testenv:cover] coverage_report = python -m coverage report # These coverage report commands are used on both posix and windows common_coverage_report_commands = @@ -98,6 +100,10 @@ commands = {[testenv:cover]coverage_report} --fail-under 100 --include certbot-apache/* {[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] commands = {[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 passenv = SERVER +allowlist_externals = + {toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test [testenv:apacheconftest-external-with-pebble] description = Run apacheconftest with pebble and Certbot outside of the tox virtual environment. deps = -e certbot-ci +allowlist_externals = + {toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py commands = {toxinidir}/certbot-apache/certbot_apache/_internal/tests/apache-conf-files/apache-conf-test-pebble.py --debian-modules @@ -183,6 +193,8 @@ commands = deps = {[testenv:apacheconftest]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} [testenv:nginxroundtrip] @@ -205,7 +217,7 @@ 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 -t apache-compat -c apache.tar.gz -vvvv -whitelist_externals = +allowlist_externals = docker passenv = DOCKER_* @@ -216,7 +228,7 @@ 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 -t nginx-compat -c nginx.tar.gz -vv -aie -whitelist_externals = +allowlist_externals = docker passenv = DOCKER_* @@ -306,3 +318,5 @@ setenv = AWS_DEFAULT_REGION=us-east-1 changedir = 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} +allowlist_externals = + {toxinidir}/tools/retry.sh