Bazel descubre las dependencias solicitando su información de los registros de Bazel, que son bases de datos de módulos de Bazel. Bazel solo admite un tipo de registros: los registros de índice , que son directorios locales o servidores HTTP estáticos que siguen un formato específico.
Registro de índice
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 mantenedores, el archivo MODULE.bazel de cada versión y cómo obtener la fuente de cada versión. En particular, no necesita publicar 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 de este registro./modules/$MODULE: Es un directorio que contiene un subdirectorio para cada versión del módulo llamado$MODULE, así como el archivometadata.jsonque contiene metadatos para este módulo./modules/$MODULE/$VERSION: Es un directorio que contiene los siguientes archivos:MODULE.bazel: Es el archivoMODULE.bazelde esta versión del módulo. Ten en cuenta que este es el archivoMODULE.bazelque se lee durante la resolución de dependencias externas de Bazel, no el del archivo de origen (a menos que haya una anulación que no sea del registro). También ten en cuenta que es mejor usar este archivo para establecer la versión de un lanzamiento y evitar hacerlo en el archivoMODULE.bazelde origen. Para obtener más información sobre el control de versiones de módulos, consulta las Preguntas frecuentes.source.json: Es un archivo JSON que contiene información sobre cómo obtener la fuente de esta versión del módulo.patches/: Es un directorio opcional que contiene archivos de parche, que solo se usa cuandosource.jsontiene el tipo "archive".overlay/: Es un directorio opcional que contiene archivos de superposición, que solo se usa cuandosource.jsontiene el tipo "archive".
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 servidores proxy que se usarán para los archivos de origen.- La URL reflejada es una concatenación del proxy en sí y la URL de origen del módulo especificada por su archivo
source.jsonsin el protocolo. Por ejemplo, si la URL de origen de un módulo eshttps://foo.com/bar/baz, ymirrorscontiene["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.
- La URL reflejada es una concatenación del proxy en sí y la URL de origen del módulo especificada por su archivo
module_base_path: Es una cadena que especifica la ruta base para los módulos con el tipolocal_pathen el archivosource.json.
metadata.json
metadata.json es un archivo JSON opcional que contiene información sobre el módulo, con los siguientes campos:
versions: Es un array de cadenas, cada una de las cuales denota una versión del módulo disponible en este registro. Este array debe coincidir con los elementos secundarios del directorio del módulo.yanked_versions: Es un objeto JSON que especifica las versiones retiradas de este módulo. Las claves deben ser versiones para retirar, y los valores deben ser descripciones de por qué se retira la versión, idealmente con un vínculo a más información.
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 sobre cómo obtener una versión específica de un módulo. El esquema de este archivo depende de su campo type, que tiene el valor predeterminado archive.
- Si
typeesarchive(el valor predeterminado), esta versión del módulo está respaldada por una regla de repositoriohttp_archive. Se obtiene 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.mirror_urls: Es una lista de cadenas, las URLs reflejadas del archivo de origen. Las URLs se prueban en orden después deurlcomo copias de seguridad.integrity: Es una cadena, la suma de verificación de integridad de subrecursos del archivo.strip_prefix: Es una cadena, el prefijo de directorio que se quitará cuando se extraiga el archivo de origen.overlay: Es un objeto JSON que contiene archivos de superposición para colocar sobre el archivo extraído. Los archivos de parche se encuentran en el directorio/modules/$MODULE/$VERSION/overlay. Las claves son los nombres de los archivos de superposición, y los valores son la suma de verificación de integridad de los archivos de superposición. Las superposiciones se aplican antes que los archivos de parche.patches: Es un objeto JSON que contiene archivos de parche para aplicar al archivo extraído. Los archivos de parche se encuentran en el directorio/modules/$MODULE/$VERSION/patches. Las claves son los nombres de los archivos de parche, y los valores son la suma de verificación de integridad de los archivos de parche. Los parches se aplican después de los archivos de superposición y en el orden en que aparecen enpatches.patch_strip: Es un número, igual que el argumento--stripde Unixpatch.archive_type: Es una cadena, el tipo de archivo del archivo descargado (igual quetypeenhttp_archive).
- Si
typeesgit_repository, esta versión del módulo está respaldada por unagit_repositoryregla de repositorio. Se obtiene clonando un repositorio de Git.- Se admiten los siguientes campos y se reenvían directamente a la regla de repositorio
git_repositorysubyacente:remote,commit,shallow_since,tag,init_submodules,verbose,strip_prefixypatch_strip. patches: Es un objeto JSON que contiene archivos de parche para aplicar al repositorio clonado. Los archivos de parche se encuentran en el directorio/modules/$MODULE/$VERSION/patches. Las claves son los nombres de los archivos de parche, y los valores son la suma de verificación de integridad de los archivos de parche. Los parches se aplican en el orden en que aparecen enpatches.
- Se admiten los siguientes campos y se reenvían directamente a la regla de repositorio
- Si
typeeslocal_path, esta versión del módulo está respaldada por unalocal_repositoryregla de repositorio; se vincula simbólicamente 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
pathes una ruta de acceso absoluta, permanece como está. - Si
pathes una ruta de acceso relativa ymodule_base_pathes una ruta de acceso absoluta, se resuelve en<module_base_path>/<path>. - Si
pathymodule_base_pathson rutas de acceso relativas, se resuelve en<registry_path>/<module_base_path>/<path>. El registro debe alojarse de forma local y usarse con--registry=file://<registry_path>. De lo contrario, Bazel mostrará un error.
- Si
Registro central de Bazel
El Registro central de Bazel (BCR) en https://bcr.bazel.build/ es un registro
de índice 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 contribución del 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 objetivos esenciales de
compilación y prueba que puedes usar para verificar la validez de esta versión del
módulo. Las cadenas de integración continua del BCR también lo usan para garantizar la interoperabilidad entre los módulos.
Selecciona registros
Se puede usar la marca --registry repetible de Bazel para especificar la lista de registros de los que se solicitarán módulos, de modo que puedas configurar tu proyecto para obtener 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), tu valor --registry necesita una dirección de GitHub sin procesar en raw.githubusercontent.com. Por ejemplo, en la main
rama de la my-org bifurcación, establecerías
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.
Si usas la marca --registry, se detiene el uso del Registro central de Bazel de forma predeterminada, pero puedes volver a agregarlo con --registry=https://bcr.bazel.build.