Skip to content

Commit

Permalink
upload: warn the user if their signature(s) are ignored
Browse files Browse the repository at this point in the history
Signed-off-by: William Woodruff <[email protected]>
  • Loading branch information
woodruffw committed Aug 27, 2023
1 parent 0bb428c commit 5681da5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
8 changes: 7 additions & 1 deletion tests/test_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def test_print_response_if_verbose(upload_settings, stub_response, caplog):
assert caplog.messages.count(response_log) == 2


def test_success_with_pre_signed_distribution(upload_settings, stub_repository):
def test_success_with_pre_signed_distribution(upload_settings, stub_repository, caplog):
"""Add GPG signature provided by user to uploaded package."""
# Upload a pre-signed distribution
result = upload.upload(
Expand All @@ -177,6 +177,12 @@ def test_success_with_pre_signed_distribution(upload_settings, stub_repository):
b"signature",
)

# Ensure that a warning is emitted.
assert (
"One or more packages has an associated armored signature; these will "
"be silently ignored by the index" in caplog.messages
)


def test_exception_with_only_pre_signed_file(upload_settings, stub_repository):
"""Raise an exception when only a signed file is uploaded."""
Expand Down
13 changes: 13 additions & 0 deletions twine/commands/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,19 @@ def upload(upload_settings: settings.Settings, dists: List[str]) -> None:
_make_package(filename, signatures, upload_settings) for filename in uploads
]

# Warn the user if they're trying to upload a PGP signature to PyPI
# or TestPyPI, which will (as of May 2023) ignore it.
# This check is currently limited to just those indices, since other
# indices may still support PGP signatures.
if (
any(p.gpg_signature for p in packages_to_upload)
and "pypi.org" in repository_url

Check failure

Code scanning / CodeQL

Incomplete URL substring sanitization High

The string
pypi.org
may be at an arbitrary position in the sanitized URL.
):
logger.warning(
"One or more packages has an associated armored signature; "
"these will be silently ignored by the index"
)

repository = upload_settings.create_repository()
uploaded_packages = []

Expand Down

0 comments on commit 5681da5

Please sign in to comment.