Zum Inhalt springen

Plugin: publisher-pypi

Baut Python-Source- und Wheel-Distributionen mit python -m build und lädt die erzeugten dist/*-Artefakte mittels twine upload zu PyPI (oder TestPyPI bzw. privaten Paketindizes) hoch.

Terminal-Fenster
semrel plugin install @semrel/publisher-pypi

semrel plugin install lädt die Binärdatei nach .semrel/plugins/ herunter und aktualisiert .semrel.lock. Committe .semrel.lock, um die Version für dein Team festzuschreiben.

Vorgefertigte, signierte Multi-Plattform-Images (linux/amd64, linux/arm64) werden bei jedem Release veröffentlicht:

Terminal-Fenster
docker pull ghcr.io/semrels/publisher-pypi:latest

Überprüfe die Image-Signatur mit cosign:

Terminal-Fenster
cosign verify ghcr.io/semrels/publisher-pypi:latest \
--certificate-identity-regexp 'https://github.com/SemRels/publisher-pypi/.github/workflows/release.yml.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
version: 1
plugins:
- uses: @semrel/updater-python
phase: pre-tag
args:
file: pyproject.toml
- uses: @semrel/publisher-pypi
phase: release
args:
pypi_token: '${env.PYPI_API_TOKEN}'
# Optional für TestPyPI oder privaten Index:
# pypi_repository_url: "https://test.pypi.org/legacy/"
NameErforderlichStandardBeschreibung
SEMREL_PLUGIN_PYPI_TOKENja (außer Dry-Run)—PyPI API-Token, wird als TWINE_PASSWORD verwendet.
SEMREL_PLUGIN_PYPI_REPOSITORY_URLneinPyPI-StandardOptionale Repository-URL für twine upload --repository-url (z. B. https://test.pypi.org/legacy/).
SEMREL_PLUGIN_WORKDIRnein.Arbeitsverzeichnis für python -m build und dist/.
SEMREL_PLUGIN_PYTHON_BINneinpython / python3Überschreibt die verwendete Python-Binärdatei.
SEMREL_PLUGIN_TWINE_BINneintwineÜberschreibt die verwendete twine-Binärdatei.
  • SEMREL_VERSION
  • SEMREL_NEXT_VERSION
  • SEMREL_DRY_RUN
  1. Sucht python oder python3 im $PATH.
  2. Führt python -m build im konfigurierten Projektverzeichnis aus.
  3. Ermittelt alle gebauten Pakete unter dist/*.
  4. Lädt die Pakete per twine upload hoch (im Dry-Run-Modus wird der Build validiert, der Upload jedoch übersprungen).