菜单

发布流程

相关源文件

本文档概述了 Tauri 项目的发布流程,解释了如何跟踪更改、更新版本以及将包发布到各自的注册表中。该流程在很大程度上通过 GitHub Actions 工作流实现自动化,并使用 covector 管理 Tauri 生态系统中的多个包的版本控制和发布。

发布流程概述

Tauri 遵循结构化的发布流程,该流程仔细跟踪具有复杂相互依赖关系之多个包的更改。该流程旨在跨相关包维护版本一致性,并确保包按正确的顺序发布。

来源:.github/workflows/covector-version-or-publish.yml1-148 .changes/config.json1-231

变更跟踪系统

Tauri 使用变更文件系统来跟踪将在下一次发布中包含的更改。此系统由一个名为 covector 的工具进行管理。

变更文件结构

变更文件存储在 .changes 目录中,格式如下:

  • 每次更改都记录在一个单独的 JSON 文件中。
  • 这些文件包含有关更改类型、受影响的包以及描述的信息。
  • 更改类型分为:功能、增强、错误修复等。

.changes/config.json 文件定义了:

  1. 包依赖关系,以确保正确的版本控制。
  2. 每个包的发布命令。
  3. 版本/发布前和发布后的钩子。

来源:.changes/config.json1-231

版本更新流程

当更改推送到 dev 分支时,会触发版本更新。该过程使用 covector 工具分析变更文件并确定需要更新的版本。

版本工作流

在版本更新过程中:

  1. Covector 分析所有变更文件,以确定哪些包需要版本更新。
  2. 它会更新 package.json 和 Cargo.toml 文件中的版本号。
  3. 它会遵守配置文件中定义的依赖关系图。
  4. 将创建包含这些更改的拉取请求。
  5. 合并后,工作流将再次运行,但这次会继续进行发布。

来源:.github/workflows/covector-version-or-publish.yml57-121

包依赖

Tauri 的发布流程会管理包之间的依赖关系,以确保版本一致性。在 .changes/config.json 中定义的包依赖关系图确保当一个包更新时,所有依赖的包也会被更新。

来源:.changes/config.json129-229

发布流程

发布流程会在没有变更文件时触发,或者在版本更新 PR 被合并后触发。

发布工作流

在发布阶段:

  1. Covector 运行发布前检查,包括安全审计。
  2. 每个包都会发布到其各自的注册表(Rust 包是 crates.io,JavaScript 包是 npm)。
  3. 为每个已发布的包创建 GitHub release。
  4. 会为 CLI 包触发特殊工作流,以构建特定平台的二进制文件。
  5. 会触发文档更新。

来源:.github/workflows/covector-version-or-publish.yml95-139 .changes/config.json14-128

CLI 发布流程

CLI 包需要额外的步骤来构建特定于平台的二进制文件。两个独立的工作流处理此问题:

JavaScript CLI 发布 (`@tauri-apps/cli`)

此工作流:

  1. 为多个平台(Windows、macOS、Linux)和架构构建原生绑定。
  2. 在每个平台上测试绑定。
  3. 将包发布到 npm,并附带来源证明。
  4. 使用二进制文件更新 GitHub release。

来源:.github/workflows/publish-cli-js.yml1-400

Rust CLI 发布 (`tauri-cli`)

此工作流:

  1. 为多个平台和架构构建 Rust CLI。
  2. 将二进制文件打包成归档文件。
  3. 根据版本创建一个带有标签的 GitHub release。
  4. 将归档文件上传到 release。

来源:.github/workflows/publish-cli-rs.yml1-96

触发发布流程

发布流程可以通过两种方式触发:

  1. 自动化:当更改推送到 dev 分支时,covector 工作流会自动运行。
  2. 手动:也可以通过 GitHub 的工作流分派手动触发工作流。

自动化流程可确保发布始终如一地进行,并且仅在有实际更改需要发布时才进行。

来源:.github/workflows/covector-version-or-publish.yml7-11

发布前的测试

在发布流程继续之前,必须通过一套全面的测试。

  1. 集成测试在所有主要平台上运行。
  2. CLI 特定测试验证功能。
  3. 安全审计检查漏洞。

这些测试有助于确保只发布高质量、安全的代码。

来源:.github/workflows/covector-version-or-publish.yml13-56 .github/workflows/test-cli-js.yml1-63

发布后操作

成功发布后,会采取一些额外的操作:

  1. 通过仓库分派触发 tauri-docs 仓库的文档更新。
  2. 构建特定于平台的二进制文件并将其附加到 GitHub release。
  3. 可能会通知其他依赖项目有关新版本的信息。

来源:.github/workflows/covector-version-or-publish.yml123-147

总结

Tauri 的发布流程是一个复杂的自动化系统,它管理多个包之间复杂的相互依赖关系。它确保:

  1. 更改被正确跟踪和记录。
  2. 版本根据语义版本控制正确更新。
  3. 包按正确的顺序发布。
  4. 构建特定于平台的二进制文件并使其可用。
  5. 文档保持最新。

此流程最大限度地减少了手动干预,同时保持了高标准的发布质量。