Acción de Github obstinado para automatizar completamente los paquetes de publicación a PYPI - utilizando la poesía y las versiones de GitHub.
Publicamos esta acción porque la usamos en nuestros proyectos y pensamos que también sería útil para otros. Esta acción está abierta a cualquier tipo de colaboración y contribución : estamos felices de recibir comentarios, problemas, solicitudes de extracción o simplemente felicitaciones.
main , master , beta , etc.Saltar al ejemplo: - Publicar en PYPI público, con dependencias privadas, a un PYPI privado, con dependencias privadas
Esta acción supone que usa la poesía como administrador de paquetes y tiene los archivos pyproject.toml y poetry.lock en el directorio raíz de su repositorio.
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
Si no usa un corredor personalizado, puede usar la funcionalidad Builtin
GITHUB_TOKENcon permisos de escritura comoACCESS_TOKENcomo se ve en el primer ejemplo. Ver [https://docs.github.com/en/acciones/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflowfont>thttps://docs.github. Com/en acciones/guías de seguridad/automatic-token-authentication#Using-the-github_token-in-a-a-a-horkflowflowflow)
️ Le recomendamos que use este flujo de trabajo con el Registro Pypi Test Pypi, por ejemploPUBLISH_REGISTRY: "https://test.pypi.org/simple/"hasta que pueda confirmar que su flujo de trabajo funciona como se esperaba.
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 (disparador)pyproject.toml y __init__.py en el directorio de paquetes de acuerdo con la etiqueta./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"La acción alterará el contenido de su repositorio para evitar conflictos y desajustes de versión:
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 Se requieren las entradas marcadas con (✓) si se establece la
POETRY_DEPENDENCY_REGISTRY_URL.
| Nombre | Descripción | Obligatorio | Por defecto |
|---|---|---|---|
ACCESS_TOKEN | Token de GitHub con acceso de escritura al repositorio, para ajustar la versión | ✓ | |
PUBLISH_REGISTRY_PASSWORD | Una contraseña para el usuario del registro o un token en combinación con __token__ como el PUBLISH_REGISTRY_USERNAME | ✓ | |
PUBLISH_REGISTRY_USERNAME | El nombre de usuario para el registro PYPI | __token__ | |
PACKAGE_DIRECTORY | El directorio El paquete se encuentra en Eg ./src/ , ./example_package | './' | |
POETRY_VERSION | La versión de poesía para realizar la construcción con | 1.1.8 | |
POETRY_CORE_VERSION | La versión del código de poesía para realizar la compilación con | 1.0.4 | |
PYTHON_VERSION | La versión de Python para realizar la construcción con | 3.10 | |
BRANCH | La rama para publicar desde | master | |
PUBLISH_REGISTRY | El registro para publicar en EG https://test.pypi.org/simple/ | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | Permite definir un registro personalizado para ser utilizado por la poesía para la instalación de dependencia, por ejemplo, https://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | El nombre utilizado para el registro personalizado en las dependencias. Debe coincidir con el nombre en pyproject.toml | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | El nombre de usuario para el registro personalizado | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | La contraseña para el registro personalizado | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | El tipo de autenticación para el registro personalizado | http-basic |
Cada ejemplo requiere que lo haga:
.github/workflows/publish.yaml1.0.0 y la acción se activará y publicará su paqueteSi hay un caso de uso que le gustaría ver, abra un problema o una solicitud de extracción.
PUBLISH_REGISTRY_PASSWORD con un token válido Para usar el GITHUB_TOKEN , también debe proporcionar permisos para el token. En este caso necesita el 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 con un token válidoACCESS_TOKEN Access Token con acceso de escritura al repositorio de GitHubpublish.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 Nombre de usuario para el registro PYPIPUBLISH_REGISTRY_PASSWORD con la contraseña para el usuario PUBLISH_REGISTRY_USERACCESS_TOKEN Access Token con acceso de escritura al repositorio de GitHubpublish.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 con acceso de escritura al repositorio de GitHubPUBLISH_REGISTRY_USER Nombre de usuario para el registro PYPIPUBLISH_REGISTRY_PASSWORD con la contraseña para el usuario PUBLISH_REGISTRY_USERPOETRY_DEPENDENCY_REGISTRY_USERNAME nombre de usuario para el registro personalizadoPOETRY_DEPENDENCY_REGISTRY_PASSWORD contraseña para el registro personalizadopublish.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 }} Para que esto instale la dependencia private-code-specialist-example-package de https://pypi.code-specialist.com/simple/ , el correspondiente pyproject.toml se vería así:
[ 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 " }