Registros de Bazel

Informar un problema Ver código fuente Nightly · 8.1 · 8.0 · 7.5 · 7.4

Bzlmod descubre las dependencias solicitando su información a los registros de Bazel: bases de datos de módulos de Bazel. Bazel solo admite un tipo de registros: registros de índices, directorios locales o servidores HTTP estáticos que siguen un formato específico.

Registro de índices

Un registro de índice es un directorio local o un servidor HTTP estático que contiene información sobre una lista de módulos, incluida su página principal, los responsables de mantenimiento, el archivo MODULE.bazel de cada versión y cómo recuperar la fuente de cada versión. En particular, no es necesario que entregue los archivos de origen.

Un registro de índice debe tener el siguiente formato:

  • /bazel_registry.json: Es un archivo JSON opcional que contiene metadatos para el registro.
  • /modules: Es un directorio que contiene un subdirectorio para cada módulo en este registro.
  • /modules/$MODULE: Es un directorio que contiene un subdirectorio para cada versión del módulo llamado $MODULE, así como el archivo metadata.json que contiene metadatos para este módulo.
  • /modules/$MODULE/$VERSION: Es un directorio que contiene los siguientes archivos:
    • MODULE.bazel: Es el archivo MODULE.bazel de esta versión del módulo. Ten en cuenta que este es el archivo MODULE.bazel que se lee durante la resolución de dependencias externas de Bazel, no el del archivo fuente (a menos que haya una anulación que no sea del registro).
    • source.json: Es un archivo JSON que contiene información para recuperar la fuente de esta versión del módulo.
    • patches/: Es un directorio opcional que contiene archivos de parches y solo se usa cuando source.json tiene el tipo "archive".
    • overlay/: Es un directorio opcional que contiene archivos de superposición y solo se usa cuando source.json tiene el tipo “archivo”.

bazel_registry.json

bazel_registry.json es un archivo opcional que especifica los metadatos que se aplican a todo el registro. Puede contener los siguientes campos:

  • mirrors: Es un array de cadenas que especifica la lista de espejos que se usarán para los archivos de origen.
    • La URL reflejada es una concatenación del espejo en sí y la URL de origen del módulo especificada por su archivo source.json sin el protocolo. Por ejemplo, si la URL de origen de un módulo es https://foo.com/bar/baz y mirrors contiene ["https://mirror1.com/", "https://example.com/mirror2/"], las URLs que Bazel intentará en orden son https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz y, por último, la URL de origen original https://foo.com/bar/baz.
  • module_base_path: Es una cadena que especifica la ruta de acceso base para los módulos con el tipo local_path en el archivo source.json.

metadata.json

metadata.json es un archivo JSON opcional que contiene información sobre el módulo, con los siguientes campos:

Ten en cuenta que el BCR requiere más información en el archivo metadata.json.

source.json

source.json es un archivo JSON obligatorio que contiene información para recuperar una versión específica de un módulo. El esquema de este archivo depende de su campo type, que se establece de forma predeterminada en archive.

  • Si type es archive (la opción predeterminada), esta versión del módulo está respaldada por una regla de repo http_archive. Se recupera descargando un archivo de una URL determinada y extrayendo su contenido. Admite los siguientes campos:
    • url: Es una cadena, la URL del archivo de origen.
    • integrity: Es una cadena, la suma de comprobación de integridad de subrecursos del archivo.
    • strip_prefix: Es una cadena, el prefijo del directorio que se quitará cuando se extraiga el archivo fuente.
    • overlay: Es un objeto JSON que contiene archivos de superposición para colocar sobre el archivo extraído. Los archivos de parches se encuentran en el directorio /modules/$MODULE/$VERSION/overlay. Las claves son los nombres de los archivos superpuestos, y los valores son la suma de comprobación de integridad de los archivos superpuestos. Las superposiciones se aplican antes que los archivos de parche.
    • patches: Es un objeto JSON que contiene archivos de parches para aplicar al archivo extraído. Los archivos de parches se encuentran en el directorio /modules/$MODULE/$VERSION/patches. Las claves son los nombres de los archivos de parches, y los valores son la suma de comprobación de integridad de los archivos de parches. Los parches se aplican después de los archivos de superposición.
    • patch_strip: Es un número, el mismo que el argumento --strip de patch de Unix.
    • archive_type: Es una cadena, el tipo de archivo del archivo descargado (es igual que type en http_archive).
  • Si type es git_repository, esta versión del módulo está respaldada por una regla de repositorio git_repository. Se recupera clonando un repositorio de Git.
    • Se admiten los siguientes campos, que se reenvían directamente a la regla subyacente del repo git_repository: remote, commit, shallow_since, tag, init_submodules, verbose y strip_prefix.
  • Si type es local_path, esta versión del módulo está respaldada por una regla de repositorio local_repository; está vinculada con un symlink a un directorio en el disco local. Admite el siguiente campo:
    • path: Es la ruta de acceso local al repositorio, que se calcula de la siguiente manera:
      • Si path es una ruta de acceso absoluta, permanecerá como está.
      • Si path es una ruta relativa y module_base_path es una ruta absoluta, se resuelve en <module_base_path>/<path>.
      • Si path y module_base_path son rutas relativas, se resuelve en <registry_path>/<module_base_path>/<path>. El registro se debe alojar de forma local y --registry=file://<registry_path> debe usarlo. De lo contrario, Bazel arrojará un error.

Registro central de Bazel

El Registro central de Bazel (BCR) en https://bcr.bazel.build/ es un registro de índices con contenido respaldado por el repositorio de GitHub bazelbuild/bazel-central-registry. Puedes explorar su contenido con el frontend web en https://registry.bazel.build/.

La comunidad de Bazel mantiene el BCR, y los colaboradores pueden enviar solicitudes de extracción. Consulta los lineamientos para las contribuciones de la BCR.

Además de seguir el formato de un registro de índice normal, el BCR requiere un archivo presubmit.yml para cada versión del módulo (/modules/$MODULE/$VERSION/presubmit.yml). Este archivo especifica algunos destinos de compilación y prueba esenciales que puedes usar para verificar la validez de esta versión del módulo. Las canalizaciones de CI de BCR también usan esto para garantizar la interoperabilidad entre los módulos.

Selecciona registros

La marca --registry de Bazel repetible se puede usar para especificar la lista de registros desde los que se solicitarán los módulos, de modo que puedas configurar tu proyecto para que recupere dependencias de un registro interno o de terceros. Los registros anteriores tienen prioridad. Para tu comodidad, puedes colocar una lista de marcas --registry en el archivo .bazelrc de tu proyecto.

Si tu registro está alojado en GitHub (por ejemplo, como una bifurcación de bazelbuild/bazel-central-registry), el valor de --registry necesita una dirección de GitHub sin procesar en raw.githubusercontent.com. Por ejemplo, en la rama main de la bifurcación my-org, configurarías --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.

Si usas la marca --registry, se evita que se use el Registro central de Bazel de forma predeterminada, pero puedes volver a agregarlo si agregas --registry=https://bcr.bazel.build.