Bazel は、Bazel モジュールのデータベースである Bazel レジストリから情報をリクエストして、依存関係を検出します。Bazel は、特定の形式に従ったローカル ディレクトリまたは静的 HTTP サーバーであるインデックス レジストリという 1 種類の レジストリのみをサポートしています。
インデックス レジストリ
インデックス レジストリは、モジュールのリスト(ホームページ、メンテナー、各バージョンの
MODULE.bazelファイル、各バージョンのソースを取得する方法など)に関する情報を含むローカル ディレクトリまたは静的 HTTP サーバーです。特に、ソースアーカイブ自体を提供する必要はありません。
インデックス レジストリは次の形式にする必要があります。
/bazel_registry.json: レジストリのメタデータを含むオプションの JSON ファイル 。/modules: このレジストリ内の各モジュールのサブディレクトリを含むディレクトリ/modules/$MODULE:$MODULEという名前のモジュールの各バージョン のサブディレクトリと、このモジュールのメタデータを含むmetadata.jsonファイルを含むディレクトリ。/modules/$MODULE/$VERSION: 次のファイルを含むディレクトリ。MODULE.bazel: このモジュール バージョンのMODULE.bazelファイル。これは、Bazel の外部依存関係の解決時に読み取られるMODULE.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、最後に元の ソース URLhttps://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: 文字列。ソースアーカイブの URLmirror_urls: 文字列のリスト。ソースアーカイブのミラー URL。 URL は、バックアップとしてurlの後に順番に試行されます。integrity: 文字列。アーカイブの Subresource Integrity チェックサムstrip_prefix: 文字列。ソースアーカイブの抽出時に削除するディレクトリ プレフィックスoverlay: 抽出されたアーカイブの上に重ねるオーバーレイ ファイルを含む JSON オブジェクト。パッチ ファイルは/modules/$MODULE/$VERSION/overlayディレクトリにあります。キーは オーバーレイ ファイル名、値は オーバーレイ ファイルの整合性チェックサムです。オーバーレイはパッチ ファイルの前に適用されます。patches: 抽出されたアーカイブに適用するパッチ ファイルを含む JSON オブジェクト。パッチ ファイルは/modules/$MODULE/$VERSION/patchesディレクトリにあります。キーは パッチ ファイル名、値は パッチ ファイルの整合性チェックサムです。パッチはオーバーレイ ファイルの後に、patchesに表示される順序で適用されます。patch_strip: 数値。Unixpatchの--strip引数と同じです。archive_type: 文字列。ダウンロードしたファイルのアーカイブ タイプ(typeのhttp_archiveと同じ)。
typeがgit_repositoryの場合、このモジュール バージョンはgit_repositoryリポジトリ ルールによってバックアップされます。Git リポジトリをクローンすることで取得されます。- 次のフィールドがサポートされており、基盤となる
git_repositoryリポジトリ ルールに直接転送されます。remote、commit、shallow_since、tag、init_submodules、verbose、およびstrip_prefix、patch_strip。 patches: クローンされたリポジトリに適用するパッチ ファイルを含む JSON オブジェクト。パッチ ファイルは/modules/$MODULE/$VERSION/patchesディレクトリにあります。キーは パッチ ファイル名、値は パッチ ファイルの整合性チェックサムです。パッチは、patchesに表示される順序で適用されます。
- 次のフィールドがサポートされており、基盤となる
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 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 を追加することで元に戻すことができます。