跳转到主要内容

从GitHub仓库自动化发布。

项目描述

发布机器人 构建状态 PyPI版本 构建状态

自动在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 releasenew major releasenew minor releasenew patch release。之后,您只需合并机器人制作的 PR 即可。

机器人与 pypa/setuptools_scm 插件协同工作。如果您在使用它,您根本不需要关心 __version__。您还可以确信机器人将正确制作 PyPI 发布——在发布软件之前,它会在 git 仓库中检出标签。

需要 release-conf.yaml 文件。有关详细信息,请参阅 配置 部分。

一旦完成 Github 版本,机器人将此版本上传到 PyPI。请注意,您必须设置您的登录详细信息(请参阅 需求)。

在本地尝试

$ pip install release-bot

其他可能的安装方式是通过 DockerOpenShiftArch 用户仓库

与释放机器人第一次交互可能是 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 个人访问令牌。建议访问令牌的权限为:repodelete_repouser

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.yamlconf.yaml(可选的 .pypirc)。

通过命令启动机器人:$ release-bot -c <path_to_conf.yaml> --debug 您可以向下滚动以查看运行机器人的调试信息。

4. 制作新的发布

  • 在上游仓库中创建一个标题为 0.0.1 release 的问题。您可以选择自己的版本号。
  • 等待机器人基于此问题创建新的 PR(刷新间隔在 conf.yaml 中设置)。
  • 一旦合并了 PR,机器人将制作新的发布。
  • 检查您的上游仓库的发布页面在 GitHub 上,您应该看到新的发布 0.0.1

从现在起,只需创建问题即可自动创建发行版。

文档

配置

有两个yaml配置文件

  1. conf.yaml -- 为机器人本身配置的配置文件,包含一些敏感数据(建议存储在私有仓库中)
  2. release-conf.yaml -- 存储在上游仓库中,包含有关如何发布特定项目的信息。

私有仓库

您需要设置一个git仓库,其中将存储conf.yaml.pypirc文件。如果不是本地仓库,请确保它是私有的,以防止任何私有信息泄露。如果未通过-c/--configurationconf.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项目做出贡献感兴趣,请阅读贡献指南以获取更多信息。

支持者

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面