Registros do Bazel

Reportar um problema Ver código-fonte Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

O Bzlmod descobre dependências solicitando as informações deles dos registros do Bazel: bancos de dados de módulos do Bazel. No momento, o Bzlmod só oferece suporte a registros de índice, ou seja, diretórios locais ou servidores HTTP estáticos que seguem um formato específico.

Registro de índice

Um registro de índice é um diretório local ou um servidor HTTP estático que contém informações sobre uma lista de módulos, incluindo a página inicial, os mantenedores, o arquivo MODULE.bazel de cada versão e como buscar a origem de cada versão. Ele não precisa exibir os arquivos de origem.

Um registro de índice precisa seguir o formato abaixo:

  • /bazel_registry.json: um arquivo JSON com metadados para o registro, como:
    • mirrors: especifica a lista de espelhos a serem usados para os arquivos de origem. O URL espelhado é uma concatenação do próprio espelho e do URL de origem do módulo especificado pelo arquivo source.json sem o protocolo. Por exemplo, se o URL de origem de um módulo for https://foo.com/bar/baz e mirrors contiver ["https://mirror1.com/", "https://example.com/mirror2/"], os URLs que o Bazel tentará em ordem são https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz e, por fim, o URL de origem original https://foo.com/bar/baz.
    • module_base_path: especifica o caminho base para módulos com tipo local_repository no arquivo source.json.
  • /modules: um diretório que contém um subdiretório para cada módulo neste registro
  • /modules/$MODULE: um diretório que contém um subdiretório para cada versão deste módulo, além de:
    • metadata.json: um arquivo JSON com informações sobre o módulo, com os seguintes campos:
      • homepage: o URL da página inicial do projeto
      • maintainers: uma lista de objetos JSON, cada um correspondendo às informações de um mantenedor do módulo no registro. Isso não é necessariamente igual aos autores do projeto.
      • versions: uma lista de todas as versões desse módulo encontradas neste registro
      • yanked_versions: um mapa de versões desativadas deste módulo. As chaves precisam ser versões para remover e os valores precisam ser descrições de por que a versão foi removida, idealmente contendo um link para mais informações.
  • /modules/$MODULE/$VERSION: um diretório que contém os seguintes arquivos:
    • MODULE.bazel: o arquivo MODULE.bazel dessa versão do módulo
    • source.json: um arquivo JSON com informações sobre como buscar a fonte dessa versão do módulo
      • O tipo padrão é "archive", que representa um repositório http_archive, com os seguintes campos:
        • url: o URL do arquivo de origem
        • integrity: o checksum de integridade de subrecurso do arquivo
        • strip_prefix: um prefixo de diretório para remover ao extrair o arquivo de origem
        • patches: um mapa que contém arquivos de patch a serem aplicados ao arquivo extraído. Os arquivos de patch estão localizados no diretório /modules/$MODULE/$VERSION/patches. As chaves são os nomes dos arquivos de patch, e os valores são a soma de verificação de integridade dos arquivos de patch.
        • patch_strip: igual ao argumento --strip do patch do Unix.
        • archive_type: o tipo de arquivo do arquivo transferido por download (o mesmo que type em http_archive). Por padrão, o tipo de arquivo é determinado pela extensão do URL. Se o arquivo não tiver extensão, especifique explicitamente uma das seguintes opções: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2, "ar" ou "deb".
      • O tipo pode ser alterado para usar um repositório do Git, com estes campos:
        • type: git_repository
        • Os campos a seguir, conforme descrito em https://bazel.build/rules/lib/repo/git:
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • O tipo pode ser alterado para usar um caminho local, representando um repositório local_repository, com estes campos:
        • type: local_path
        • path: o caminho local para o repositório, calculado da seguinte forma:
          • Se path for um caminho absoluto, ele vai permanecer como está.
          • Se path for um caminho relativo e module_base_path for um caminho absoluto, ele será resolvido como <module_base_path>/<path>.
          • Se path e module_base_path forem caminhos relativos, ele será resolvido como <registry_path>/<module_base_path>/<path>. O registro precisa ser hospedado localmente e usado por --registry=file://<registry_path>. Caso contrário, o Bazel gerará um erro.
    • patches/: um diretório opcional que contém arquivos de patch, usado apenas quando source.json tem o tipo "archive".

Registro central do Bazel

O Registro Central do Bazel (BCR, na sigla em inglês) em https://bcr.bazel.build/ é um registro de índice com conteúdo apoiado pelo repositório do GitHub bazelbuild/bazel-central-registry. Você pode navegar pelo conteúdo usando o front-end da Web em https://registry.bazel.build/.

A comunidade do Bazel mantém o BCR, e os colaboradores podem enviar pull requests. Consulte as diretrizes de contribuição de BCR.

Além de seguir o formato de um registro de índice normal, o BCR exige um arquivo presubmit.yml para cada versão do módulo (/modules/$MODULE/$VERSION/presubmit.yml). Esse arquivo especifica alguns destinos de build e teste essenciais que podem ser usados para verificar a validade dessa versão do módulo. Os pipelines de CI do BCR também usam isso para garantir a interoperabilidade entre módulos.

Como selecionar registros

A flag --registry repetível do Bazel pode ser usada para especificar a lista de registros de onde solicitar módulos. Assim, você pode configurar seu projeto para buscar dependências de um registro interno ou de terceiros. Os registros anteriores têm precedência. Para facilitar, você pode colocar uma lista de flags --registry no arquivo .bazelrc do projeto.

Se o registro for hospedado no GitHub (por exemplo, como uma bifurcação de bazelbuild/bazel-central-registry), o valor de --registry precisará de um endereço bruto do GitHub em raw.githubusercontent.com. Por exemplo, na ramificação main da bifurcação my-org, você definiria --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.

O uso da flag --registry impede que o registro central do Bazel seja usado por padrão, mas você pode adicioná-lo novamente adicionando --registry=https://bcr.bazel.build.