From ce2271c786980a6d5f2dd5b532fb1101573ca131 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Tue, 8 Jun 2021 14:42:49 -0700 Subject: [PATCH] add oldest pyproject.toml file that works --- acme/setup.py | 2 +- tools/pinning/{ => normal}/pyproject.toml | 44 +++---- tools/pinning/oldest/pyproject.toml | 135 ++++++++++++++++++++++ tox.ini | 3 + 4 files changed, 161 insertions(+), 23 deletions(-) rename tools/pinning/{ => normal}/pyproject.toml (71%) create mode 100644 tools/pinning/oldest/pyproject.toml diff --git a/acme/setup.py b/acme/setup.py index ed8abce66..980aa9bcb 100644 --- a/acme/setup.py +++ b/acme/setup.py @@ -14,7 +14,7 @@ install_requires = [ 'PyOpenSSL>=17.3.0', 'pyrfc3339', 'pytz', - 'requests>=2.6.0', + 'requests>=2.14.2', 'requests-toolbelt>=0.3.0', 'setuptools>=39.0.1', ] diff --git a/tools/pinning/pyproject.toml b/tools/pinning/normal/pyproject.toml similarity index 71% rename from tools/pinning/pyproject.toml rename to tools/pinning/normal/pyproject.toml index 580922c4e..c29eeb539 100644 --- a/tools/pinning/pyproject.toml +++ b/tools/pinning/normal/pyproject.toml @@ -12,28 +12,28 @@ python = "^3.6" # Any local packages that have dependencies on other local packages must be # listed below before the package it depends on. For instance, certbot depends # on acme so certbot must be listed before acme. -certbot-ci = {path = "../../certbot-ci"} -certbot-compatibility-test = {path = "../../certbot-compatibility-test"} -certbot-dns-cloudflare = {path = "../../certbot-dns-cloudflare", extras = ["docs"]} -certbot-dns-cloudxns = {path = "../../certbot-dns-cloudxns", extras = ["docs"]} -certbot-dns-digitalocean = {path = "../../certbot-dns-digitalocean", extras = ["docs"]} -certbot-dns-dnsimple = {path = "../../certbot-dns-dnsimple", extras = ["docs"]} -certbot-dns-dnsmadeeasy = {path = "../../certbot-dns-dnsmadeeasy", extras = ["docs"]} -certbot-dns-gehirn = {path = "../../certbot-dns-gehirn", extras = ["docs"]} -certbot-dns-google = {path = "../../certbot-dns-google", extras = ["docs"]} -certbot-dns-linode = {path = "../../certbot-dns-linode", extras = ["docs"]} -certbot-dns-luadns = {path = "../../certbot-dns-luadns", extras = ["docs"]} -certbot-dns-nsone = {path = "../../certbot-dns-nsone", extras = ["docs"]} -certbot-dns-ovh = {path = "../../certbot-dns-ovh", extras = ["docs"]} -certbot-dns-rfc2136 = {path = "../../certbot-dns-rfc2136", extras = ["docs"]} -certbot-dns-route53 = {path = "../../certbot-dns-route53", extras = ["docs"]} -certbot-dns-sakuracloud = {path = "../../certbot-dns-sakuracloud", extras = ["docs"]} -certbot-nginx = {path = "../../certbot-nginx"} -certbot-apache = {path = "../../certbot-apache", extras = ["dev"]} -certbot = {path = "../../certbot", extras = ["all"]} -acme = {path = "../../acme", extras = ["docs", "test"]} -letstest = {path = "../../letstest"} -windows-installer = {path = "../../windows-installer"} +certbot-ci = {path = "../../../certbot-ci"} +certbot-compatibility-test = {path = "../../../certbot-compatibility-test"} +certbot-dns-cloudflare = {path = "../../../certbot-dns-cloudflare", extras = ["docs"]} +certbot-dns-cloudxns = {path = "../../../certbot-dns-cloudxns", extras = ["docs"]} +certbot-dns-digitalocean = {path = "../../../certbot-dns-digitalocean", extras = ["docs"]} +certbot-dns-dnsimple = {path = "../../../certbot-dns-dnsimple", extras = ["docs"]} +certbot-dns-dnsmadeeasy = {path = "../../../certbot-dns-dnsmadeeasy", extras = ["docs"]} +certbot-dns-gehirn = {path = "../../../certbot-dns-gehirn", extras = ["docs"]} +certbot-dns-google = {path = "../../../certbot-dns-google", extras = ["docs"]} +certbot-dns-linode = {path = "../../../certbot-dns-linode", extras = ["docs"]} +certbot-dns-luadns = {path = "../../../certbot-dns-luadns", extras = ["docs"]} +certbot-dns-nsone = {path = "../../../certbot-dns-nsone", extras = ["docs"]} +certbot-dns-ovh = {path = "../../../certbot-dns-ovh", extras = ["docs"]} +certbot-dns-rfc2136 = {path = "../../../certbot-dns-rfc2136", extras = ["docs"]} +certbot-dns-route53 = {path = "../../../certbot-dns-route53", extras = ["docs"]} +certbot-dns-sakuracloud = {path = "../../../certbot-dns-sakuracloud", extras = ["docs"]} +certbot-nginx = {path = "../../../certbot-nginx"} +certbot-apache = {path = "../../../certbot-apache", extras = ["dev"]} +certbot = {path = "../../../certbot", extras = ["all"]} +acme = {path = "../../../acme", extras = ["docs", "test"]} +letstest = {path = "../../../letstest"} +windows-installer = {path = "../../../windows-installer"} # Extra dependencies # awscli is just listed here as a performance optimization. As of writing this, diff --git a/tools/pinning/oldest/pyproject.toml b/tools/pinning/oldest/pyproject.toml new file mode 100644 index 000000000..1845c47f8 --- /dev/null +++ b/tools/pinning/oldest/pyproject.toml @@ -0,0 +1,135 @@ +[tool.poetry] +name = "certbot-pinner" +version = "0.1.0" +description = "A simple project for pinning Certbot's dependencies using Poetry." +authors = ["Certbot Project"] +license = "Apache License 2.0" + +[tool.poetry.dependencies] +# The Python version here should be kept in sync with the one used in our +# oldest tests in tox.ini. +python = "3.6" + +# 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 +# on acme so certbot must be listed before acme. +certbot-ci = {path = "../../../certbot-ci"} +certbot-dns-cloudflare = {path = "../../../certbot-dns-cloudflare"} +certbot-dns-cloudxns = {path = "../../../certbot-dns-cloudxns"} +certbot-dns-digitalocean = {path = "../../../certbot-dns-digitalocean"} +certbot-dns-dnsimple = {path = "../../../certbot-dns-dnsimple"} +certbot-dns-dnsmadeeasy = {path = "../../../certbot-dns-dnsmadeeasy"} +certbot-dns-gehirn = {path = "../../../certbot-dns-gehirn"} +certbot-dns-google = {path = "../../../certbot-dns-google"} +certbot-dns-linode = {path = "../../../certbot-dns-linode"} +certbot-dns-luadns = {path = "../../../certbot-dns-luadns"} +certbot-dns-nsone = {path = "../../../certbot-dns-nsone"} +certbot-dns-ovh = {path = "../../../certbot-dns-ovh"} +certbot-dns-rfc2136 = {path = "../../../certbot-dns-rfc2136"} +certbot-dns-route53 = {path = "../../../certbot-dns-route53"} +certbot-dns-sakuracloud = {path = "../../../certbot-dns-sakuracloud"} +certbot-nginx = {path = "../../../certbot-nginx"} +certbot-apache = {path = "../../../certbot-apache", extras = ["dev"]} +certbot = {path = "../../../certbot", extras = ["test"]} +acme = {path = "../../../acme", extras = ["test"]} + +# Oldest dependencies +# We specify the oldest versions our dependencies that we're trying to keep +# support for below. Usually these version numbers are taken from the packages +# of our dependencies available in popular LTS Linux distros. Keeping +# compatibility with those versions makes it much easier for OS maintainers to +# update their Certbot packages. +# +# When updating these dependencies, we should ideally try to only update them +# to the oldest version of the dependency that is found in a non-EOL'd version +# of CentOS, Debian, or Ubuntu that has Certbot packages in their OS +# repositories using a version of Python we support. If the distro is EOL'd or +# using a version of Python we don't support, it can be ignored. + +# CentOS/RHEL 7 EPEL dependencies +# Some of these dependencies may be stricter than necessary because they +# initially referred to the Python 2 packages in CentOS/RHEL 7 with EPEL. +cffi = "1.9.1" +chardet = "2.2.1" +ipaddress = "1.0.16" +mock = "1.0.1" +ndg-httpsclient = "0.3.2" +ply = "3.4" +pyOpenSSL = "17.3.0" +pyasn1 = "0.1.9" +pycparser = "2.14" +pyRFC3339 = "1.0" +python-augeas = "0.5.0" +oauth2client = "4.0.0" +requests = "2.14.2" +urllib3 = "1.10.2" +# Package names containing "." need to be quoted. +"zope.component" = "4.1.0" +"zope.event" = "4.0.3" +"zope.interface" = "4.0.5" + +# Debian Jessie Backports dependencies +# Debian Jessie has reached end of life so these dependencies can probably be +# updated as needed or desired. +pbr = "1.8.0" +pytz = "2012rc0" + +# Debian Buster dependencies +google-api-python-client = "1.5.5" +pyparsing = "2.2.0" + +# Our setup.py dependencies +apacheconfig = "0.3.2" +cloudflare = "1.5.1" +python-digitalocean = "1.11" + +# Ubuntu Xenial dependencies +# Ubuntu Xenial only has versions of Python which we do not support available +# so these dependencies can probably be updated as needed or desired. +ConfigArgParse = "0.10.0" +funcsigs = "0.4" +# Package names containing "." need to be quoted. +"zope.hookable" = "4.0.4" + +# Ubuntu Bionic dependencies. +cryptography = "2.1.4" +distro = "1.0.1" +httplib2 = "0.9.2" +idna = "2.6" +setuptools = "39.0.1" +six = "1.11.0" + +# Ubuntu Focal dependencies +asn1crypto = "0.24.0" +configobj = "5.0.6" +parsedatetime = "2.4" + +# Plugin dependencies +# These aren't necessarily the oldest versions we need to support +# Tracking at https://github.com/certbot/certbot/issues/6473 +boto3 = "1.4.7" +botocore = "1.7.41" +dns-lexicon = "3.1.0" + +# Other dependencies +# We add any dependencies that must be specified in this file for any another +# reason below. + +# As of writing this, cython is a build dependency of pyyaml. Since there +# doesn't appear to be a good way to automatically track down and pin build +# dependencies in Python (see +# https://discuss.python.org/t/how-to-pin-build-dependencies/8238), we list it +# as a dependency here to ensure a version of cython is pinned for extra +# stability. +cython = "*" +# pip's new dependency resolver fails on local packages that depend on each +# other when those packages are requested with extras such as 'certbot[dev]' so +# let's pin it back for now. See https://github.com/pypa/pip/issues/9204. +pip = "20.2.4" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/tox.ini b/tox.ini index 7bdb57cff..a0b0dfba6 100644 --- a/tox.ini +++ b/tox.ini @@ -43,6 +43,9 @@ setenv = # Setting basepython allows the tests to fail fast if that version of Python # isn't available instead of potentially trying to use a newer version of # Python which is unlikely to work. +# +# This version should be kept in sync with the one declared in +# tools/pinning/oldest/pyproject.toml. basepython = python3.6 commands = {[testenv]commands}