Bazel レジストリ

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: プロジェクトのホームページの URL
      • maintainers: JSON オブジェクトのリスト。各オブジェクトは、レジストリ内のモジュールのメンテナーの情報に対応します。 これは、プロジェクトの作成者 と同じであるとは限りません。
      • versions: このレジストリで見つかるこのモジュールのすべてのバージョンのリスト
      • yanked_versions: このモジュールの取り消された バージョンのマップ。キーは取り消すバージョンで、値はバージョンが取り消された理由の説明です。できれば、詳細情報へのリンクを含めます。
  • /modules/$MODULE/$VERSION: 次のファイルを含むディレクトリ。
    • MODULE.bazel: このモジュール バージョンの MODULE.bazel ファイル
    • source.json: このモジュール バージョンのソースを取得する方法に関する情報を含む JSON ファイル
      • デフォルトのタイプは「archive」で、http_archive リポジトリを表します。次のフィールドがあります。
        • url: ソース アーカイブの URL
        • integrity: アーカイブの Subresource Integrity チェックサム
        • strip_prefix: ソース アーカイブを抽出するときに削除するディレクトリ プレフィックス
        • patches: 抽出されたアーカイブに適用するパッチ ファイルを含むマップ。パッチ ファイルは /modules/$MODULE/$VERSION/patches ディレクトリにあります。キーはパッチ ファイル名で、値はパッチ ファイルの整合性チェックサムです。
        • patch_strip: Unix patch--strip 引数と同じです。
        • archive_type:ダウンロードしたファイルのアーカイブ タイプ(http_archivetype と同じ)。 デフォルトでは、アーカイブ タイプは 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> に解決されます。
          • pathmodule_base_path の両方が相対パスの場合は、 <registry_path>/<module_base_path>/<path> に解決されます。 レジストリはローカルでホストされ、 --registry=file://<registry_path> で使用する必要があります。そうしないと、Bazel はエラーをスローします。
    • patches/: パッチ ファイルを含む省略可能なディレクトリ。source.json のタイプが「archive」の場合にのみ使用されます。

Bazel Central Registry

https://bcr.bazel.build/bazelbuild/bazel-central-registryhttps://registry.bazel.build/ のウェブ フロントエンドを使用して、そのコンテンツを参照できます。

Bazel コミュニティが BCR を管理しており、投稿者はプルリクエストを送信できます。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 アドレスが必要です。たとえば、main フォークの my-org ブランチで、 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/ を設定します。

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