Bzlmod は、Bazel モジュールのデータベースである Bazel レジストリから情報をリクエストして依存関係を検出します。Bazel では、1 種類のレジストリ(インデックス レジストリ)のみがサポートされています。これは、特定の形式に従うローカル ディレクトリまたは静的 HTTP サーバーです。
インデックス レジストリ
インデックス レジストリは、モジュールのリストに関する情報(ホームページ、メンテナー、各バージョンの MODULE.bazel
ファイル、各バージョンのソースの取得方法など)を含むローカル ディレクトリまたは静的 HTTP サーバーです。特に、ソース アーカイブ自体を提供する必要はありません。
インデックス レジストリの形式は次のとおりです。
/bazel_registry.json
: レジストリのメタデータを含むオプションの JSON ファイル。/modules
: このレジストリ内の各モジュールのサブディレクトリを含むディレクトリ/modules/$MODULE
:$MODULE
という名前のモジュールの各バージョンのサブディレクトリと、このモジュールのメタデータを含むmetadata.json
ファイルを含むディレクトリ。/modules/$MODULE/$VERSION
: 次のファイルを含むディレクトリ。MODULE.bazel
: このモジュール バージョンのMODULE.bazel
ファイル。これは、Bazel の外部依存関係の解決中に読み取られるMODULE.bazel
ファイルであり、ソース アーカイブのファイルではありません(レジストリ以外のオーバーライドがない限り)。source.json
: このモジュール バージョンのソースを取得する方法に関する情報を含む JSON ファイルpatches/
: パッチ ファイルを含むオプションのディレクトリ。source.json
のタイプが「archive」の場合にのみ使用されます。overlay/
: オーバーレイ ファイルを含むオプションのディレクトリ。source.json
のタイプが「archive」の場合にのみ使用されます。
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/baz
、https://example.com/mirror2/foo.com/bar/baz
、最後に元のソース URL であるhttps://foo.com/bar/baz
です。
- ミラーリングされた URL は、ミラー自体と、
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
です。
type
がarchive
の場合(デフォルト)、このモジュール バージョンはhttp_archive
リポジトリ ルールによってサポートされています。このモジュール バージョンは、指定された URL からアーカイブをダウンロードしてそのコンテンツを抽出することで取得されます。次のフィールドがサポートされています。url
: ソース アーカイブの URL の文字列integrity
: アーカイブの サブリソースの完全性チェックサムを含む文字列strip_prefix
: ソース アーカイブの抽出時に削除するディレクトリ接頭辞の文字列overlay
: 抽出されたアーカイブの上に重ねるオーバーレイ ファイルを含む JSON オブジェクト。パッチファイルは/modules/$MODULE/$VERSION/overlay
ディレクトリにあります。キーはオーバーレイ ファイル名で、値はオーバーレイ ファイルの完全性チェックサムです。オーバーレイはパッチファイルの前に適用されます。patches
: 抽出されたアーカイブに適用するパッチ ファイルを含む JSON オブジェクト。パッチファイルは/modules/$MODULE/$VERSION/patches
ディレクトリにあります。キーはパッチファイル名で、値はパッチファイルの完全性チェックサムです。パッチはオーバーレイ ファイルの後に適用されます。patch_strip
: 数値。Unixpatch
の--strip
引数と同じです。archive_type
: ダウンロードしたファイルのアーカイブ タイプ(http_archive
のtype
と同じ)。
type
がgit_repository
の場合、このモジュール バージョンはgit_repository
リポジトリ ルールによってサポートされています。これは、Git リポジトリのクローンを作成して取得されます。- 次のフィールドがサポートされており、基盤となる
git_repository
リポジトリ ルールに直接転送されます。remote
、commit
、shallow_since
、tag
、init_submodules
、verbose
、strip_prefix
。
- 次のフィールドがサポートされており、基盤となる
type
がlocal_path
の場合、このモジュール バージョンはlocal_repository
リポジトリ ルールによってバックアップされます。ローカルディスク上のディレクトリにシンボリック リンクされます。次のフィールドがサポートされています。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 はエラーをスローします。
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
を使用して、モジュールをリクエストするレジストリのリストを指定できます。これにより、サードパーティまたは内部レジストリから依存関係を取得するようにプロジェクトを設定できます。前のレジストリが優先されます。便利なように、プロジェクトの .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
を追加することで再び使用できます。