本页介绍了如何处理向后兼容性,包括从一个版本迁移到另一个版本,以及如何传达不兼容的更改。
Bazel 正在不断发展。作为 LTS 主要版本的一部分发布的次要版本完全向后兼容。LTS 主要版本之间的更改可能包含需要进行一些迁移工作的不兼容更改。如需详细了解 Bazel 版本发布节奏的运作方式,请参阅宣布 Bazel 长期支持 (LTS) 版本。
摘要
- 建议使用
--incompatible_*
标志来进行破坏性更改。 - 对于每个
--incompatible_*
标志,GitHub 问题都会说明行为变更,并旨在提供迁移方案。 - 由
--experimental_*
标志保护的 API 和行为随时都可能发生变化。 - 切勿使用
--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 问题。
传达不兼容的更改
有关不兼容更改的信息的主要来源是标记为“incompatible-change”标签的 GitHub 问题。
对于每项不兼容的更改,该问题都会指定以下内容:
- 用于控制不兼容更改的标志的名称
- 对更改的功能的说明
- 迁移方案
当不兼容的更改准备好与 HEAD 中的 Bazel 进行迁移(因此也与下一个 Bazel 滚动发布版本进行迁移)时,应将其标记为 migration-ready
标签。在 HEAD 上将不兼容标志翻转后,不兼容更改问题会关闭。