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 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 tentará em ordem sãohttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
e, por fim, o URL de origem originalhttps://foo.com/bar/baz
.module_base_path
: especifica 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 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 projetomaintainers
: 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 registroyanked_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 arquivoMODULE.bazel
dessa versão do módulosource.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 origemintegrity
: o checksum de integridade de subrecurso do arquivostrip_prefix
: um prefixo de diretório para remover ao extrair o arquivo de origempatches
: 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
dopatch
do Unix.archive_type
: o tipo de arquivo do arquivo transferido por download (o mesmo quetype
emhttp_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 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 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 apenas quandosource.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
.