Bazel レジストリ

Bazel は、Bazel モジュールのデータベースである Bazel レジストリから情報をリクエストして、依存関係を検出します。Bazel は、特定の形式に従ったローカル ディレクトリまたは静的 HTTP サーバーであるインデックス レジストリという 1 種類の レジストリのみをサポートしています。

インデックス レジストリ

インデックス レジストリは、モジュールのリスト(ホームページ、メンテナー、各バージョンの MODULE.bazelファイル、各バージョンのソースを取得する方法など)に関する情報を含むローカル ディレクトリまたは静的 HTTP サーバーです。特に、ソースアーカイブ自体を提供する必要はありません。

インデックス レジストリは次の形式にする必要があります。

bazel_registry.json

bazel_registry.json は、レジストリ全体に適用されるメタデータを指定するオプションのファイルです。次のフィールドを含めることができます。

  • mirrors: 文字列の配列。ソースアーカイブに使用するミラーのリストを指定します。
    • ミラーリングされた URL は、ミラー自体と、 プロトコルを除いた source.json ファイルで指定されたモジュールのソース URL を連結したものです。たとえば、モジュールのソース URL が https://foo.com/bar/baz で、mirrors["https://mirror1.com/", "https://example.com/mirror2/"] が含まれている場合、 Bazel が試行する URL は https://mirror1.com/foo.com/bar/bazhttps://example.com/mirror2/foo.com/bar/baz、最後に元の ソース URL https://foo.com/bar/baz の順になります。
  • module_base_path: 文字列。source.json ファイルで local_path タイプのモジュールのベースパスを指定します。

metadata.json

metadata.json は、 モジュールに関する情報を含むオプションの JSON ファイルです。次のフィールドがあります。

  • versions: 文字列の配列。このレジストリで使用可能なモジュールのバージョン を示します。この配列は、 モジュール ディレクトリの子と一致する必要があります。
  • yanked_versions: このモジュールの取り消された バージョンを指定する JSON オブジェクト。キー は取り消すバージョン、値は バージョンが取り消された理由の説明です。できれば詳細情報への リンクを含めます。

BCR では、metadata.json ファイルに追加情報が必要です。

source.json

source.json は、モジュールの特定のバージョンを取得する方法に関する情報を含む必須の JSON ファイルです。このファイルのスキーマは、type フィールドによって異なります。デフォルトは archive です。

  • typearchive(デフォルト)の場合、このモジュール バージョンは http_archive リポジトリ ルールによってバックアップされます。指定された URL からアーカイブをダウンロードしてコンテンツを抽出することで取得されます。次のフィールドがサポートされています。
    • url: 文字列。ソースアーカイブの URL
    • mirror_urls: 文字列のリスト。ソースアーカイブのミラー URL。 URL は、バックアップとして url の後に順番に試行されます。
    • integrity: 文字列。アーカイブの Subresource Integrity チェックサム
    • strip_prefix: 文字列。ソースアーカイブの抽出時に削除するディレクトリ プレフィックス
    • overlay: 抽出されたアーカイブの上に重ねるオーバーレイ ファイルを含む JSON オブジェクト。パッチ ファイルは /modules/$MODULE/$VERSION/overlay ディレクトリにあります。キーは オーバーレイ ファイル名、値は オーバーレイ ファイルの整合性チェックサムです。オーバーレイはパッチ ファイルの前に適用されます。
    • patches: 抽出されたアーカイブに適用するパッチ ファイルを含む JSON オブジェクト。パッチ ファイルは /modules/$MODULE/$VERSION/patches ディレクトリにあります。キーは パッチ ファイル名、値は パッチ ファイルの整合性チェックサムです。パッチはオーバーレイ ファイルの後に、 patches に表示される順序で適用されます。
    • patch_strip: 数値。Unix patch--strip 引数と同じです。
    • archive_type: 文字列。ダウンロードしたファイルのアーカイブ タイプ( typehttp_archive と同じ)。
  • typegit_repository の場合、このモジュール バージョンは git_repository リポジトリ ルールによってバックアップされます。Git リポジトリをクローンすることで取得されます。
    • 次のフィールドがサポートされており、基盤となる git_repositoryリポジトリ ルールに直接転送されます。remotecommitshallow_sincetaginit_submodulesverbose、および strip_prefixpatch_strip
    • patches: クローンされたリポジトリに適用するパッチ ファイルを含む JSON オブジェクト。パッチ ファイルは /modules/$MODULE/$VERSION/patches ディレクトリにあります。キーは パッチ ファイル名、値は パッチ ファイルの整合性チェックサムです。パッチは、 patches に表示される順序で適用されます。
  • typelocal_path の場合、このモジュール バージョンは local_repository リポジトリ ルールによってバックアップされます。 ローカル ディスク上のディレクトリにシンボリック リンクされます。次の フィールドがサポートされています。
    • path: リポジトリのローカルパス。次のように計算されます。
      • path が絶対パスの場合はそのまま
      • path が相対パスで、module_base_path が絶対パスの場合は、<module_base_path>/<path> に解決されます。
      • pathmodule_base_path の両方が相対パスの場合は、 <registry_path>/<module_base_path>/<path> に解決されます。 レジストリはローカルでホストされ、 --registry=file://<registry_path> で使用する必要があります。そうしないと、Bazel は エラーをスローします。

Bazel Central Registry

https://bcr.bazel.build/ にある Bazel Central Registry(BCR)は、GitHub リポジトリ bazelbuild/bazel-central-registry によってバックアップされたコンテンツを含むインデックス レジストリです。https://registry.bazel.build/ のウェブ フロントエンドを使用して、そのコンテンツ を参照できます。

BCR は Bazel コミュニティによって管理されており、投稿者は プルリクエストを送信できます。BCR の投稿ガイドラインをご覧ください。

通常のインデックス レジストリの形式に従うだけでなく、BCR では各モジュール バージョン(/modules/$MODULE/$VERSION/presubmit.yml)に presubmit.ymlファイルが必要です。このファイルでは、このモジュール バージョンの有効性を確認するために使用できる、いくつかの重要なビルド ターゲットとテスト ターゲットを指定します。BCR の CI パイプラインは、モジュール間の相互運用性を確保するためにもこれを使用します 。

レジストリを選択する

繰り返し可能な Bazel フラグ --registry を使用して、モジュールをリクエストする レジストリのリストを指定できます。これにより、サードパーティまたは内部レジストリから 依存関係を取得するようにプロジェクトを設定できます。以前のレジストリが 優先されます。便宜上、--registry フラグのリストをプロジェクトの .bazelrc ファイルに配置できます。

レジストリが GitHub でホストされている場合(たとえば、 bazelbuild/bazel-central-registryのフォークとして)、--registry値には raw GitHub アドレスが必要です。raw.githubusercontent.comたとえば、main フォークの my-org ブランチで、 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/ を設定します。

--registry フラグを使用すると、Bazel Central Registry はデフォルトで使用されなくなりますが、--registry=https://bcr.bazel.build を追加することで元に戻すことができます。