Registros do Bazel

Relatar um problema Conferir código-fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

O Bzlmod descobre dependências solicitando as informações dele ao Bazel registros: bancos de dados de módulos do Bazel. Atualmente, o Bzlmod só aceita registros de índice: diretórios locais ou servidores HTTP estáticos seguindo um formato específico.

Registro do í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 sua página inicial, mantenedores, o MODULE.bazel de cada versão e como buscar a origem de cada uma para a versão anterior. Ele não precisa disponibilizar os arquivos de origem em si.

Um registro de índice precisa seguir o formato abaixo:

  • /bazel_registry.json: um arquivo JSON contendo metadados do registro como:
    • mirrors: especificando a lista de espelhos a ser usado para arquivos de origem. O URL espelhado é uma concatenação do próprio espelho, e o 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 contém ["https://mirror1.com/", "https://example.com/mirror2/"], o evento Os URLs que o Bazel vai testar na ordem são https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz, e, finalmente, o arquivo URL de origem https://foo.com/bar/baz.
    • module_base_path: especificando 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 no registro
  • /modules/$MODULE: um diretório contendo um subdiretório para cada versão deste módulo, além de:
    • metadata.json: um arquivo JSON contendo informações sobre o módulo. pelos seguintes campos:
      • homepage: o URL da página inicial do projeto
      • maintainers: uma lista de objetos JSON, cada um correspondendo ao as informações de um administrador do módulo no registro. Observe que não é necessariamente o mesmo que os autores da projeto
      • versions: uma lista de todas as versões deste módulo que podem ser encontradas em este registro
      • yanked_versions: um mapa de puxado de programação deste módulo. As chaves devem ser versões para yank e os valores devem ser descrições de por que a versão foi puxada, 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 desta versão do módulo.
    • source.json: um arquivo JSON contendo informações sobre como buscar o origem desta versão do módulo
      • O tipo padrão é "archive", que representa um repositório http_archive. pelos seguintes campos:
        • url: o URL do arquivo de origem
        • integrity: o sub-recurso Integridade checksum do arquivo
        • strip_prefix: um prefixo de diretório a ser removido ao extrair o arquivo de origem
        • patches: um mapa que contém arquivos de patch para aplicar ao arquivo extraído. Os arquivos de patch estão localizados /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 os arquivos de patch
        • patch_strip: igual ao argumento --strip do patch do Unix.
        • archive_type: o tipo do arquivo transferido por download (igual a type em http_archive). Por padrão, o tipo de arquivo é determinado a partir da extensão do arquivo do URL. Se o arquivo tiver nenhuma extensão, você poderá especificar explicitamente um dos seguintes: "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 Git com os seguintes campos:
        • type: git_repository
        • Os campos a seguir estão descritos 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 uma local_repository, com estes campos:
        • type: local_path
        • path: o caminho local para o repo, calculado da seguinte maneira:
          • Se path for um caminho absoluto, ele permanecerá como está
          • Se path for um caminho relativo e module_base_path for um caminho absoluto, ele se resolve para <module_base_path>/<path>
          • Se path e module_base_path forem caminhos relativos, eles resolve para <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 somente quando source.json tem "arquivar" tipo

Registro central do Bazel

O Bazel Central Registry (BCR) em https://bcr.bazel.build/ é um índice com conteúdo respaldado pelo repositório do GitHub bazelbuild/bazel-central-registry. Você pode navegar em seu 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 solicitações de envio. Veja a contribuição do BCR diretrizes.

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 elementos destinos de build e teste que podem ser usados para verificar a validade do módulo. para a versão anterior. Os pipelines de CI do BCR também usam isso para garantir a interoperabilidade entre os módulos.

Seleção de registros

A flag repetível --registry do Bazel pode ser usada para especificar a lista de registros dos quais solicitar módulos. Assim, você configura seu projeto para buscar dependências de um registro interno ou de terceiros. Registros anteriores levam precedência. Por conveniência, você pode colocar uma lista de sinalizações --registry no .bazelrc do seu projeto.

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

Usar a flag --registry impede que o Bazel Central Registry seja usado pelo padrão, mas é possível adicionar novamente --registry=https://bcr.bazel.build.