Bzlmod は、Bazel レジストリ(Bazel モジュールのデータベース)に情報をリクエストして、依存関係を検出します。現在、Bzlmod はインデックス レジストリ(特定の形式に従うローカル ディレクトリまたは静的 HTTP サーバー)のみをサポートしています。
インデックス レジストリ
インデックス レジストリは、モジュール リスト(ホームページ、メンテナンス担当者、各バージョンの MODULE.bazel
ファイル、各バージョンのソースの取得方法など)に関する情報が含まれるローカル ディレクトリまたは静的 HTTP サーバーです。特に、ソース アーカイブ自体を提供する必要はありません。
インデックス レジストリは、次の形式に従う必要があります。
/bazel_registry.json
: 次のようなレジストリのメタデータを含む JSON ファイル。mirrors
: ソース アーカイブに使用するミラーのリストを指定module_base_path
:source.json
ファイル内でlocal_repository
型のモジュールのベースパスを指定
/modules
: このレジストリ内の各モジュールのサブディレクトリを含むディレクトリ/modules/$MODULE
: このモジュールの各バージョンのサブディレクトリを含むディレクトリと、以下を含むディレクトリ。metadata.json
: モジュールに関する情報を含む JSON ファイル。次のフィールドがあります。homepage
: プロジェクトのホームページの URLmaintainers
: JSON オブジェクトのリスト。それぞれは、レジストリ内にあるモジュールのメンテナンス担当者の情報に対応しています。これは必ずしもプロジェクトの作成者と同じではありません。versions
: このレジストリにあるこのモジュールのすべてのバージョンのリストyanked_versions
: このモジュールのヤンク バージョンのマップ。キーは、ヤンクするバージョンにする必要があります。値には、バージョンがヤンクされる理由の説明にします。理想的には、詳細情報へのリンクが含まれます。
/modules/$MODULE/$VERSION
: 次のファイルを含むディレクトリ。MODULE.bazel
: このモジュール バージョンのMODULE.bazel
ファイルsource.json
: このモジュール バージョンのソースを取得する方法に関する情報を含む JSON ファイル- デフォルトのタイプは「アーカイブ」で、
http_archive
リポジトリを表します。次のフィールドがあります。url
: ソース アーカイブの URLintegrity
: アーカイブのサブリソースの整合性チェックサムstrip_prefix
: ソース アーカイブを抽出するときに削除するディレクトリ プレフィックスpatches
: 抽出されたアーカイブに適用するパッチファイルを含むマップ。パッチファイルは/modules/$MODULE/$VERSION/patches
ディレクトリにあります。キーはパッチファイル名で、値はパッチファイルの整合性チェックサムです。patch_strip
: Unixpatch
の--strip
引数と同じです。archive_type
: ダウンロードされたファイルのアーカイブ タイプ(http_archive
のtype
と同じ)。デフォルトでは、アーカイブ タイプは URL のファイル拡張子から決定されます。ファイルに拡張子がない場合は、"zip"
、"jar"
、"war"
、"aar"
、"tar"
、"tar.gz"
、"tgz"
、"tar.xz"
、"txz"
、"tar.zst"
、"tzst"
、tar.bz2
、"ar"
、"deb"
のいずれかを明示的に指定できます。
- 次のフィールドを持つローカルパス(
local_repository
リポジトリを表す)を使用するようにタイプを変更できます。type
:local_path
path
: リポジトリのローカルパス。次のように計算されます。path
が絶対パスの場合は、そのままpath
が相対パスで、module_base_path
が絶対パスの場合、<module_base_path>/<path>
に解決されます。path
とmodule_base_path
の両方が相対パスの場合は、<registry_path>/<module_base_path>/<path>
に解決されます。レジストリはローカルでホストされ、--registry=file://<registry_path>
で使用される必要があります。そうしないと、Bazel はエラーをスローします。
- デフォルトのタイプは「アーカイブ」で、
patches/
: パッチファイルを含むオプションのディレクトリ。source.json
が「archive」タイプである場合にのみ使用されます。
Bazel セントラル レジストリ
https://bcr.bazel.build/ の Bazel Central Registry(BCR)は、GitHub リポジトリ bazelbuild/bazel-central-registry
に基づく内容を含むインデックス レジストリです。ファイルの内容は、https://registry.bazel.build/ のウェブ フロントエンドを使用してブラウジングできます。
BCR は Bazel コミュニティが管理しており、pull リクエストであればコントリビューターが提出できます。BCR の投稿ガイドラインをご覧ください。
BCR では、通常のインデックス レジストリの形式に加えて、各モジュール バージョン(/modules/$MODULE/$VERSION/presubmit.yml
)の presubmit.yml
ファイルが必要です。このファイルには、このモジュール バージョンの有効性を確認する際に使用できる、いくつかの重要なビルドおよびテスト ターゲットを指定します。BCR の CI パイプラインでも、これを使用してモジュール間の相互運用性を確保します。
レジストリの選択
繰り返し可能な Bazel フラグ --registry
を使用して、モジュールのリクエスト元であるレジストリのリストを指定できます。これにより、サードパーティ レジストリまたは内部レジストリから依存関係を取得するようにプロジェクトを設定できます。以前のレジストリが優先されます。便宜上、プロジェクトの .bazelrc
ファイルに --registry
フラグのリストを指定できます。
レジストリが GitHub でホストされている場合(bazelbuild/bazel-central-registry
のフォークなど)、--registry
値には raw.githubusercontent.com
の下にある未加工の GitHub アドレスが必要です。たとえば、my-org
フォークの main
ブランチでは、--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
を設定します。
--registry
フラグを使用すると、デフォルトで Bazel Central Registry が使用されなくなりますが、--registry=https://bcr.bazel.build
を追加することで再び追加できます。