O Bzlmod descobre dependências solicitando informações dos registros do Bazel, bancos de dados de módulos do Bazel. Atualmente, o Bzlmod aceita apenas 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. Vale ressaltar que ele não precisa disponibilizar os arquivos de origem por si só.
Um registro de índice precisa seguir o formato abaixo:
/bazel_registry.json
: um arquivo JSON que contém metadados para o registro, como:mirrors
: especifica a lista de espelhos a serem usados 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
contiver["https://mirror1.com/", "https://example.com/mirror2/"]
, os URLs que o Bazel testará na ordem serãohttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
e, finalmente, o próprio URL de origemhttps://foo.com/bar/baz
.module_base_path
: especifica 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 correspondente às informações de um mantenedor do módulo no registro. Observe que não é necessariamente o mesmo que os authors do projetoversions
: uma lista de todas as versões deste módulo disponíveis neste registro.yanked_versions
: um mapa de versões arrastadas do módulo. As chaves precisam ser versões a serem trocadas, e os valores precisam ser descrições do motivo da versão extraída, contendo, idealmente, um link para mais informações
/modules/$MODULE/$VERSION
: um diretório contendo os seguintes arquivos:MODULE.bazel
: o arquivoMODULE.bazel
desta versão do módulo.source.json
: um arquivo JSON que contém informações sobre como buscar a origem da 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 arquivostrip_prefix
: um prefixo de diretório a ser removido ao extrair o arquivo de origem.patches
: um mapa contendo 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
dopatch
do Unix.archive_type
: o tipo de arquivo do arquivo transferido por download (igual atype
nohttp_archive
). Por padrão, o tipo é determinado a partir da extensão do URL. Se o arquivo não tiver extensão, você poderá especificar 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 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, que representa um
repositório
local_repository
, com estes campos:type
:local_path
path
: o caminho local para o repositório, 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 será resolvido como<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 contendo arquivos de patch, usado somente quandosource.json
tem o tipo "arquivo"
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
(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 podem enviar solicitações de envio. Consulte as diretrizes de contribuição do BCR (em inglês).
Além de seguir o formato de um registro de índice normal, o BCR requer
um arquivo presubmit.yml
para cada versão do módulo
(/modules/$MODULE/$VERSION/presubmit.yml
). Esse arquivo especifica alguns destinos
essenciais de build 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.
Como selecionar registros
A flag repetível do Bazel --registry
pode ser usada para especificar a lista de
registros para solicitar módulos. Assim, você pode configurar o projeto para buscar
dependências de um registro interno ou de terceiros. Registros anteriores têm precedência. Por conveniência, é possível 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 my-org
, defina
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
.
Usar a sinalização --registry
impede que o Registro Central do Bazel seja usado por padrão, mas é possível adicioná-lo novamente adicionando --registry=https://bcr.bazel.build
.