O Bzlmod descobre dependências solicitando as informações delas dos registros do Bazel, bancos de dados de módulos do Bazel. Atualmente, o Bzlmod só é compatível com 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 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 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 serem usados para arquivos de origemmodule_base_path
: especificando o caminho base para módulos com o tipolocal_repository
no arquivosource.json
/modules
: um diretório que contém um subdiretório para cada módulo nesse 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 contendo informações sobre o módulo, com os seguintes campos:homepage
: o URL da página inicial do projetomaintainers
: uma lista de objetos JSON, cada um correspondendo às informações de um administrador do módulo no registro. Observe que ele não é necessariamente igual aos autores do projeto.versions
: uma lista de todas as versões deste módulo encontradas neste registroyanked_versions
: um mapa de versões ianizadas deste módulo. As chaves precisam ser versões do yank e os valores precisam ser descrições de por que a versão é 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 a origem 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 origemintegrity
: a soma de verificação da Integridade de sub-recursos 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 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 deles.patch_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 não tiver extensão, especifique explicitamente um dos seguintes itens:"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 seguintes campos, 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 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 absoluto, ele será resolvido para<module_base_path>/<path>
. - Se
path
emodule_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 vai 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 o tipo "archive".
Registro central do Bazel
O Bazel Central Registry (BCR) em https://bcr.bazel.build/ é um registro
de índice com conteúdo respaldado pelo repositório do GitHub
bazelbuild/bazel-central-registry
(link em inglês).
Navegue 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 são bem-vindos para enviar solicitações de envio. Consulte as diretrizes de contribuição do 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 essenciais
de criação e teste 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 os módulos.
Seleção de registros
A flag repetível --registry
do Bazel pode ser usada para especificar a lista de
registros para solicitar módulos. Assim, é possível configurar seu projeto para buscar
dependências de um registro interno ou de terceiros. Registros anteriores têm
precedência. Por conveniência, você pode colocar uma lista de sinalizações --registry
no
arquivo .bazelrc
do seu projeto.
Se o registro estiver hospedado no GitHub (por exemplo, como uma bifurcação de
bazelbuild/bazel-central-registry
), o valor --registry
precisará de um endereço bruto
do GitHub em raw.githubusercontent.com
. Por exemplo, na ramificação main
da bifurcação de my-org
, defina
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
.
Usar a sinalização --registry
impede que o Bazel Central Registry seja usado por
padrão, mas é possível adicioná-lo novamente adicionando --registry=https://bcr.bazel.build
.