このページでは、あるリリースから別のリリースへの移行や、互換性のない変更を伝える方法など、下位互換性を処理する方法について説明します。
Bazel は進化を続けています。LTS メジャー バージョンの一部としてリリースされたマイナー バージョンには完全な下位互換性があります。新しいメジャー LTS リリースには互換性のない変更が含まれており、移行作業が必要となる場合があります。Bazel のリリースモデルの詳細については、リリースモデルのページをご覧ください。
概要
- 互換性を破る変更には、
--incompatible_*
フラグを使用することをおすすめします。 - GitHub の問題は、
--incompatible_*
フラグごとに動作の変更を説明し、移行レシピを提供することを目的としています。 - 非互換性フラグは、デフォルトでフラグを有効にせずに、最新の LTS リリースにバックポートすることをおすすめします。
--experimental_*
フラグで保護されている API と動作は、随時変更される可能性があります。--experimental_*
フラグまたは--incompatible_*
フラグを指定して本番環境ビルドを実行しないでください。
このポリシーの遵守方法
安定した機能とは?
一般に、--experimental_...
フラグのない API や動作は、Bazel で安定したサポート対象の機能とみなされます。
これには次のものが含まれます。
- Starlark 言語と API
- Bazel にバンドルされたルール
- Remote Execution API や Build Event Protocol などの Bazel API
- フラグとそのセマンティクス
互換性のない変更と移行レシピ
新しいリリースで互換性のない変更が行われるたびに、Bazel チームでは、コード(BUILD
ファイルと .bzl
ファイル、スクリプトでの Bazel の使用方法、Bazel API の使用方法など)を更新するための移行レシピを提供することを目指しています。
互換性のない変更には、関連する --incompatible_*
フラグと、対応する GitHub の問題が必要です。
互換性のないフラグと関連する変更を、デフォルトでフラグを有効にせずに最新の LTS リリースにバックポートすることをおすすめします。これにより、ユーザーは次の LTS リリースが利用可能になる前に、互換性のない変更を移行できます。
互換性のない変更の通知
互換性のない変更に関する主な情報源は、「互換性のない変更」ラベルが付いた GitHub の問題です。
互換性のない変更ごとに、以下が問題に指定されています。
- 互換性のない変更を管理するフラグの名前
- 変更された機能の説明
- 移行レシピ
互換性のない変更が HEAD で Bazel を使用して移行できる状態になったら(したがって、次の Bazel ローリング リリースでもある場合)、migration-ready
ラベルでマークする必要があります。互換性のない変更の問題は、互換性のないフラグが HEAD で反転するとクローズされます。