Bazel 注册表

Bzlmod 通过从 Bazel 注册表(Bazel 模块的数据库)请求依赖项的信息来发现依赖项。目前,Bzlmod 仅支持 索引注册表,即遵循特定格式的本地目录或静态 HTTP 服务器 。

索引注册表

索引注册表是本地目录或静态 HTTP 服务器,其中包含 有关模块列表的信息,包括模块的主页、维护人员、每个版本的 MODULE.bazel 文件,以及如何提取每个 版本的源代码。值得注意的是,它 不需要 提供源代码归档文件本身。

索引注册表必须遵循以下格式:

  • /bazel_registry.json:一个 JSON 文件,其中包含注册表的元数据 ,例如:
    • mirrors:指定用于源代码归档文件的镜像列表
    • module_base_path:指定 source.json 文件中具有 local_repository 类型的模块的基本路径
  • /modules:一个目录,其中包含此 注册表中每个模块的子目录
  • /modules/$MODULE:一个目录,其中包含此模块的每个版本 的子目录,以及:
    • metadata.json:一个 JSON 文件,其中包含有关模块的信息, 具有以下字段:
      • homepage:项目主页的网址
      • maintainers:JSON 对象列表,每个对象对应于 模块 在注册表中的维护人员的信息。 请注意,这不一定与项目的 作者相同
      • versions:此注册表中要查找的此模块的所有版本的列表
      • yanked_versions:此模块的 撤消 版本的映射。键应为要撤消的版本,值应为撤消该版本的原因说明,最好包含指向更多信息的链接
  • /modules/$MODULE/$VERSION:一个目录,其中包含以下文件:
    • MODULE.bazel:此模块版本的 MODULE.bazel 文件
    • source.json:一个 JSON 文件,其中包含有关如何提取此模块版本的 源代码的信息
      • 默认类型为“archive”,表示 http_archive 代码库, 具有以下字段:
        • url:源代码归档文件的网址
        • integrity:归档文件的子资源 完整性 校验和
        • strip_prefix:提取 源代码归档文件时要剥离的目录前缀
        • patches:一个映射,其中包含要应用于 提取的归档文件的补丁文件。补丁文件位于 /modules/$MODULE/$VERSION/patches 目录下。键是 补丁文件名,值是 补丁文件的完整性校验和
        • patch_strip:与 Unix patch--strip 实参相同。
        • archive_type:下载文件的归档类型(与 type 上的 http_archive 相同)。 默认情况下,归档类型由网址的文件扩展名确定。如果文件没有扩展名,您可以明确指定以下其中一项:"zip""jar""war""aar""tar""tar.gz""tgz""tar.xz""txz""tar.zst""tzst"tar.bz2"ar""deb"
      • 可以更改类型以使用 Git 代码库,具有以下字段:
        • typegit_repository
        • 以下字段,如 https://bazel.build/rules/lib/repo/git 中所述:
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • 可以更改类型以使用本地路径,表示 local_repository 代码库,具有以下字段:
        • typelocal_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 中央注册表

Bazel 中央注册表 (BCR) (https://bcr.bazel.build/) 是一个索引 注册表,其内容由 GitHub 代码库 bazelbuild/bazel-central-registry提供支持。 您可以使用 https://registry.bazel.build/上的 Web 前端浏览其内容。

Bazel 社区维护 BCR,欢迎贡献者提交 pull 请求。请参阅 BCR 贡献 准则

除了遵循普通索引注册表的格式之外,BCR 还要求 每个模块版本都有一个 presubmit.yml 文件 (/modules/$MODULE/$VERSION/presubmit.yml)。此文件指定了一些基本的 build 和测试目标,您可以使用这些目标来检查此模块 版本的有效性。BCR 的 CI 流水线也使用此文件来确保模块之间的互操作性 。

选择注册表

可重复的 Bazel 标志 --registry 可用于指定要从中请求模块的 注册表列表,因此您可以将项目设置为从第三方或内部注册表提取 依赖项。较早的注册表优先。为方便起见,您可以将 --registry 标志列表放在项目的 .bazelrc 文件中。

如果您的注册表托管在 GitHub 上(例如,作为 bazelbuild/bazel-central-registry的分支),则您的 --registry 值需要 下的原始 GitHub 地址。raw.githubusercontent.com例如,在 main 分支的 my-org 分支上,您需要设置 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/

使用 --registry 标志会阻止默认使用 Bazel 中央注册表,但您可以通过添加 --registry=https://bcr.bazel.build 将其添加回来。