通过 github action 发布 poetry 项目到 PYPI
前言
gemini-cli 的基础功能已经完备, 我就计划着把包发布到 pypi 上去, 这样子公司那边开发的工具也可以直接引用, 避免和工作的代码产生直接交集.
python 官方提供了很完善的 github action 发布和自动生成 release 的教程, 但它是基于 pip 和 build 写的, 用 poetry 实现构建依赖管理的项目就需要不少改动了.
而我是直接从 github 官方的 python 发布 workflow 修改而来, 只实现了构建和发布, release 以后再完善了.
需要以下几个步骤
- 配置 workflow 文件
- 配置仓库的发布 密钥
- 在包的发布页面授权github workflow
生成 workflow 文件
脚本内容见下文, https://github.com/{owner}/{repo}/actions/new
通过这个路径进入, 选 python package
再贴入我下面的脚本即可.
配置 token
workflow 脚本中有一个密钥变量 PYPI_API_TOKEN
需要去到 https://pypi.org/manage/account/
PYPI 的个人账户页面, 在下方的 ‘API tokens` 中生成一个记下来备用.
这个 token 在本地 deploy 也需要用到, 所以到这一步之前应该已经拿到了.
接着, 进入 https://github.com/${owner}/${repo}/settings/secrets/actions
在 Repository secrets 中配置上 pypi 上生成的 api token, 这样子脚本中就能顺利地获取到发布 token 了.
授权 github workflow
和本地发布不同, github 发布需要在 PYPI 中注册 项目信息和 workflow 文件名.
以 gemini-cil 为例, 打开以下链接, 进入发布配置页面
https://pypi.org/manage/project/gemini-cli/settings/publishing/
在 Trusted Publisher Management 配置自己的 github 项目名和 workflow 文件名 (注意是 xxx.yml 文件名)
如果这里不进行授权, 那么 github workflow 会报 403 错误
PYPI 还支持必须带上相应环境变量才放行, 我这里就用不到了.
workflow 脚本内容
以下是完整的发布脚本
1 | # This workflow will upload a Python Package using Twine when a release is created |