从GitHub仓库自动化发布。
项目描述
发布机器人

自动在GitHub和PyPI上发布。
描述
这是一个帮助维护者将软件提供给用户的机器人。它旨在监视GitHub仓库中的发布拉取请求。PR的命名必须遵循以下格式之一
- 要创建 "0.1.0" 上游版本,请使用
0.1.0 release
- 创建新的主版本,例如从 "1.2.3" 发布到 "2.0.0",释放机器人将会启动发布
- 创建新的次要版本,例如从 "1.2.3" 发布到 "1.3.0",释放机器人将会启动发布
- 创建新的补丁版本,例如从 "1.2.3" 发布到 "1.2.4",释放机器人将会启动发布
释放机器人现在只支持 SemVer。一旦合并了 PR,机器人将会分别创建新的 Github 版本和 PyPi 版本。变更日志将会从仓库的根目录提取,并且必须命名为 CHANGELOG.md
。新版本的变更日志必须以版本标题开头,即 # 0.1.0
。标题与上一个版本标题之间的一切内容都将被提取到变更日志中。
或者,您可以让机器人处理繁琐的工作,更新 __version__
变量,并使用从 git log 中获取的提交信息填充变更日志。您可以通过创建一个问题并命名为您为发布 PR 时的相同名称来触发此操作,例如 0.1.0 release
、new major release
、new minor release
、new patch release
。之后,您只需合并机器人制作的 PR 即可。
机器人与 pypa/setuptools_scm 插件协同工作。如果您在使用它,您根本不需要关心 __version__
。您还可以确信机器人将正确制作 PyPI 发布——在发布软件之前,它会在 git 仓库中检出标签。
需要 release-conf.yaml
文件。有关详细信息,请参阅 配置 部分。
一旦完成 Github 版本,机器人将此版本上传到 PyPI。请注意,您必须设置您的登录详细信息(请参阅 需求)。
在本地尝试
$ pip install release-bot
其他可能的安装方式是通过 Docker、OpenShift、Arch 用户仓库。
与释放机器人第一次交互可能是 Github 上的自动化发布。让我们开始吧。
1. 创建上游仓库或使用现有的一个
这是一个上游仓库,新版本将在此发布。
在上游仓库中创建包含如何发布特定项目的信息的 release-conf.yaml
文件。复制并编辑 release-conf.yaml。
在 release-conf.yaml
的末尾添加以下代码
# whether to allow bot to make PRs based on issues
trigger_on_issue: true
有关可能的更高级设置,请参阅 上游仓库文档。
2. 创建 conf.yaml
创建配置文件 conf.yaml
。您可以使用此仓库中的一个 配置文件。您将需要生成一个 Github 个人访问令牌。建议访问令牌的权限为:repo
、delete_repo
、user
。
在 conf.yaml
的末尾添加以下代码
# Name of the account that the github_token belongs to
# Only needed for triggering the bot on an issue.
github_username: <your_github_username>
注意:此文件 不应该 存储在上游仓库中,因为它包含敏感数据。
有关可能的更高级设置,请参阅 私有仓库文档。另外,如果您想包含 PyPi 发布,请参阅 需求。
3. 运行 release-bot
在此阶段,release-bot 已安装。已设置了至少两个配置文件:release-conf.yaml
和 conf.yaml
(可选的 .pypirc
)。
通过命令启动机器人:$ release-bot -c <path_to_conf.yaml> --debug
您可以向下滚动以查看运行机器人的调试信息。
4. 制作新的发布
- 在上游仓库中创建一个标题为
0.0.1 release
的问题。您可以选择自己的版本号。 - 等待机器人基于此问题创建新的 PR(刷新间隔在
conf.yaml
中设置)。 - 一旦合并了 PR,机器人将制作新的发布。
- 检查您的上游仓库的发布页面在 GitHub 上,您应该看到新的发布
0.0.1
。
从现在起,只需创建问题即可自动创建发行版。
文档
配置
有两个yaml配置文件
conf.yaml
-- 为机器人本身配置的配置文件,包含一些敏感数据(建议存储在私有仓库中)release-conf.yaml
-- 存储在上游仓库中,包含有关如何发布特定项目的信息。
私有仓库
您需要设置一个git仓库,其中将存储conf.yaml
和.pypirc
文件。如果不是本地仓库,请确保它是私有的,以防止任何私有信息泄露。如果未通过-c/--configuration
将conf.yaml
的路径传递给机器人,机器人将尝试在当前工作目录中找到它。
以下为conf.yaml
配置选项
选项 | 描述 | 必需 |
---|---|---|
repository_name |
您的GitHub仓库名称 | 是 |
repository_owner |
仓库所有者 | 是 |
github_token |
Github个人访问令牌 | 是 |
github_username |
属于github_token 的账户名称。仅当在问题上触发机器人时需要。 |
否 |
github_app_installation_id |
Github应用的安装ID(一个数字) | 否 |
github_app_id |
Github应用ID(一个数字) | 否 |
github_app_cert_path |
指向Github提供的用于Github应用的认证机制的证书的路径 | 否 |
refresh_interval |
检查仓库的时间间隔(秒)。默认为180 | 否 |
clone_url |
用于克隆您的GitHub仓库的URL。默认情况下,使用https 变体。 |
否 |
示例配置conf.yaml
可以在本仓库中找到。
关于github_token
,通常为机器人创建一个GitHub账户(并使用其GitHub API令牌)是个好主意,这样您可以跟踪机器人所做的更改以及您自己的更改。
您还可以创建一个GitHub应用,并将其用作机器人的认证机制。为此,您需要指定以github_app
开头的前三个配置值。
注意:如果上游仓库是一个私有GitHub仓库,则必须在conf.yaml
中的clone_url
选项中指定仓库的SSH URL。这将允许机器人在从上游仓库获取数据时使用SSH进行认证。
上游仓库
您还需要在上游项目仓库的根目录中有一个release-conf.yaml
文件。以下是一些可能的选项
选项 | 含义 | 必需 |
---|---|---|
changelog |
更改日志条目列表。如果为空,则默认为$version release |
否 |
author_name |
更改日志的作者名称。如果未设置,则使用合并提交的作者 | 否 |
author_email |
更改日志的作者电子邮件。如果未设置,则使用合并提交的作者 | 否 |
pypi |
是否在PyPI上发布。默认为True | 否 |
pypi_project |
您的PyPI仓库名称 | 否 |
trigger_on_issue |
是否允许机器人根据问题创建PR。默认为False。 | 否 |
labels |
机器人将放在问题和PR上的标签列表 | 否 |
示例配置release-conf-example.yaml
可以在本仓库中找到。
需求
在requirements.txt
中指定。您必须按照PyPI文档中的说明设置您的PyPI登录详细信息。
Docker镜像
为了便于运行,release-bot作为source-to-image构建器镜像提供。
然后您可以通过以下方式创建最终镜像
$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name
其中$CONFIGURATION_REPOSITORY_URL是包含conf.yaml和.pypirc文件的仓库的链接。
为了本地测试,您可以通过以下方式运行最终镜像
$ docker run <app-name>
一旦所有更改和配置文件都存在于GitHub中,并且git仓库包含所需的文件,您可以在您的GitHub仓库中创建一个带有类似“X.Y.Z发布”的字符串的问题,您可以看到如下日志:
$ docker run meta-test-family-bot
---> Setting up ssh key...
Agent pid 12
Identity added: ./.ssh/id_rsa (./.ssh/id_rsa)
11:47:36.212 configuration.py DEBUG Loaded configuration for fedora-modularity/meta-test-family
11:47:36.212 releasebot.py INFO release-bot v0.4.1 reporting for duty!
11:47:36.212 github.py DEBUG Fetching release-conf.yaml
11:47:51.636 releasebot.py DEBUG No merged release PR found
11:47:52.196 releasebot.py INFO Found new release issue with version: 0.8.4
11:47:55.578 releasebot.py DEBUG No more open issues found
11:47:56.098 releasebot.py INFO Making a new PR for release of version 0.8.5 based on an issue.
11:47:57.608 utils.py DEBUG ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family.git', '.']
...
OpenShift模板
您也可以使用此仓库中的openshift-template.yml
在此OpenShift中运行此机器人。您必须设置两个环境变量,$APP_NAME
是您的release-bot部署的名称,而$CONFIGURATION_REPOSITORY
包含release-bot的配置。仓库内容在上文描述。注意,如果您使用私有仓库(您绝对应该这样做),则需要设置一个名为release-bot-secret
的新OpenShift secret以进行身份验证。它可以是您用于访问仓库的ssh私钥(对于GitHub请参阅部署密钥)。以下是指南,说明如何在OpenShift GUI中完成此操作,或者使用oc
命令行工具的另一个指南。
默认情况下,当在Docker Hub推送此镜像的新版本时,release-bot构建镜像不会更新自己。您可以通过在openshift-template.yml
中取消注释包含#importPolicy:
和#scheduled: true
的行来更改它。然后在新发布时将拉取此镜像。
Arch用户仓库
对于Arch或基于Arch的Linux发行版,您可以从AUR包安装此机器人。您可以使用您最喜欢的AUR Helper来安装包。例如
$ aurman -S release-bot
您也可以使用AUR仓库中的PKGBUILD
安装它。要构建包,请下载PKGBUILD并执行
$ makepkg -cs #c flag cleans the extra remaining source and compiled files. s flag installs the dependencies if you don't have it.
要安装包,请执行
$ sudo pacman -U release-bot-...tar.xz
贡献
如果您对为release-bot项目做出贡献感兴趣,请阅读贡献指南以获取更多信息。
release-bot-0.7.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ff846289eee4ba23732b16cb4c01545d921693238ab65e31ce5e4571b706c6a |
|
MD5 | 6acdcc50f28a7c4cef929577e90ec3e7 |
|
BLAKE2b-256 | a0bf728bb81b1c39f63a4ee9b81a6d655bc2148ed157702325bb454f7dcb53ca |