Ação do GitHub opinativa para automatizar totalmente os pacotes de publicação para Pypi - usando lançamentos de poesia e github.
Publicamos essa ação porque a usamos em nossos projetos e pensamos que seria útil para os outros também. Esta ação está aberta a qualquer tipo de colaboração e contribuição - estamos felizes em receber feedback, problemas, solicitações de puxar ou apenas elogios.
main , master , beta , etc.Salte para o Exemplo: - Publicar para Public Pypi - com dependências privadas - para um Pypi particular - com dependências privadas
Essa ação pressupõe que você use a poesia como gerenciador de pacotes e possui os arquivos pyproject.toml e poetry.lock no diretório raiz do seu repositório.
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
Se você não usar um corredor personalizado, poderá usar a funcionalidade incorporada
GITHUB_TOKENcom permissões de gravação como oACCESS_TOKEN, como visto no primeiro exemplo. Veja [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow].
️ Recomendamos que você use este fluxo de trabalho com o Registro de POPIPUBLISH_REGISTRY: "https://test.pypi.org/simple/"até que você possa confirmar que seu fluxo de trabalho funciona conforme o esperado.
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 (gatilho)pyproject.toml e __init__.py no diretório de pacotes de acordo com a tag./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"A ação alterará o conteúdo do seu repositório para evitar conflitos e incompatibilidades de versão:
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 As entradas marcadas com (✓) são necessárias se o
POETRY_DEPENDENCY_REGISTRY_URLestiver definido.
| Nome | Descrição | Obrigatório | Padrão |
|---|---|---|---|
ACCESS_TOKEN | Token do Github com acesso de gravação ao repositório, para ajustar a versão | ✓ | |
PUBLISH_REGISTRY_PASSWORD | Uma senha para o usuário do registro ou um token em combinação com __token__ como o PUBLISH_REGISTRY_USERNAME | ✓ | |
PUBLISH_REGISTRY_USERNAME | O nome de usuário para o registro Pypi | __token__ | |
PACKAGE_DIRECTORY | O diretório O pacote está localizado em ./example_package ./src/ | './' | |
POETRY_VERSION | A versão de poesia para executar a construção com | 1.1.8 | |
POETRY_CORE_VERSION | A versão do código de poesia para executar a construção com | 1.0.4 | |
PYTHON_VERSION | A versão python para executar a construção com | 3.10 | |
BRANCH | A filial para publicar de | master | |
PUBLISH_REGISTRY | O registro a ser publicado para por exemplo, https://test.pypi.org/simple/ | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | Permite definir um registro personalizado a ser usado pela poesia para instalação de dependência, por exemplo, https://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | O nome usado para o registro personalizado nas dependências. Deve corresponder ao nome no pyproject.toml | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | O nome de usuário para o registro personalizado | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | A senha do registro personalizado | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | O tipo de autenticação para o registro personalizado | http-basic |
Cada exemplo exige que você::
.github/workflows/publish.yaml1.0.0 e a ação será acionada e publicará seu pacoteSe houver um caso de uso que você gostaria de ver, abra um problema ou uma solicitação de tração.
PUBLISH_REGISTRY_PASSWORD com um token válido Para usar o GITHUB_TOKEN você também precisa fornecer permissões para o token. Nesse caso, você precisa do contents:write permissão.
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 com um token válidoACCESS_TOKEN com acesso de gravação ao repositório do 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 Nome de usuário para o registro PypiPUBLISH_REGISTRY_PASSWORD com a senha do usuário PUBLISH_REGISTRY_USERACCESS_TOKEN com acesso de gravação ao repositório do 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 com acesso de gravação ao repositório do GitHubPUBLISH_REGISTRY_USER Nome de usuário para o registro PypiPUBLISH_REGISTRY_PASSWORD com a senha do usuário PUBLISH_REGISTRY_USERPOETRY_DEPENDENCY_REGISTRY_USERNAME nome de usuário para o registro personalizadoPOETRY_DEPENDENCY_REGISTRY_PASSWORD Senha para o 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 isso instale o private-code-specialist-example-package em https://pypi.code-specialist.com/simple/ , o correspondente pyproject.toml ficaria assim:
[ 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 " }