重大变更发布指南

报告问题 查看源代码 每夜 build · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

我们不可避免地会对 Bazel 进行破坏性更改。我们必须改变设计,修复无法正常运行的问题。不过,我们需要确保社区和 Bazel 生态系统能够跟上节奏。为此,Bazel 项目采用了向后兼容性政策。本文档介绍了 Bazel 贡献者在 Bazel 中实施破坏性更改以遵守此政策的过程。

  1. 遵循设计文档政策

  2. 提交 GitHub 问题。

  3. 实施更改。

  4. 更新标签

  5. 切换不兼容标志。

GitHub 问题

在 Bazel 代码库中提交 GitHub 问题查看示例

我们建议:

  • 标题以标志的名称开头(标志名称以 incompatible_ 开头)。

  • 您将添加标签 incompatible-change

  • 说明包含对更改的说明以及指向相关设计文档的链接。

  • 说明中包含迁移方案,用于向用户说明应如何更新其代码。理想情况下,如果是机械更改,请添加指向迁移工具的链接。

  • 该说明包含用户未迁移时会收到的错误消息示例。这样,GitHub 问题便更容易被搜索引擎发现。确保错误消息有用且可操作。 错误消息应尽可能包含不兼容标志的名称。

对于迁移工具,不妨考虑为 Buildifier 做出贡献。它可以自动修复 BUILDWORKSPACE.bzl 文件。它也可能会报告警告。

实现

在 Bazel 中创建一个新标志。默认值必须为 false。帮助文本应包含 GitHub 问题的网址。由于标志名称以 incompatible_ 开头,因此需要元数据标记:

      metadataTags = {
        OptionMetadataTag.INCOMPATIBLE_CHANGE,
      },

在提交说明中,添加该标志的简要摘要。 此外,还应在以下表单中添加 RELNOTES:RELNOTES: --incompatible_name_of_flag has been added. See #xyz for details

提交时还应更新相关文档,以确保在提交窗口中不会出现代码与文档不一致的情况。由于我们的文档有版本编号,因此对文档所做的更改不会意外发布。

标签

合并提交并且不兼容的更改可供采用后,请为 GitHub 问题添加标签 migration-ready

如果发现标志存在问题,并且用户尚未准备好迁移,请移除标志 migration-ready

如果您计划在下一个主要版本中翻转该标志,请为该问题添加标签“breaking-change-X.0”。

更新代码库

Bazel CI 会在 Bazel@HEAD + 下游环境中测试一系列重要项目。其中大多数通常是其他 Bazel 项目的依赖项,因此请务必迁移这些 Bazel 项目,以便为更广泛的社区取消屏蔽迁移。

如需监控这些项目的迁移状态,您可以使用 bazelisk-plus-incompatible-flags 流水线,如需了解此流水线的运作方式,请点击此处

不兼容的变更创建者完全负责在下游流水线中迁移项目。不过,您可以执行以下操作来加快迁移速度,并为 Bazel 用户和 Bazel Green 团队简化工作。

  1. 提交 GitHub 问题,通知因不兼容的更改而损坏的下游项目的所有者。
  2. 发送 PR 以修复下游项目。
  3. 如需有关迁移方面的帮助,请与 Bazel 社区联系(例如 Bazel Rules Authors SIG)。

翻旗

在将该标志的默认值改为 true 之前,请确保:

  • 迁移了生态系统中的核心代码库。

    bazelisk-plus-incompatible-flags 流水线中,该标志应显示在 The following flags didn't break any passing Bazel team owned/co-owned projects 下方。

  • 用户关心的问题和问题已得到解决。

如果该标志在 Bazel 中已准备好切换,但在 Google 内部迁移时被阻止,请考虑在内部 blazerc 文件中将标志值设置为 false,以取消阻止标志切换。这样一来,我们就可以确保 Bazel 用户尽早默认采用新行为。

将标志默认值更改为 true 时,请执行以下操作:

  • 在提交说明中使用 RELNOTES[INC],格式如下: RELNOTES[INC]: --incompatible_name_of_flag is flipped to true. See #xyz for details 您可以在提交说明的其余部分添加额外的信息。
  • 在说明中使用 Fixes #xyz,以便在提交合并时关闭 GitHub 问题。
  • 查看并根据需要更新文档。
  • 请提交新问题 #abc 以跟踪移除标志的进度。

移除标志

在 HEAD 上切换该标志后,最终应将其从 Bazel 中移除。如果您计划移除不兼容的标志,请执行以下操作:

  • 如果此变更是不兼容的重大更改,请考虑为用户留出更多时间进行迁移。 理想情况下,该标志应至少在一个主要版本中提供。
  • 对于移除该标志的提交内容,请在说明中使用 Fixes #abc,以便在提交内容合并后关闭 GitHub 问题。