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 arquivosource.json
sem o protocolo. Por exemplo, se o URL de origem de um módulo forhttps://foo.com/bar/baz
, emirrors
contém["https://mirror1.com/", "https://example.com/mirror2/"]
, o evento Os URLs que o Bazel vai testar na ordem sãohttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
, e, finalmente, o arquivo URL de origemhttps://foo.com/bar/baz
.module_base_path
: especificando o caminho base para módulos com Tipolocal_repository
no arquivosource.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 projetomaintainers
: 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 projetoversions
: uma lista de todas as versões deste módulo que podem ser encontradas em este registroyanked_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 arquivoMODULE.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 origemintegrity
: o sub-recurso Integridade checksum do arquivostrip_prefix
: um prefixo de diretório a ser removido ao extrair o arquivo de origempatches
: 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 patchpatch_strip
: igual ao argumento--strip
dopatch
do Unix.archive_type
: o tipo do arquivo transferido por download (igual atype
emhttp_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 emodule_base_path
for um caminho absoluto, ele se resolve para<module_base_path>/<path>
- Se
path
emodule_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
- Se
- O tipo padrão é "archive", que representa um repositório
patches/
: um diretório opcional que contém arquivos de patch, usado somente quandosource.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
.