自以为是的GitHub动作,可以使用诗歌和GitHub发行,将发布包完全自动化为PYPI。
我们之所以发布此操作,是因为我们在项目中使用它,并认为它也对他人也有用。此操作对任何类型的合作和贡献都开放- 我们很高兴收到反馈,问题,拉扯请求或仅仅荣誉。
main , master , beta ,等。跳到示例: - 与私人依赖关系发布到公共PYPI-与私人依赖关系的私人PYPI
此操作假设您将诗歌用作软件包管理器,并将pyproject.toml和poetry.lock文件放在存储库的根目录中。
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
如果您不使用自定义跑步者,则可以将内置功能
GITHUB_TOKEN带有写入权限作为第一个示例中所示的ACCESS_TOKEN。请参阅[https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-token-in-a-workflow](https://docs.github。com/com/en/en en/en en/en en/en en in/en ant Actions/actions/security-security-withatomatic-token-token-authentication#the-githe-the-github_tflow)
配x 我们建议您与Test PYPI注册表EGPUBLISH_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 (触发)pyproject.toml和__init__.py中的版本./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"该操作将更改存储库的内容,以避免冲突和版本不匹配:
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 如果设置了
POETRY_DEPENDENCY_REGISTRY_URL,则需要标记为(✓)的输入。
| 姓名 | 描述 | 强制的 | 默认 |
|---|---|---|---|
ACCESS_TOKEN | github令牌具有写入存储库的写入,以调整版本 | ✓ | |
PUBLISH_REGISTRY_PASSWORD | 注册表用户的密码,或与__token__一起使用PUBLISH_REGISTRY_USERNAME令牌 | ✓ | |
PUBLISH_REGISTRY_USERNAME | PYPI注册表的用户名 | __token__ | |
PACKAGE_DIRECTORY | 包装的目录位于./src/中, ./example_package | './' | |
POETRY_VERSION | 诗歌版本与 | 1.1.8 | |
POETRY_CORE_VERSION | 诗歌代码版本可以执行构建 | 1.0.4 | |
PYTHON_VERSION | Python版本可以执行构建 | 3.10 | |
BRANCH | 从 | master | |
PUBLISH_REGISTRY | 出版至EG https://test.pypi.org/simple/注册表 | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | 允许定义一个自定义注册表,可以由诗歌用于依赖性安装,例如https://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | 依赖项中的自定义注册表的名称。必须匹配pyproject.toml中的名称 | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | 自定义注册表的用户名 | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | 自定义注册表的密码 | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | 自定义注册表的身份验证类型 | http-basic |
每个示例都需要您:
.github/workflows/publish.yaml1.0.0 ,该操作将被触发并发布您的软件包如果您想查看用例,请打开问题或拉动请求。
PUBLISH_REGISTRY_PASSWORD带有有效令牌为了使用GITHUB_TOKEN ,您还必须为令牌提供权限。在这种情况下,您需要contents:write许可。
出版
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带有有效令牌ACCESS_TOKEN访问令牌具有写入GitHub存储库的写入访问权限出版
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用户名的PYPI注册表PUBLISH_REGISTRY_PASSWORD带有PUBLISH_REGISTRY_USER用户的密码ACCESS_TOKEN访问令牌具有写入GitHub存储库的写入访问权限出版
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访问令牌具有写入GitHub存储库的写入访问权限PUBLISH_REGISTRY_USER用户名的PYPI注册表PUBLISH_REGISTRY_PASSWORD带有PUBLISH_REGISTRY_USER用户的密码POETRY_DEPENDENCY_REGISTRY_USERNAME注册表POETRY_DEPENDENCY_REGISTRY_PASSWORD密码的自定义注册表出版
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 }} 为此,要从https://pypi.code-specialist.com/simple/安装依赖项private-code-specialist-example-package ,相应的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 . 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 " }