Bzlmod は、Bazel レジストリ(Bazel モジュールのデータベース)から情報をリクエストすることで、依存関係を検出します。現在、Bzlmod は特定の形式に従ったローカル ディレクトリまたは静的 HTTP サーバーであるインデックス レジストリのみをサポートしています。
インデックス レジストリ
インデックス レジストリは、モジュールのリストに関する情報(ホームページ、メンテナー、各バージョンの MODULE.bazel ファイル、各バージョンのソースを取得する方法など)を含むローカル ディレクトリまたは静的 HTTP サーバーです。特に、ソース アーカイブ自体を提供する必要はありません。
インデックス レジストリは次の形式にする必要があります。
/bazel_registry.json: レジストリのメタデータを含む 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/baz、https://example.com/mirror2/foo.com/bar/baz、最後に元のソース URLhttps://foo.com/bar/bazの順になります。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 ファイル- デフォルトのタイプは「archive」で、
http_archiveリポジトリを表します。次のフィールドがあります。url: ソース アーカイブの URLmirror_urls: 文字列のリスト。ソース アーカイブのミラー URL。URL はurlの後にバックアップとして順番に試行されます。integrity: アーカイブの Subresource Integrity チェックサム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"のいずれかを明示的に指定できます。
- 次のフィールドを使用して、git リポジトリを使用するようにタイプを変更できます。
type:git_repository- https://bazel.build/rules/lib/repo/git で説明されている次のフィールド。
remotecommitshallow_sincetaginit_submodulesverbosestrip_prefix
- 型は、次のフィールドを使用して
local_repositoryリポジトリを表すローカルパスを使用するように変更できます。type:local_pathpath: リポジトリのローカルパス。次のように計算されます。pathが絶対パスの場合、そのままになります。pathが相対パスで、module_base_pathが絶対パスの場合、<module_base_path>/<path>に解決されます。pathとmodule_base_pathの両方が相対パスの場合、<registry_path>/<module_base_path>/<path>に解決されます。レジストリはローカルでホストされ、--registry=file://<registry_path>で使用される必要があります。それ以外の場合、Bazel はエラーをスローします。
- デフォルトのタイプは「archive」で、
patches/: パッチ ファイルを含むオプションのディレクトリ。source.jsonのタイプが「archive」の場合にのみ使用されます。
Bazel 中央レジストリ
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.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 を追加することで元に戻すことができます。