发布模型

报告问题 查看源代码

原始博文中所述,Bazel 4.0 及更高版本支持两种发布轨道:滚动版本和长期支持 (LTS) 版本。本页面介绍了有关 Bazel 发布模型的最新信息。

版本版本控制

Bazel 使用 major.minor.patch 语义版本控制方案。

  • 主要版本包含不向后兼容上一个版本的功能。每个主要 Bazel 版本都是 LTS 版本。
  • 次要版本包含从 bug 向后移植的 bug 修复和功能。
  • 补丁程序版本包含重要的 bug 修复。

此外,通过在下一个主要版本号后加上连字符和日期后缀来指明预发布版本。

例如,每种类型的新版本都会生成以下版本号:

  • 主要版本:6.0.0
  • 次要:6.1.0
  • 补丁程序:6.1.2
  • 预发布:7.0.0-pre.20230502.1

支持阶段

每个主要的 Bazel 版本都有四个支持阶段:

  • 滚动:此主要版本仍处于预发布阶段,Bazel 团队从 HEAD 中发布了滚动版本。
  • 有效:此主要版本是当前的有效 LTS 版本。Bazel 团队将重要功能和 bug 修复向后移植到其次要版本。
  • 维护:此主要版本是处于维护模式的旧版 LTS。Bazel 团队只承诺将针对安全问题和操作系统兼容性问题的重要 bug 修复向后移植到此 LTS 版本。
  • 已弃用:Bazel 团队不再支持此主要版本。所有用户都应迁移到较新的 Bazel LTS 版本。

发布频率

Bazel 会定期发布两个发布轨道的版本。

滚动版本

  • 滚动版本与 Google Blaze 版本协调,大约每两周从 HEAD 发布一次。这是下一个 Bazel LTS 版本的预览。
  • 滚动版本可能会发布不兼容的更改。建议对重大破坏性更改使用不兼容的标志,发布不兼容的更改应遵循我们的向后兼容政策

LTS 版本

  • 主要版本:新的 LTS 版本预计大约每 12 个月从 HEAD 中删减一次。新的 LTS 版本一旦发布,它就会立即进入活跃阶段,上一个 LTS 版本进入维护阶段。
  • 次要版本:活跃 LTS 轨道的新次要版本每 2 个月会发布一次。
  • 补丁版本:对于处于活跃状态和维护阶段的 LTS 版本,新的补丁版本预计会按需发布,以修复重大 bug。
  • 在维护阶段持续 2 年后,Bazel LTS 版本会进入已弃用阶段。

如需了解计划发布的版本,请在 GitHub 上查看我们的版本问题

支持矩阵

LTS 版本 支持阶段 最新版本 停止提供支持
Bazel 7 滚动 查看 GitHub 版本页面 不适用
Bazel 6 在线 6.3.2 2025 年 12 月
Bazel 5 维护 5.4.1 2025 年 1 月
Bazel 4 维护 4.2.4 2024 年 1 月

所有 Bazel 版本都可以在 GitHub 上的版本页面上找到。

发布流程和政策

对于滚动版本,流程非常简单:大约每两周创建一个新版本,与 Google 内部 Blaze 版本保持一致。由于发布时间表较快,因此我们不会向后移植对滚动版本的更改。

对于 LTS 版本,应遵循以下流程和政策:

  1. 确定版本的基准提交。
    • 对于新的主要 LTS 版本,基准提交是主分支的 HEAD。
    • 对于次要版本或补丁版本,基准提交是同一 LTS 版本当前版本的 HEAD。
  2. 从基准提交中创建一个名称为 release-<version> 的发布分支。
  3. 通过 PR 向变更分支向后移植。
    • 社区可针对相关 GitHub 问题或 PR 回复“@bazel-io flag”以将其标记为潜在版本障碍,从而建议向后移植某些提交,然后 Bazel 团队对其进行分类并决定是否向后移植提交。
    • 只可对主分支上向后兼容的提交进行向后移植,但接受解决合并冲突的其他细微更改也可以。
  4. 发现版本障碍,并修复在版本分支上发现的问题。
    • 发布分支在 Bazel CI 上的提交后下游测试流水线中使用相同的测试套件进行测试。Bazel 团队会监控版本分支的测试结果,并修复发现的所有回归问题。
  5. 当所有已知的版本障碍均已得到解决后,从版本分支创建新候选版本。
    • 候选版本会在 bazel-discuss 上公布,Bazel 团队会监控候选版的社区 bug 报告。
    • 如果确定了新的发布障碍,请返回上一步,在解决所有问题后创建新候选版本。
    • 创建第一个候选版本后,不得向发布分支添加新功能。
  6. 如果没有找到其他版本阻碍因素,则将候选版本作为正式版本推送
    • 对于补丁版本,请在上一个候选版本发布后至少两个工作日推送该版本。
    • 对于主要版本和次要版本,请在上一个候选版本发布后 2 个工作日推送该版本,但应在第一个候选版本发布后 1 周内推送。
    • 此版本仅在次日为工作日的当天推送。
    • 此版本在 bazel-discuss 上宣布,Bazel 团队会监控并解决新版本的社区 bug 报告。

报告回归问题

如果用户在新 Bazel 版本、候选版本(甚至是 HEAD)中发现回归问题,请在 GitHub 上提交错误。您可以使用 Bazelisk 对罪行的提交进行二分之一,并将此信息包含在 bug 报告中。

例如,如果您的构建使用 Bazel 6.1.0,但使用第二个候选版本 6.2.0 会失败,您可以通过

bazelisk --bisect=6.1.0..release-6.2.0rc2 build //foo:bar

如果需要重现问题,您可以将 BAZELISK_SHUTDOWNBAZELISK_CLEAN 环境变量设置为运行相应的 Bazel 命令以重置构建状态。如需了解详情,请参阅有关 Bazelisk bisect 功能的文档。

记得将 Bazelisk 升级到最新版本才能使用 Bisect 功能。

规则兼容性

如果您是规则作者,并希望保持与不同 Bazel 版本的兼容性,请查看规则兼容性页面。