Rust 开发者助手:release-plz 自动化发布工具详解

文摘   2024-07-02 14:08   江苏  

unsetunset前言:unsetunset

在当今快速发展的软件开发领域,自动化工具的使用已成为提升效率的关键。release-plz 是一个专为 Rust 项目设计的自动化发布工具,它通过简化发布流程,帮助开发者节省宝贵的时间和精力。本文将详细介绍如何使用 release-plz 来发布 Rust 包,包括安装、配置以及在不同平台上的应用。

unsetunset介绍unsetunset

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 版本。

unsetunset文档unsetunset

了解如何在 docs[4] 中使用 release-plz。

安装

安装 | Release-plz

在运行 release-plz 时,请确保您已经安装了 git

release-plz 是一个 Rust 二进制文件,可以通过不同的方式安装。

unsetunset下载预构建的二进制文件unsetunset

最新版本在 GitHub 上。

unsetunsetCargounsetunset

  • 按照这个指南安装 Rust 工具链以确保 cargo 已安装。
  • 运行 cargo install release-plz --locked

unsetunsetDockerunsetunset

运行 docker pull marcoieni/release-plz

unsetunsetArch Linuxunsetunset

release-plz 可以从社区仓库使用 pacman 安装。

  • pacman -S release-plz

AUR 中也提供了 VCS 包,可以使用 AUR 助手安装。 例如:

  • paru -S release-plz-git

unsetunsetAlpine Linuxunsetunset

release-plz 可用于 Alpine Edge。

启用测试仓库后,可以通过 apk 安装。

  • apk add release-plz

unsetunset运行 release-plzunsetunset

有两种方式运行 release-plz:

  • GitHub Action[5]: 从 CI 运行 Release-plz。该操作既更新又发布您的包。
  • CLI[6]: 从您的终端或其他 CI 系统(支持 Gitea)运行 release-plz。

unsetunset用户unsetunset

您可以在以下位置找到在 CI 中使用 release-plz GitHub 操作的公共仓库:

  • GitHub 搜索[7]
  • 依赖图[8]

Release-plz

release-plz release 命令用于发布所有未发布的包。

unsetunset示例unsetunset

假设您有一个包含两个包的工作区: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

unsetunsetGitlabunsetunset

releases-plz 支持使用 --backend gitlab 选项在 Gitlab 上创建版本。

默认的 CI 令牌没有权限创建标签,因此您将需要自定义访问令牌。您需要的权限包括:

  • 角色:Maintainer 或更高
  • 范围:
    • api(用于创建版本)
    • write_repository(用于创建标签)

然后您可以使用以下参数在 Gitlab CI 中运行 release-plz releaserelease-plz release --backend gitlab --git-token <gitlab_token>

unsetunsetGiteaunsetunset

releases-plz 支持使用 --backend gitea 选项在 Gitea 上创建版本。

待办:记录如何在 Gitea 上创建令牌。

然后您可以使用以下参数在 Gitea CI 中运行 release-plz releaserelease-plz release --backend gitea --git-token <gitea_token>

unsetunsetJson 输出unsetunset

您可以通过在命令后附加 -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 的编号。

unsetunset类似项目unsetunset

  • release-please[9]: release-plz 受到 release-please 的启发,但 release-plz 不是基于 git 标签确定下一个版本,而是比较本地包与 cargo 注册表中发布的包。 此外,release-plz 不需要任何配置,并且针对 Rust 项目进行了优化。
  • cargo-smart-release[10]: 无畏地发布工作空间 crate,并带有精美的半手工变更日志。

unsetunset结语:unsetunset

通过本文的介绍,我们了解到 release-plz 不仅简化了 Rust 包的发布流程,还提供了跨平台的支持和灵活的配置选项。无论是在本地开发环境,还是集成到 CI/CD 流程中,release-plz 都能有效地提升软件发布效率。随着技术的不断进步,我们期待 release-plz 能够继续发展,为 Rust 开发者带来更多便利。

参考资料
[1]

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


编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章