O Bzlmod descobre dependências solicitando as informações deles dos registros do Bazel: bancos de dados de módulos do Bazel. O Bazel oferece suporte apenas a um tipo de registro: registros de índice, 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 ter o seguinte formato:
/bazel_registry.json
: um arquivo JSON opcional que contém metadados para o registro./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 do módulo chamado$MODULE
, bem como o arquivometadata.json
que contém metadados para esse módulo./modules/$MODULE/$VERSION
: um diretório que contém os seguintes arquivos:MODULE.bazel
: o arquivoMODULE.bazel
dessa versão do módulo. Observe que este é o arquivoMODULE.bazel
lido durante a resolução de dependência externa do Bazel, não o do arquivo de origem, a menos que haja uma substituição sem registro.source.json
: um arquivo JSON com informações sobre como extrair a origem dessa versão do módulo.patches/
: um diretório opcional que contém arquivos de patch, usado apenas quandosource.json
tem o tipo "archive".overlay/
: um diretório opcional que contém arquivos de sobreposição, usado apenas quandosource.json
tem o tipo "archive".
bazel_registry.json
bazel_registry.json
é um arquivo opcional que especifica metadados aplicados a
todo o registro. Ele pode conter os seguintes campos:
mirrors
: uma matriz de strings, que especifica a lista de espelhos a serem usados para arquivos de origem.- O URL espelhado é uma concatenação do próprio espelho e do
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 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
.
- O URL espelhado é uma concatenação do próprio espelho e do
URL de origem do módulo especificado pelo arquivo
module_base_path
: uma string que especifica o caminho de base para módulos com tipolocal_path
no arquivosource.json
.
metadata.json
metadata.json
é um arquivo JSON opcional que contém informações sobre o
módulo, com os seguintes campos:
versions
: uma matriz de strings, cada uma indicando uma versão do módulo disponível neste registro. Essa matriz precisa corresponder aos filhos do diretório do módulo.yanked_versions
: um objeto JSON que especifica as versões do módulo. As chaves precisam ser as versões a serem removidas, e os valores precisam ser descrições do motivo da remoção, de preferência com um link para mais informações.
O BCR exige mais informações no arquivo metadata.json
.
source.json
source.json
é um arquivo JSON obrigatório que contém informações sobre como buscar
uma versão específica de um módulo. O esquema desse arquivo depende do campo type
, que é definido como archive
por padrão.
- Se
type
forarchive
(padrão), essa versão do módulo será respaldada por uma regra de repositóriohttp_archive
. Ela será buscada fazendo o download de um arquivo de um determinado URL e extraindo o conteúdo dele. Ele oferece suporte aos seguintes campos:url
: uma string, o URL do arquivo de origemintegrity
: uma string, a soma de verificação Subresource Integrity do arquivostrip_prefix
: uma string, o prefixo do diretório a ser removido ao extrair o arquivo de origemoverlay
: um objeto JSON que contém arquivos de sobreposição para sobrepor o arquivo extraído. Os arquivos de patch estão localizados no diretório/modules/$MODULE/$VERSION/overlay
. As chaves são os nomes dos arquivos de sobreposição, e os valores são a soma de verificação de integridade dos arquivos de sobreposição. As sobreposições são aplicadas antes dos arquivos de patch.patches
: um objeto JSON 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 o checksum de integridade dos arquivos de patch. Os patches são aplicados após os arquivos de sobreposição.patch_strip
: um número, o mesmo que o argumento--strip
do Unixpatch
.archive_type
: uma string, o tipo de arquivo do arquivo transferido por download (igual atype
emhttp_archive
).
- Se
type
forgit_repository
, essa versão do módulo será respaldada por uma regra de repositóriogit_repository
. Ela será buscada clonando um repositório Git.- Os campos a seguir são aceitos e encaminhados diretamente para a
regra de repositório
git_repository
:remote
,commit
,shallow_since
,tag
,init_submodules
,verbose
estrip_prefix
.
- Os campos a seguir são aceitos e encaminhados diretamente para a
regra de repositório
- Se
type
forlocal_path
, essa versão do módulo será respaldada por uma regra de repositóriolocal_repository
; ela é vinculada a um diretório no disco local. Ele oferece suporte ao seguinte campo: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, eles serão resolvidos 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
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
.