Bazel レジストリ

問題を報告 ソースを表示

Bzlmod は、Bazel レジストリ(Bazel モジュールのデータベース)に依存関係の情報をリクエストして、依存関係を検出します。現在、bzlmod はインデックス レジストリ(特定の形式に従うローカル ディレクトリまたは静的 HTTP サーバー)のみをサポートしています。

インデックス レジストリ

インデックス レジストリは、モジュールのリストに関する情報を含むローカル ディレクトリまたは静的 HTTP サーバーです。これには、モジュールのホームページ、メンテナンス担当者、各バージョンの MODULE.bazel ファイル、各バージョンのソースの取得方法などが含まれます。特に、ソース アーカイブ自体を提供する必要はありません

インデックス レジストリは、次の形式に従う必要があります。

  • /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/bazhttps://example.com/mirror2/foo.com/bar/baz、最終的に元のソース URL 自体 https://foo.com/bar/baz の順になります。
    • 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: アーカイブのサブリソースの整合性チェックサム
        • 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" のいずれかを明示的に指定できます。
      • 次のフィールドを使用して、Git リポジトリを使用するようにタイプを変更できます。
        • type: git_repository
        • 次のフィールド(https://bazel.build/rules/lib/repo/git を参照)。
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • 次のフィールドで、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 セントラル レジストリ

https://bcr.bazel.build/ の Bazel Central Registry(BCR)は、GitHub リポジトリ bazelbuild/bazel-central-registry を基盤とするコンテンツを含むインデックス レジストリです。その内容は、ウェブ フロントエンド(https://registry.bazel.build/)を使用して閲覧できます。

BCR は Bazel コミュニティが管理しているため、コントリビューターが pull リクエストを送信できます。BCR の投稿ガイドラインをご覧ください。

BCR では、通常のインデックス レジストリの形式に加えて、モジュール バージョンごとに presubmit.yml ファイル(/modules/$MODULE/$VERSION/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 を追加することで再び追加できます。