前言:
在当今快速发展的软件开发领域,自动化工具的使用已成为提升效率的关键。release-plz 是一个专为 Rust 项目设计的自动化发布工具,它通过简化发布流程,帮助开发者节省宝贵的时间和精力。本文将详细介绍如何使用 release-plz 来发布 Rust 包,包括安装、配置以及在不同平台上的应用。
介绍
Release-plz 是一个自动化工具,帮助您发布 Rust 包:
自动生成 CHANGELOG(使用 git-cliff[1])。 创建 GitHub/Gitea 版本。 发布到 cargo 注册表(默认为 crates.io
)。在 Cargo.toml
中进行版本升级。
Release-plz 根据以下内容更新您的包:
遵循 Conventional commits[2] 的 git 历史记录。 通过 cargo-semver-checks[3] 检测到的 API 破坏性变更。
🤔 什么是发布 PR?
Release-plz 维护发布 PR,随着您合并额外的提交而保持更新。当您准备创建发布时,只需合并发布 PR。
当您合并发布 PR(或当您自己编辑 Cargo.toml
版本时),release-plz:
创建名为 <package_name>-v<version>
的 git 标签(例如tokio-v1.8.1
)。通过运行 cargo publish
将包发布到 cargo 注册表。基于 git 标签发布 GitHub/Gitea 版本。
文档
了解如何在 docs[4] 中使用 release-plz。
安装
安装 | Release-plz
在运行 release-plz
时,请确保您已经安装了 git
。
release-plz
是一个 Rust 二进制文件,可以通过不同的方式安装。
下载预构建的二进制文件
最新版本在 GitHub 上。
Cargo
按照这个指南安装 Rust 工具链以确保 cargo 已安装。 运行 cargo install release-plz --locked
。
Docker
运行 docker pull marcoieni/release-plz
。
Arch Linux
release-plz
可以从社区仓库使用 pacman 安装。
pacman -S release-plz
AUR 中也提供了 VCS 包,可以使用 AUR 助手安装。 例如:
paru -S release-plz-git
Alpine Linux
release-plz
可用于 Alpine Edge。
启用测试仓库后,可以通过 apk 安装。
apk add release-plz
运行 release-plz
有两种方式运行 release-plz:
GitHub Action[5]: 从 CI 运行 Release-plz。该操作既更新又发布您的包。 CLI[6]: 从您的终端或其他 CI 系统(支持 Gitea)运行 release-plz。
用户
您可以在以下位置找到在 CI 中使用 release-plz GitHub 操作的公共仓库:
GitHub 搜索[7] 依赖图[8]
Release-plz
release-plz release
命令用于发布所有未发布的包。
示例
假设您有一个包含两个包的工作区:pkg-a
(版本 0.3.1)和 pkg-b
(版本 0.2.2)。crates.io
注册表中已包含 pkg-a
版本 0.3.1,但不包含 pkg-b
版本 0.2.2,因为您尚未发布此版本。在这种情况下,release-plz 将发布 pkg-b
。
对于每次发布,release-plz 会:
创建一个名为 <package_name>-v<version>
的 git 标签(例如tokio-v1.8.1
)。通过运行 cargo publish
将包发布到 cargo 注册表。基于 git 标签发布 GitHub/Gitea/GitLab 版本。
如果只有一个包要发布(即在 Cargo.toml
文件中 publish != false
),则在标签名称中省略 <package_name>-
。
请注意,release-plz release
不会编辑您的 Cargo.toml
文件,也不会推送新的提交。它会按照您仓库中的状态发布包。因此,您通常在运行 release-plz update
或合并使用 release-plz release-pr
打开的拉取请求后,在主分支上使用 release-plz release
命令。
如果所有包都已发布,则 release-plz release
命令将不执行任何操作。
要了解更多信息,请运行 release-plz release --help
。
Gitlab
releases-plz
支持使用 --backend gitlab
选项在 Gitlab 上创建版本。
默认的 CI 令牌没有权限创建标签,因此您将需要自定义访问令牌。您需要的权限包括:
角色: Maintainer
或更高范围: api
(用于创建版本)write_repository
(用于创建标签)
然后您可以使用以下参数在 Gitlab CI 中运行 release-plz release
:release-plz release --backend gitlab --git-token <gitlab_token>
Gitea
releases-plz
支持使用 --backend gitea
选项在 Gitea 上创建版本。
待办:记录如何在 Gitea 上创建令牌。
然后您可以使用以下参数在 Gitea CI 中运行 release-plz release
:release-plz release --backend gitea --git-token <gitea_token>
Json 输出
您可以通过在命令后附加 -o json
来获取此命令的结果信息。标准输出将包含有关发布的信息:
{
"releases": [
{
"package_name": "<package_name>",
"prs": "<prs>",
"tag": "<tag_name>",
"version": "<version>"
}
]
}
示例:
{
"releases": [
{
"package_name": "my_crate",
"prs": [
{
"html_url": "https://github.com/user/proj/pull/1439",
"number": 1439
}
],
"tag": "v0.1.0",
"version": "0.1.0"
}
]
}
如果 release-plz 没有发布任何包,releases
数组将为空。
tag
字段
即使用户使用 git_tag_enable
字段禁用了标签创建,tag
字段也会出现。这是因为用户可能希望使用标签名称自己创建标签。
prs
字段
prs
是出现在版本变更日志正文中的 PR 数组。它们通常是包含已发布更改的 PR。
数组中的每个条目都是一个对象,包含:
html_url
: PR 的 URL。number
: PR 的编号。
类似项目
release-please[9]: release-plz 受到 release-please 的启发,但 release-plz 不是基于 git 标签确定下一个版本,而是比较本地包与 cargo 注册表中发布的包。 此外,release-plz 不需要任何配置,并且针对 Rust 项目进行了优化。 cargo-smart-release[10]: 无畏地发布工作空间 crate,并带有精美的半手工变更日志。
结语:
通过本文的介绍,我们了解到 release-plz 不仅简化了 Rust 包的发布流程,还提供了跨平台的支持和灵活的配置选项。无论是在本地开发环境,还是集成到 CI/CD 流程中,release-plz 都能有效地提升软件发布效率。随着技术的不断进步,我们期待 release-plz 能够继续发展,为 Rust 开发者带来更多便利。
git-cliff: https://git-cliff.org
[2]Conventional commits: https://www.conventionalcommits.org/
[3]cargo-semver-checks: https://github.com/obi1kenobi/cargo-semver-checks
[4]docs: https://release-plz.ieni.dev/
[5]GitHub Action: https://release-plz.ieni.dev/docs/github
[6]CLI: https://release-plz.ieni.dev/docs/usage
[7]GitHub 搜索: https://github.com/search?type=code&q=path%3A.yml+OR+path%3A*.yaml+MarcoIeni%2Frelease-plz-action%40*
[8]依赖图: https://github.com/MarcoIeni/release-plz-action/network/dependents
[9]release-please: https://github.com/googleapis/release-please
[10]cargo-smart-release: https://github.com/Byron/cargo-smart-release