向后兼容性

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

本页介绍了如何处理向后兼容性,包括从一个版本迁移到另一个版本以及如何传达不兼容的更改。

Bazel 正在不断发展。作为 LTS 主要版本的一部分发布的次要版本完全向后兼容。新的主要 LTS 版本可能包含需要进行一些迁移工作的不兼容更改。如需详细了解 Bazel 的发布模型,请参阅发布模型页面。

摘要

  1. 建议使用 --incompatible_* 标志来进行破坏性更改。
  2. 对于每个 --incompatible_* 标志,GitHub 问题都会说明行为变更,并旨在提供迁移方案。
  3. 建议将不兼容的标志向后移植到最新的 LTS 版本,并默认不启用该标志。
  4. --experimental_* 标志保护的 API 和行为可能会随时更改。
  5. 切勿使用 --experimental_*--incompatible_* 标志运行正式版 build。

如何遵守此政策

什么是稳定功能?

一般而言,不带 --experimental_... 标志的 API 或行为在 Bazel 中被视为稳定且受支持的功能。

其中包括:

  • Starlark 语言和 API
  • 与 Bazel 捆绑的规则
  • Bazel API,例如 Remote Execution API 或 Build Event Protocol
  • 标志及其语义

不兼容的更改和迁移方案

对于新版本中的每项不兼容的更改,Bazel 团队都致力于提供迁移方案,帮助您更新代码(BUILD.bzl 文件,以及脚本中的任何 Bazel 用法、Bazel API 的用法等)。

不兼容的更改应具有关联的 --incompatible_* 标志和相应的 GitHub 问题。

建议将不兼容的标志和相关更改向后移植到最新的 LTS 版本,并默认不启用该标志。这样,用户便可以在下一个 LTS 版本发布之前针对不兼容的更改进行迁移。

传达不兼容的更改

有关不兼容更改的信息的主要来源是标记为“incompatible-change”标签的 GitHub 问题。

对于每项不兼容的更改,该问题都会指定以下内容:

  • 用于控制不兼容更改的标志的名称
  • 对更改的功能的说明
  • 迁移方案

当不兼容的更改准备好与 HEAD 中的 Bazel 进行迁移(因此也与下一个 Bazel 滚动发布版本进行迁移)时,应将其标记为 migration-ready 标签。在 HEAD 处将不兼容标志翻转后,不兼容更改问题会关闭。