互換性を破る変更のロールアウト ガイド

問題を報告する ソースを表示 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel に破壊的変更を加えることが必要になります。デザインを変更し、うまく機能していない部分を修正する必要があります。ただし、コミュニティと Bazel エコシステムが追随できるようにする必要があります。そのため、Bazel プロジェクトでは下位互換性ポリシーを採用しています。このドキュメントでは、Bazel コントリビューターがこのポリシーに準拠するために Bazel で破壊的変更を行うプロセスについて説明します。

  1. 設計ドキュメント ポリシーに準拠します。

  2. GitHub で Issue を報告します。

  3. 変更を適用します。

  4. ラベルを更新する

  5. 互換性なしフラグを反転します。

GitHub の問題

Bazel リポジトリで GitHub の問題を報告します。

次のことをおすすめします。

  • タイトルはフラグの名前で始まります(フラグ名は incompatible_ で始まります)。

  • ラベル incompatible-change を追加します。

  • 説明には、変更の説明と関連する設計ドキュメントへのリンクが含まれます。

  • 説明には、コードを更新する方法についてユーザーに説明する移行レシピが含まれています。変更が機械的な場合は、移行ツールへのリンクを含めることが理想的です。

  • 説明には、移行しなかった場合にユーザーに表示されるエラー メッセージの例が含まれています。これにより、GitHub の問題が検索エンジンで見つけやすくなります。エラー メッセージが役に立つものであり、対処可能であることを確認します。可能であれば、エラー メッセージに互換性のないフラグの名前を含める必要があります。

移行ツールについては、Buildifier へのコントリビューションを検討してください。BUILDWORKSPACE.bzl ファイルに自動修正を適用できます。警告が報告されることもあります。

実装

Bazel で新しいフラグを作成します。デフォルト値は false にする必要があります。ヘルプテキストには、GitHub の問題の URL を含める必要があります。フラグ名が incompatible_ で始まるため、メタデータタグが必要です。

      metadataTags = {
        OptionMetadataTag.INCOMPATIBLE_CHANGE,
      },

コミットの説明に、フラグの簡単な概要を追加します。また、次の形式で RELNOTES: を追加します。 RELNOTES: --incompatible_name_of_flag has been added. See #xyz for details

コミットでは、コードがドキュメントと一致しない期間がないように、関連するドキュメントも更新する必要があります。ドキュメントはバージョン管理されているため、ドキュメントの変更が誤って早期にリリースされることはありません。

ラベル

commit がマージされ、互換性のない変更を採用する準備ができたら、GitHub の問題にラベル migration-ready を追加します。

フラグに問題が見つかり、ユーザーがまだ移行していない場合: フラグ migration-ready を削除します。

次のメジャー リリースでフラグを反転する場合は、問題に「breaking-change-X.0」というラベルを追加します。

リポジトリを更新する

Bazel CI は、Bazel@HEAD + Downstream で重要なプロジェクトのリストをテストします。これらのほとんどは、他の 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 に変更する場合は、次の点にご注意ください。

  • commit の説明で RELNOTES[INC] を使用し、次の形式で指定します。 RELNOTES[INC]: --incompatible_name_of_flag is flipped to true. See #xyz for details commit の説明の残りの部分に追加情報を含めることができます。
  • 説明に Fixes #xyz を使用して、commit が統合されたときに GitHub の問題がクローズされるようにします。
  • ドキュメントを確認し、必要に応じて更新します。
  • 新しい問題 #abc を登録して、フラグの削除を追跡します。

フラグの削除

このフラグは HEAD で反転された後、最終的には Bazel から削除される予定です。互換性のないフラグを削除する予定がある場合:

  • 互換性のない大きな変更の場合は、ユーザーが移行する時間を長くすることを検討してください。理想的には、少なくとも 1 つのメジャー リリースでフラグを使用できるようにする必要があります。
  • フラグを削除する commit では、説明に Fixes #abc を使用して、commit が統合されたときに GitHub の問題がクローズされるようにします。