本页介绍了如何处理向后兼容性,包括从一个版本迁移到另一个版本,以及如何传达不兼容的更改。
Bazel 不断发展。作为 LTS 主要 版本 的一部分发布的次要版本完全向后兼容。新的主要 LTS 版本可能包含不兼容的更改,需要进行一些迁移工作。 如需详细了解 Bazel 的发布模型,请查看发布 模型页面。
摘要
- 建议对重大更改使用
--incompatible_*标志。 - 对于每个
--incompatible_*标志,GitHub 问题都会说明行为的变化,并旨在提供迁移方案。 - 建议将不兼容的标志向后移植到最新的 LTS 版本,而无需默认启用该标志。
- 受
--experimental_*标志保护的 API 和行为可以随时更改。 - 切勿使用
--experimental_*或--incompatible_*标志运行生产 build。
如何遵守本政策
什么是稳定功能?
一般来说,没有 --experimental_... 标志的 API 或行为被认为是 Bazel 中的稳定、受支持的功能。
其中包括:
- Starlark 语言和 API
- 与 Bazel 捆绑的规则
- Bazel API,例如远程执行 API 或 Build 事件协议
- 标志及其语义
不兼容的更改和迁移方案
对于新版本中的每个不兼容的更改,Bazel 团队都旨在提供一个 迁移方案,帮助您更新代码(BUILD 和 .bzl 文件,以及脚本中的任何 Bazel 用法、Bazel API 用法等)。
不兼容的更改应具有关联的 --incompatible_* 标志和相应的 GitHub 问题。
建议将不兼容的标志和相关更改向后移植到最新的 LTS 版本,而无需默认启用该标志。这样,用户就可以在下一个 LTS 版本发布之前迁移不兼容的更改。
传达不兼容的更改
有关不兼容更改的主要信息来源是标有 "incompatible-change" 标签的 GitHub 问题。
对于每个不兼容的更改,问题都会指定以下内容:
- 控制不兼容更改的标志的名称
- 更改的功能的说明
- 迁移方案
当不兼容的更改准备好使用 HEAD 中的 Bazel(因此也使用下一个 Bazel 滚动发布版本)进行迁移时,应标有 migration-ready 标签。当不兼容的标志在 HEAD 中翻转时,不兼容的更改问题就会关闭。