Meinungsgithub -Aktionen zur vollständigen Automatisierung von Publishing -Paketen zu PYPI - mithilfe von Poesie- und Github -Releases.
Wir haben diese Aktion veröffentlicht, weil wir sie in unseren Projekten verwenden und dachten, sie wäre auch für andere nützlich. Diese Aktion ist offen für jede Art von Zusammenarbeit und Beitrag - wir erhalten gerne Feedback, Probleme, Anfragen oder nur ein großes Lob.
main , master , beta usw.Spring zu Beispiel: - Veröffentlichung an öffentliche PYPI - mit privaten Abhängigkeiten - zu einem privaten PYPI - mit privaten Abhängigkeiten
In dieser Aktion werden die Poesie als Ihr Paketmanager verwendet und die Dateien von pyproject.toml und poetry.lock in der Stammverzeichnis Ihres Repositorys erhalten.
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
Wenn Sie keinen benutzerdefinierten Läufer verwenden, können Sie die integrierte Funktionalität
GITHUB_TOKENmit Schreibberechtigungen alsACCESS_TOKENverwenden, wie im ersten Beispiel zu sehen. Siehe [https://docs.github.com/en/actions/security-guides/automatic-teka-authentication#using-the-github_token-a-workflow weibliche als
Euen Wir empfehlen Ihnen, diesen Workflow mit dem Test PYPI Registry zu verwendenPUBLISH_REGISTRY: "https://test.pypi.org/simple/"
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
permissions :
contents : write
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
ACCESS_TOKEN : ${{ secrets.GITHUB_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PYPI_TOKEN }} 1.0.0 (Abzug)pyproject.toml und __init__.py im Paketverzeichnis gemäß dem Tag an./pyproject.toml
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 0.1.0 "
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[ tool . poetry . dependencies ]
python = " ^3.10 "./example_package/init.py
__version__ = "0.1.0"Die Aktion verändert den Inhalt Ihres Repositorys, um Konflikte und Fehlanpassungen zu vermeiden:
PYProject.toml
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 1.0.0 " # adjusted to 1.0.0
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[ tool . poetry . dependencies ]
python = " ^3.10 "./example_package/init.py
__version__ = "1.0.0" # adjusted to 1.0.0 Die mit (✓) gekennzeichneten Eingaben sind erforderlich, wenn die
POETRY_DEPENDENCY_REGISTRY_URLfestgelegt ist.
| Name | Beschreibung | Obligatorisch | Standard |
|---|---|---|---|
ACCESS_TOKEN | Github Token mit Schreibzugriff auf das Repository, um die Version anzupassen | ✓ | |
PUBLISH_REGISTRY_PASSWORD | Entweder ein Passwort für den Registrierungsbenutzer oder ein Token in Kombination mit __token__ als PUBLISH_REGISTRY_USERNAME | ✓ | |
PUBLISH_REGISTRY_USERNAME | Der Benutzername für das PYPI -Register | __token__ | |
PACKAGE_DIRECTORY | Das Verzeichnis Das Paket befindet sich in z. ./src/ , ./example_package | './' | |
POETRY_VERSION | Die Poesie -Version, um den Build mit durchzuführen | 1.1.8 | |
POETRY_CORE_VERSION | Die Poetry -Code -Version, um den Build mit durchzuführen | 1.0.4 | |
PYTHON_VERSION | Die Python -Version, um den Build mit durchzuführen | 3.10 | |
BRANCH | Die Filiale, um zu veröffentlichen | master | |
PUBLISH_REGISTRY | Die Registrierung zur Veröffentlichung an EG https://test.pypi.org/simple/ | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | Ermöglicht, eine benutzerdefinierte Registrierung zu definieren, die von Poesie für Abhängigkeitsinstallation verwendet werden kann, z https://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | Der für die benutzerdefinierte Registrierung verwendete Name in den Abhängigkeiten. Muss mit dem Namen in der pyproject.toml übereinstimmen | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | Der Benutzername für die benutzerdefinierte Registrierung | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | Das Passwort für die benutzerdefinierte Registrierung | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | Der Authentifizierungstyp für die benutzerdefinierte Registrierung | http-basic |
In jedem Beispiel müssen Sie:
.github/workflows/publish.yaml1.0.0 und die Aktion wird ausgelöst und veröffentlicht Ihr PaketWenn es einen Anwendungsfall gibt, den Sie sehen möchten, öffnen Sie bitte ein Problem oder eine Pull -Anfrage.
PUBLISH_REGISTRY_PASSWORD mit einem gültigen Token Um das GITHUB_TOKEN zu verwenden, müssen Sie auch Berechtigungen für das Token erteilen. In diesem Fall benötigen Sie den contents:write .
publish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
permissions :
contents : write
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.GITHUB_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}PUBLISH_REGISTRY_PASSWORD mit einem gültigen TokenACCESS_TOKEN Access Token mit Schreibzugriff auf das GitHub -Repositorypublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY : " https://test.pypi.org/legacy/ "PUBLISH_REGISTRY_USER Benutzername für die PYPI -RegistrierungPUBLISH_REGISTRY_PASSWORD mit dem Passwort für den Benutzer PUBLISH_REGISTRY_USERACCESS_TOKEN Access Token mit Schreibzugriff auf das GitHub -Repositorypublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPI package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY_USER : ${{ secrets.PUBLISH_REGISTRY_USER }}
PUBLISH_REGISTRY : " https://pypi.code-specialist.com/simple/ "ACCESS_TOKEN Access Token mit Schreibzugriff auf das GitHub -RepositoryPUBLISH_REGISTRY_USER Benutzername für die PYPI -RegistrierungPUBLISH_REGISTRY_PASSWORD mit dem Passwort für den Benutzer PUBLISH_REGISTRY_USERPOETRY_DEPENDENCY_REGISTRY_USERNAME Benutzername für die benutzerdefinierte RegistrierungPOETRY_DEPENDENCY_REGISTRY_PASSWORD Passwort für die benutzerdefinierte Registrierungpublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPI package
uses : code-specialist/pypi-poetry-publish@v1
with :
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_USER : ${{ secrets.PUBLISH_REGISTRY_USER }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY : " https://pypi.code-specialist.com "
POETRY_DEPENDENCY_REGISTRY_URL : " https://pypi.code-specialist.com "
POETRY_DEPENDENCY_REGISTRY_NAME : " codespecialist "
POETRY_DEPENDENCY_REGISTRY_USERNAME : ${{ secrets.CUSTOM_PUBLISH_REGISTRY_USERNAME }}
POETRY_DEPENDENCY_REGISTRY_PASSWORD : ${{ secrets.CUSTOM_PUBLISH_REGISTRY_PASSWORD }} Damit die Abhängigkeit private-code-specialist-example-package von https://pypi.code-specialist.com/simple/ installiert wird, würde der entsprechende pyproject.toml so aussehen:
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 1.0.0 " # adjusted to 1.0.0
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[[ tool . poetry . source ]]
name = " codespecialist "
url = " https://pypi.code-specialist.com "
[ tool . poetry . dependencies ]
python = " ^3.10 "
private-code-specialist-example-package = { version = " ^1.0.0 " , source = " codespecialist " }