Bzlmod descubre las dependencias solicitando su información a los registros de Bazel: bases de datos de módulos de Bazel. Actualmente, Bzlmod solo admite 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 publique los archivos de origen.
Un registro de índice debe seguir el siguiente formato:
/bazel_registry.json
: Es un archivo JSON que contiene metadatos del registro, como los siguientes:mirrors
: 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 archivosource.json
sin el protocolo. Por ejemplo, si la URL de origen de un módulo eshttps://foo.com/bar/baz
ymirrors
contiene["https://mirror1.com/", "https://example.com/mirror2/"]
, las URLs que Bazel intentará en orden sonhttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
y, por último, la URL de origen originalhttps://foo.com/bar/baz
.module_base_path
: Especifica la ruta de acceso base para los módulos con el tipolocal_repository
en el archivosource.json
.
/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 de este módulo, así como lo siguiente:metadata.json
: Es un archivo JSON que contiene información sobre el módulo, con los siguientes campos:homepage
: Es la URL de la página principal del proyecto.maintainers
: Es una lista de objetos JSON, cada uno de los cuales corresponde a la información de un encargado del módulo en el registro. Ten en cuenta que esto no es necesariamente lo mismo que los autores del proyecto.versions
: Es una lista de todas las versiones de este módulo que se encuentran en este registro.yanked_versions
: Un mapa de las versiones eliminadas de este módulo. Las claves deben ser versiones para quitar y los valores deben ser descripciones de por qué se quita la versión, lo ideal es que contengan un vínculo a más información.
/modules/$MODULE/$VERSION
: Es un directorio que contiene los siguientes archivos:MODULE.bazel
: Es el archivoMODULE.bazel
de esta versión del módulo.source.json
: Es un archivo JSON que contiene información para recuperar la fuente de esta versión del módulo.- El tipo predeterminado es “archive”, que representa un repositorio
http_archive
, con los siguientes campos:url
: Es la URL del archivo de origen.integrity
: La suma de comprobación de integridad de subrecursos del archivostrip_prefix
: Es un prefijo de directorio que se quita cuando se extrae el archivo fuente.patches
: Es un mapa 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.patch_strip
: Es igual que el argumento--strip
de Unixpatch
.archive_type
: Es el tipo de archivo del archivo descargado (es igual quetype
enhttp_archive
). De forma predeterminada, el tipo de archivo se determina a partir de la extensión de archivo de la URL. Si el archivo no tiene extensión, puedes especificar de forma explícita una de las siguientes opciones:"zip"
,"jar"
,"war"
,"aar"
,"tar"
,"tar.gz"
,"tgz"
,"tar.xz"
,"txz"
,"tar.zst"
,"tzst"
,tar.bz2
,"ar"
o"deb"
.
- El tipo se puede cambiar para usar un repositorio de git, con estos campos:
type
:git_repository
- Los siguientes campos, como se describe en https://bazel.build/rules/lib/repo/git:
remote
commit
shallow_since
tag
init_submodules
verbose
strip_prefix
- El tipo se puede cambiar para usar una ruta de acceso local, que representa un repositorio
local_repository
, con estos campos:type
:local_path
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 ymodule_base_path
es una ruta absoluta, se resuelve en<module_base_path>/<path>
. - Si
path
ymodule_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.
- Si
- El tipo predeterminado es “archive”, que representa un repositorio
patches/
: Es un directorio opcional que contiene archivos de parches y solo se usa cuandosource.json
tiene el tipo "archive".
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 de 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 recuperar 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
.