1
0
mirror of https://github.com/certbot/certbot.git synced 2026-01-26 07:41:33 +03:00

Merge pull request #9426 from certbot/2.0-merge-master

2.0.x: merge master and bump version to 2.0.0.dev0
This commit is contained in:
Brad Warren
2022-10-06 12:04:35 -07:00
committed by GitHub
31 changed files with 195 additions and 152 deletions

View File

@@ -6,12 +6,10 @@ jobs:
matrix:
amd64:
DOCKER_ARCH: amd64
# Do not run the heavy non-amd64 builds for test branches
${{ if not(startsWith(variables['Build.SourceBranchName'], 'test-')) }}:
arm32v6:
DOCKER_ARCH: arm32v6
arm64v8:
DOCKER_ARCH: arm64v8
arm32v6:
DOCKER_ARCH: arm32v6
arm64v8:
DOCKER_ARCH: arm64v8
# The default timeout of 60 minutes is a little low for compiling
# cryptography on ARM architectures.
timeoutInMinutes: 180
@@ -121,12 +119,10 @@ jobs:
matrix:
amd64:
SNAP_ARCH: amd64
# Do not run the heavy non-amd64 builds for test branches
${{ if not(startsWith(variables['Build.SourceBranchName'], 'test-')) }}:
armhf:
SNAP_ARCH: armhf
arm64:
SNAP_ARCH: arm64
armhf:
SNAP_ARCH: armhf
arm64:
SNAP_ARCH: arm64
timeoutInMinutes: 0
steps:
- script: |

View File

@@ -3,6 +3,6 @@ usage: jws [-h] [--compact] {sign,verify} ...
positional arguments:
{sign,verify}
optional arguments:
options:
-h, --help show this help message and exit
--compact

View File

@@ -3,7 +3,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'cryptography>=2.5.0',

View File

@@ -1,7 +1,7 @@
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
# We specify the minimum acme and certbot version as the current plugin

View File

@@ -28,7 +28,7 @@ class IntegrationTestsContext(certbot_context.IntegrationTestsContext):
self.nginx_config_path = os.path.join(self.nginx_root, 'nginx.conf')
self.nginx_config: str
default_server = request.param['default_server'] # type: ignore[attr-defined]
default_server = request.param['default_server']
self.process = self._start_nginx(default_server)
def cleanup(self) -> None:

View File

@@ -1,7 +1,7 @@
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'certbot',

View File

@@ -39,7 +39,7 @@ The Token needed by Certbot requires ``Zone:DNS:Edit`` permissions for only the
zones you need certificates for.
Using Cloudflare Tokens also requires at least version 2.3.1 of the ``cloudflare``
python module. If the version that automatically installed with this plugin is
Python module. If the version that automatically installed with this plugin is
older than that, and you can't upgrade it on your system, you'll have to stick to
the Global key.
@@ -77,6 +77,18 @@ file. This warning will be emitted each time Certbot uses the credentials file,
including for renewal, and cannot be silenced except by addressing the issue
(e.g., by using a command like ``chmod 600`` to restrict access to the file).
.. note::
Please note that the ``cloudflare`` Python module used by the plugin has
additional methods of providing credentials to the module, e.g. environment
variables or the ``cloudflare.cfg`` configuration file. These methods are not
supported by Certbot. If any of those additional methods of providing
credentials is being used, they must provide the same credentials (i.e.,
email and API key *or* an API token) as the credentials file provided to
Certbot. If there is a discrepancy, the ``cloudflare`` Python module will
raise an error. Also note that the credentials provided to Certbot will take
precedence over any other method of providing credentials to the ``cloudflare``
Python module.
Examples
--------

View File

@@ -82,8 +82,9 @@ class Authenticator(dns_common.DNSAuthenticator):
if not self.credentials: # pragma: no cover
raise errors.Error("Plugin has not been prepared.")
if self.credentials.conf('api-token'):
return _CloudflareClient(None, self.credentials.conf('api-token'))
return _CloudflareClient(self.credentials.conf('email'), self.credentials.conf('api-key'))
return _CloudflareClient(api_token = self.credentials.conf('api-token'))
return _CloudflareClient(email = self.credentials.conf('email'),
api_key = self.credentials.conf('api-key'))
class _CloudflareClient:
@@ -91,8 +92,19 @@ class _CloudflareClient:
Encapsulates all communication with the Cloudflare API.
"""
def __init__(self, email: Optional[str], api_key: str) -> None:
self.cf = CloudFlare.CloudFlare(email, api_key)
def __init__(self, email: Optional[str] = None, api_key: Optional[str] = None,
api_token: Optional[str] = None) -> None:
if email:
# If an email was specified, we're using an email/key combination and not a token.
# We can't use named arguments in this case, as it would break compatibility with
# the Cloudflare library since version 2.10.1, as the `token` argument was used for
# tokens and keys alike and the `key` argument did not exist in earlier versions.
self.cf = CloudFlare.CloudFlare(email, api_key)
else:
# If no email was specified, we're using just a token. Let's use the named argument
# for simplicity, which is compatible with all (current) versions of the Cloudflare
# library.
self.cf = CloudFlare.CloudFlare(token=api_token)
def add_txt_record(self, domain: str, record_name: str, record_content: str,
record_ttl: int) -> None:

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'cloudflare>=1.5.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'python-digitalocean>=1.11', # 1.15.0 or newer is recommended for TTL support

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
# This version of lexicon is required to address the problem described in

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'google-api-python-client>=1.5.5',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -25,14 +25,22 @@ Credentials
-----------
Use of this plugin requires a configuration file containing OVH API
credentials for an account with the following access rules:
credentials for an account with the following access rules (allowing all domains):
* ``GET /domain/zone/*``
* ``PUT /domain/zone/*``
* ``POST /domain/zone/*``
* ``DELETE /domain/zone/*``
These credentials can be obtained there:
Alternatively, to allow a single domain only, the following access rules apply:
* ``GET /domain/zone/``
* ``GET /domain/zone/<REQUIRED_DOMAIN>/*``
* ``PUT /domain/zone/<REQUIRED_DOMAIN>/*``
* ``POST /domain/zone/<REQUIRED_DOMAIN>/*``
* ``DELETE /domain/zone/<REQUIRED_DOMAIN>/*``
These credentials can be obtained at the following links:
* `OVH Europe <https://eu.api.ovh.com/createToken/>`_ (endpoint: ``ovh-eu``)
* `OVH North America <https://ca.api.ovh.com/createToken/>`_ (endpoint:

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dnspython>=1.15.0',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'boto3>=1.15.15',

View File

@@ -4,7 +4,7 @@ import sys
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
'dns-lexicon>=3.2.1',

View File

@@ -1,7 +1,7 @@
from setuptools import find_packages
from setuptools import setup
version = '1.31.0.dev0'
version = '2.0.0.dev0'
install_requires = [
# We specify the minimum acme and certbot version as the current plugin

View File

@@ -2,7 +2,7 @@
Certbot adheres to [Semantic Versioning](https://semver.org/).
## 1.31.0 - master
## 1.32.0 - master
### Added
@@ -18,6 +18,25 @@ Certbot adheres to [Semantic Versioning](https://semver.org/).
More details about these changes can be found on our GitHub repo.
## 1.31.0 - 2022-10-04
### Added
*
### Changed
* If Certbot exits before setting up its usual log files, the temporary directory created to save logging information will begin with the name `certbot-log-` rather than a generic name. This should not be considered a [stable aspect of Certbot](https://certbot.eff.org/docs/compatibility.html) and may change again in the future.
### Fixed
* Fixed an incompatibility in the certbot-dns-cloudflare plugin and the Cloudflare library
which was introduced in the Cloudflare library version 2.10.1. The library would raise
an error if a token was specified in the Certbot `--dns-cloudflare-credentials` file as
well as the `cloudflare.cfg` configuration file of the Cloudflare library.
More details about these changes can be found on our GitHub repo.
## 1.30.0 - 2022-09-07
### Added

View File

@@ -1,3 +1,3 @@
"""Certbot client."""
# version number like 1.2.3a0, must have at least 2 parts, like 1.2
__version__ = '1.31.0.dev0'
__version__ = '2.0.0.dev0'

View File

@@ -264,7 +264,7 @@ class TempHandler(logging.StreamHandler):
"""
def __init__(self) -> None:
self._workdir = tempfile.mkdtemp()
self._workdir = tempfile.mkdtemp(prefix="certbot-log-")
self.path = os.path.join(self._workdir, 'log')
stream = util.safe_open(self.path, mode='w', chmod=0o600)
super().__init__(stream)

View File

@@ -35,7 +35,7 @@ manage your account:
--agree-tos Agree to the ACME server's Subscriber Agreement
-m EMAIL Email address for important account notifications
optional arguments:
options:
-h, --help show this help message and exit
-c CONFIG_FILE, --config CONFIG_FILE
path to config file (default: /etc/letsencrypt/cli.ini
@@ -126,7 +126,7 @@ optional arguments:
case, and to know when to deprecate support for past
Python versions and flags. If you wish to hide this
information from the Let's Encrypt server, set this to
"". (default: CertbotACMEClient/1.30.0 (certbot;
"". (default: CertbotACMEClient/1.31.0 (certbot;
OS_NAME OS_VERSION) Authenticator/XXX Installer/YYY
(SUBCOMMAND; flags: FLAGS) Py/major.minor.patchlevel).
The flags encoded in the user agent are: --duplicate,

View File

@@ -6,80 +6,45 @@ Get Certbot
:local:
About Certbot
=============
*Certbot is meant to be run directly on a web server*, normally by a system administrator. In most cases, running Certbot on your personal computer is not a useful option. The instructions below relate to installing and running Certbot on a server.
System administrators can use Certbot directly to request certificates; they should *not* allow unprivileged users to run arbitrary Certbot commands as ``root``, because Certbot allows its user to specify arbitrary file locations and run arbitrary scripts.
Certbot is packaged for many common operating systems and web servers. Check whether
``certbot`` (or ``letsencrypt``) is packaged for your web server's OS by visiting
certbot.eff.org_, where you will also find the correct installation instructions for
your system.
.. Note:: Unless you have very specific requirements, we kindly suggest that you use the installation instructions for your system found at certbot.eff.org_.
.. _certbot.eff.org: https://certbot.eff.org
.. _system_requirements:
System Requirements
===================
-------------------
- Linux, macOS, BSD and Windows
- Recommended root access on Linux/BSD/Required Administrator access on Windows
- Port 80 Open
Certbot currently requires Python 3.7+ running on a UNIX-like operating
system. By default, it requires root access in order to write to
``/etc/letsencrypt``, ``/var/log/letsencrypt``, ``/var/lib/letsencrypt``; to
bind to port 80 (if you use the ``standalone`` plugin) and to read and
modify webserver configurations (if you use the ``apache`` or ``nginx``
plugins). If none of these apply to you, it is theoretically possible to run
without root privileges, but for most users who want to avoid running an ACME
client as root, either `letsencrypt-nosudo
<https://github.com/diafygi/letsencrypt-nosudo>`_ or `simp_le
<https://github.com/zenhack/simp_le>`_ are more appropriate choices.
.. Note:: Certbot is most useful when run with root privileges, because it is then able to automatically configure TLS/SSL for Apache and nginx. \
*Certbot is meant to be run directly on a web server*, normally by a system administrator. In most cases, running Certbot on your personal computer is not a useful option. The instructions below relate to installing and running Certbot on a server.
The Apache plugin currently requires an OS with augeas version 1.0; currently `it
supports
<https://github.com/certbot/certbot/blob/master/certbot-apache/certbot_apache/_internal/constants.py>`_
modern OSes based on Debian, Ubuntu, Fedora, SUSE, Gentoo and Darwin.
Installation
------------
Alternate installation methods
================================
If you are offline or your operating system doesn't provide a package, you can use
an alternate method for installing ``certbot``.
Unless you have very specific requirements, we kindly suggest that you use the installation instructions for your system found at https://certbot.eff.org/instructions.
.. _snap-install:
Snap
----
Snap (Recommended)
------------------
Our instructions are the same across all systems that use Snap. You can find instructions for installing Certbot through Snap can be found at https://certbot.eff.org/instructions by selecting your server software and then choosing "snapd" in the "System" dropdown menu.
Most modern Linux distributions (basically any that use systemd) can install
Certbot packaged as a snap. Snaps are available for x86_64, ARMv7 and ARMv8
architectures. The Certbot snap provides an easy way to ensure you have the
latest version of Certbot with features like automated certificate renewal
preconfigured.
Most modern Linux distributions (basically any that use systemd) can install Certbot packaged as a snap. Snaps are available for x86_64, ARMv7 and ARMv8 architectures. The Certbot snap provides an easy way to ensure you have the latest version of Certbot with features like automated certificate renewal preconfigured.
If you unable to use snaps, you can use an alternate method for installing ``certbot``.
You can find instructions for installing the Certbot snap at
https://certbot.eff.org/instructions by selecting your server software and then
choosing "snapd" in the "System" dropdown menu. (You should select "snapd"
regardless of your operating system, as our instructions are the same across
all systems.)
.. _docker-user:
Running with Docker
-------------------
Alternative 1: Docker
---------------------
Docker_ is an amazingly simple and quick way to obtain a
certificate. However, this mode of operation is unable to install
certificates or configure your webserver, because our installer
plugins cannot reach your webserver from inside the Docker container.
Most users should use the instructions at certbot.eff.org_. You should only use
Docker if you are sure you know what you are doing and have a good reason to do
so.
Most users should use the instructions at certbot.eff.org_. You should only use Docker if you are sure you know what you are doing and have a good reason to do so.
You should definitely read the :ref:`where-certs` section, in order to
know how to manage the certificates
@@ -124,11 +89,41 @@ of the ``/etc/letsencrypt`` directory, see :ref:`where-certs`.
.. _Docker: https://docker.com
.. _`install Docker`: https://docs.docker.com/engine/installation/
.. _certbot.eff.org: https://certbot.eff.org/instructions
Pip
---
.. _pip:
Alternative 2: Pip
------------------
Installing Certbot through pip is only supported on a best effort basis and
when using a virtual environment. Instructions for installing Certbot through
pip can be found at https://certbot.eff.org/instructions by selecting your
server software and then choosing "pip" in the "System" dropdown menu.
.. _third-party:
Alternative 3: Third Party Distributions
----------------------------------------
Third party distributions exist for other specific needs. They often are maintained
by these parties outside of Certbot and tend to rapidly fall out of date on LTS-style distributions.
.. _certbot-auto:
Certbot-Auto [Deprecated]
-------------------------
.. toctree::
:hidden:
We used to have a shell script named ``certbot-auto`` to help people install
Certbot on UNIX operating systems, however, this script is no longer supported.
Please remove ``certbot-auto``. To do so, you need to do three things:
1. If you added a cron job or systemd timer to automatically run certbot-auto to renew your certificates, you should delete it. If you did this by following our instructions, you can delete the entry added to `/etc/crontab` by running a command like `sudo sed -i '/certbot-auto/d' /etc/crontab`.
2. Delete the certbot-auto script. If you placed it in `/usr/local/bin`` like we recommended, you can delete it by running `sudo rm /usr/local/bin/certbot-auto`.
3. Delete the Certbot installation created by certbot-auto by running `sudo rm -rf /opt/eff.org`.

View File

@@ -1,6 +1,6 @@
# Docker Arch (amd64, arm32v6, ...)
ARG TARGET_ARCH
FROM ${TARGET_ARCH}/python:3.8-alpine3.12
FROM ${TARGET_ARCH}/python:3.10-alpine3.16
# Qemu Arch (x86_64, arm, ...)
ARG QEMU_ARCH

View File

@@ -10,58 +10,57 @@ apacheconfig==0.3.2; python_version >= "3.7"
appdirs==1.4.4; python_version >= "3.7" and python_version < "4.0"
appnope==0.1.3; python_version >= "3.7" and sys_platform == "darwin"
astroid==2.11.7; python_version >= "3.7"
atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7"
attrs==22.1.0; python_version >= "3.7"
awscli==1.25.40
awscli==1.25.40; python_version >= "3.7"
awscli==1.25.76
awscli==1.25.76; python_version >= "3.7"
azure-devops==6.0.0b4; python_version >= "3.7"
babel==2.10.3; python_version >= "3.7"
backcall==0.2.0; python_version >= "3.7"
bcrypt==3.2.2; python_version >= "3.7"
bcrypt==4.0.0; python_version >= "3.7"
beautifulsoup4==4.11.1; python_version >= "3.7"
bleach==5.0.1; python_version >= "3.7"
boto3==1.24.40; python_version >= "3.7"
botocore==1.27.40; python_version >= "3.7"
cachecontrol==0.12.11; python_version >= "3.7" and python_version < "4.0"
cached-property==1.5.2; python_version >= "3.7"
boto3==1.24.75; python_version >= "3.7"
botocore==1.27.75; python_version >= "3.7"
cachecontrol==0.12.12; python_version >= "3.7" and python_version < "4.0"
cached-property==1.5.2; python_version < "3.8" and python_version >= "3.7"
cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0"
cachy==0.3.0; python_version >= "3.7" and python_version < "4.0"
certifi==2022.6.15; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
certifi==2022.9.14; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
cffi==1.15.1; python_version >= "3.7"
charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4"
charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4"
cleo==1.0.0a5; python_version >= "3.7" and python_version < "4.0"
cloudflare==2.9.11; python_version >= "3.7"
cloudflare==2.10.1; python_version >= "3.7"
colorama==0.4.4; python_version >= "3.7"
configargparse==1.5.3; python_version >= "3.7"
configobj==5.0.6; python_version >= "3.7"
coverage==6.4.2; python_version >= "3.7"
coverage==6.4.4; python_version >= "3.7"
crashtest==0.3.1; python_version >= "3.7" and python_version < "4.0"
cryptography==37.0.4
cryptography==37.0.4; python_version >= "3.7"
cython==0.29.31
cryptography==38.0.1
cryptography==38.0.1; python_version >= "3.7"
cython==0.29.32
decorator==5.1.1; python_version >= "3.7"
dill==0.3.5.1; python_version >= "3.7"
distlib==0.3.5; python_version >= "3.7"
distlib==0.3.6; python_version >= "3.7"
distro==1.7.0; python_version >= "3.7"
dns-lexicon==3.11.1; python_version >= "3.7" and python_version < "4.0"
dnspython==2.2.1; python_version >= "3.7" and python_version < "4.0"
docker-compose==1.26.2; python_version >= "3.7"
docker==4.2.2; python_version >= "3.7"
docker-compose==1.29.2; python_version >= "3.7"
docker==6.0.0; python_version >= "3.7"
dockerpty==0.4.1; python_version >= "3.7"
docopt==0.6.2; python_version >= "3.7"
docutils==0.16; python_version >= "3.7"
entrypoints==0.3; python_version >= "3.7" and python_version < "4.0"
execnet==1.9.0; python_version >= "3.7"
fabric==2.7.1; python_version >= "3.7"
filelock==3.7.1; python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0"
google-api-core==2.8.2; python_version >= "3.7"
google-api-python-client==2.55.0; python_version >= "3.7"
filelock==3.8.0; python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0"
google-api-core==2.10.1; python_version >= "3.7"
google-api-python-client==2.61.0; python_version >= "3.7"
google-auth-httplib2==0.1.0; python_version >= "3.7"
google-auth==2.9.1; python_version >= "3.7"
google-auth==2.11.0; python_version >= "3.7"
googleapis-common-protos==1.56.4; python_version >= "3.7"
html5lib==1.1; python_version >= "3.7" and python_version < "4.0"
httplib2==0.20.4; python_version >= "3.7"
idna==3.3; python_version >= "3.7" and python_version < "4" or python_version >= "3.7" and python_version < "4.0"
idna==3.4; python_version >= "3.7" and python_version < "4" or python_version >= "3.7" and python_version < "4.0"
imagesize==1.4.1; python_version >= "3.7"
importlib-metadata==1.7.0; python_version >= "3.7" and python_version < "3.8"
iniconfig==1.1.1; python_version >= "3.7"
@@ -80,16 +79,15 @@ jsonpickle==2.2.0; python_version >= "3.7"
jsonschema==3.2.0; python_version >= "3.7"
keyring==22.3.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
lazy-object-proxy==1.7.1; python_version >= "3.7"
lockfile==0.12.2
markupsafe==2.1.1; python_version >= "3.7"
matplotlib-inline==0.1.3; python_version >= "3.7"
matplotlib-inline==0.1.6; python_version >= "3.7"
mccabe==0.7.0; python_version >= "3.7"
msgpack==1.0.4; python_version >= "3.7" and python_version < "4.0"
msrest==0.6.21; python_version >= "3.7"
mypy-extensions==0.4.3; python_version >= "3.7"
mypy==0.971; python_version >= "3.7"
oauth2client==4.1.3; python_version >= "3.7"
oauthlib==3.2.0; python_version >= "3.7"
oauthlib==3.2.1; python_version >= "3.7"
packaging==20.9; python_version >= "3.7"
paramiko==2.11.0; python_version >= "3.7"
parsedatetime==2.6; python_version >= "3.7"
@@ -97,43 +95,42 @@ parso==0.8.3; python_version >= "3.7"
pathlib2==2.3.7.post1; python_version >= "3.7"
pexpect==4.8.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" and sys_platform != "win32"
pickleshare==0.7.5; python_version >= "3.7"
pip==22.2.1; python_version >= "3.7"
pip==22.2.2; python_version >= "3.7"
pkginfo==1.8.3; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
platformdirs==2.5.2; python_version >= "3.7"
pluggy==1.0.0; python_version >= "3.7"
ply==3.11; python_version >= "3.7"
poetry-core==1.1.0a7
poetry==1.2.0a2
prompt-toolkit==3.0.30; python_version >= "3.7"
protobuf==4.21.4; python_version >= "3.7"
prompt-toolkit==3.0.31; python_version >= "3.7"
protobuf==4.21.6; python_version >= "3.7"
ptyprocess==0.7.0; python_version >= "3.7" and python_version < "4.0"
py==1.11.0; python_version >= "3.7"
pyasn1-modules==0.2.8; python_version >= "3.7"
pyasn1==0.4.8; python_version >= "3.7"
pycparser==2.21; python_version >= "3.7"
pygments==2.12.0; python_version >= "3.7"
pygments==2.13.0; python_version >= "3.7"
pylev==1.4.0; python_version >= "3.7" and python_version < "4.0"
pylint==2.13.9
pynacl==1.5.0; python_version >= "3.7"
pynsist==2.7; python_version >= "3.7"
pyopenssl==22.0.0; python_version >= "3.7"
pyparsing==3.0.9; python_version >= "3.7"
pypiwin32==223; sys_platform == "win32" and python_version >= "3.7"
pyrfc3339==1.1; python_version >= "3.7"
pyrsistent==0.18.1; python_version >= "3.7"
pytest-cov==3.0.0; python_version >= "3.7"
pytest-forked==1.4.0; python_version >= "3.7"
pytest-xdist==2.5.0; python_version >= "3.7"
pytest==7.1.2; python_version >= "3.7"
pytest==7.1.3; python_version >= "3.7"
python-augeas==1.1.0; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.7"
python-digitalocean==1.17.0; python_version >= "3.7"
python-dotenv==0.20.0; python_version >= "3.7"
pytz==2022.1; python_version >= "3.7"
python-dotenv==0.21.0; python_version >= "3.7"
pytz==2022.2.1; python_version >= "3.7"
pywin32-ctypes==0.2.0; python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32"
pywin32==304; sys_platform == "win32" and python_version >= "3.7"
pyyaml==5.4.1; python_version >= "3.7"
readme-renderer==35.0; python_version >= "3.7"
readme-renderer==37.1; python_version >= "3.7"
requests-download==0.1.2; python_version >= "3.7"
requests-file==1.5.1; python_version >= "3.7" and python_version < "4.0"
requests-oauthlib==1.3.1; python_version >= "3.7"
@@ -142,11 +139,11 @@ requests==2.28.1; python_version >= "3.7" and python_version < "4"
rfc3986==2.0.0; python_version >= "3.7"
rsa==4.7.2; python_version >= "3.7" and python_version < "4"
s3transfer==0.6.0; python_version >= "3.7"
secretstorage==3.3.2; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
secretstorage==3.3.3; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
semantic-version==2.10.0; python_version >= "3.7"
setuptools-rust==1.4.1
setuptools==63.2.0; python_version >= "3.7"
shellingham==1.4.0; python_version >= "3.7" and python_version < "4.0"
setuptools-rust==1.5.1
setuptools==65.3.0; python_version >= "3.7"
shellingham==1.5.0; python_version >= "3.7" and python_version < "4.0"
six==1.16.0; python_version >= "3.7"
snowballstemmer==2.2.0; python_version >= "3.7"
soupsieve==2.3.2.post1; python_version >= "3.7"
@@ -162,24 +159,24 @@ texttable==1.6.4; python_version >= "3.7"
tldextract==3.3.1; python_version >= "3.7" and python_version < "4.0"
toml==0.10.2; python_version >= "3.7"
tomli==2.0.1; python_version < "3.11" and python_version >= "3.7" or python_full_version <= "3.11.0a6" and python_version >= "3.7" or python_version >= "3.7"
tomlkit==0.11.1; python_version >= "3.7" and python_version < "4.0"
tox==3.25.1; python_version >= "3.7"
tqdm==4.64.0; python_version >= "3.7"
traitlets==5.3.0; python_version >= "3.7"
tomlkit==0.11.4; python_version >= "3.7" and python_version < "4.0"
tox==3.26.0; python_version >= "3.7"
tqdm==4.64.1; python_version >= "3.7"
traitlets==5.4.0; python_version >= "3.7"
twine==3.3.0; python_version >= "3.7"
typed-ast==1.5.4; python_version >= "3.7" and python_version < "3.8" or implementation_name == "cpython" and python_version < "3.8" and python_version >= "3.7"
types-cryptography==3.3.21; python_version >= "3.7"
types-pyopenssl==22.0.9; python_version >= "3.7"
types-cryptography==3.3.23; python_version >= "3.7"
types-pyopenssl==22.0.10; python_version >= "3.7"
types-pyrfc3339==1.1.1; python_version >= "3.7"
types-python-dateutil==2.8.19; python_version >= "3.7"
types-pytz==2022.1.2; python_version >= "3.7"
types-requests==2.28.5; python_version >= "3.7"
types-setuptools==63.2.2; python_version >= "3.7"
types-six==1.16.18; python_version >= "3.7"
types-urllib3==1.26.17; python_version >= "3.7"
types-pytz==2022.2.1.0; python_version >= "3.7"
types-requests==2.28.10; python_version >= "3.7"
types-setuptools==65.3.0; python_version >= "3.7"
types-six==1.16.19; python_version >= "3.7"
types-urllib3==1.26.24; python_version >= "3.7"
typing-extensions==4.3.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7"
uritemplate==4.1.1; python_version >= "3.7"
urllib3==1.26.11; python_version >= "3.7" and python_version < "4"
urllib3==1.26.12; python_version >= "3.7" and python_version < "4"
virtualenv==20.4.4; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
wcwidth==0.2.5; python_version >= "3.7"
webencodings==0.5.1; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
@@ -188,3 +185,7 @@ wheel==0.37.1; python_version >= "3.7"
wrapt==1.14.1; python_version >= "3.7"
yarg==0.1.9; python_version >= "3.7"
zipp==3.8.1; python_version >= "3.7" and python_version < "3.8"
zope.component==5.0.1; python_version >= "3.7"
zope.event==4.5.0; python_version >= "3.7"
zope.hookable==5.2; python_version >= "3.7"
zope.interface==5.4.0; python_version >= "3.7"

View File

@@ -7,7 +7,7 @@ set -e
PLUGIN_PATH=$1
PLUGIN=$(basename "${PLUGIN_PATH}")
DESCRIPTION=$(grep description "${PLUGIN_PATH}/setup.py" | sed -E 's|\s+description="(.*)",|\1|g')
DESCRIPTION=$(sed -E -n "/[[:space:]]+description=/ s/[[:space:]]+description=['\"](.*)['\"],/\1/ p" "${PLUGIN_PATH}/setup.py")
mkdir -p "${PLUGIN_PATH}/snap"
cat <<EOF > "${PLUGIN_PATH}/snap/snapcraft.yaml"
# This file is generated automatically and should not be edited manually.