Roteiro do Bazel

Informar um problema Ver fonte Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

À medida que o Bazel continua evoluindo em resposta às suas necessidades, queremos compartilhar nossa atualização do planejamento de 2025.

Planejamos oferecer a você o suporte a longo prazo (LTS) do Bazel 9.0 no final de 2025.

Transição completa para Bzlmod

O Bzlmod é o sistema padrão de dependências externas no Bazel desde a versão 7, substituindo o sistema WORKSPACE legado. Em março de 2025, o Registro central do Bazel hospeda mais de 650 módulos.

Com o Bazel 9, vamos remover completamente a funcionalidade WORKSPACE, e o Bzlmod será a única maneira de introduzir dependências externas no Bazel. Para minimizar o custo da migração para a comunidade, vamos nos concentrar em melhorar ainda mais nosso guia e nossa ferramenta de migração.

Além disso, pretendemos implementar um cache de repositório compartilhado aprimorado (consulte #12227) com coleta de lixo e talvez fazer o backport para o Bazel 8. O Bazel Central Registry também vai oferecer suporte à verificação de atestados da SLSA.

Migração de regras do Android, C++, Java, Python e Proto

Com o Bazel 8, migramos o suporte para regras do Android, Java, Python e Proto da base de código do Bazel para regras do Starlark nos repositórios correspondentes. Para facilitar a migração, implementamos os recursos de carregamento automático no Bazel, que podem ser controlados com as flags --incompatible_autoload_externally e --incompatible_disable_autoloads_in_main_repo.

Com o Bazel 9, pretendemos desativar os carregamentos automáticos por padrão e exigir que cada projeto carregue explicitamente as regras necessárias nos arquivos BUILD.

Vamos reescrever a maior parte da compatibilidade com a linguagem C++ para Starlark, separá-la do binário do Bazel e movê-la para o repositório /rules_cc. Esse é o último suporte a linguagem principal que ainda faz parte do Bazel.

Também estamos portando testes de unidade para regras de C++, Java e Proto para Starlark, movendo-os para repositórios próximos à implementação para aumentar a velocidade dos autores de regras.

Melhorias no Starlark

O Bazel poderá avaliar macros simbólicas de forma lenta. Isso significa que uma macro simbólica não será executada se os destinos declarados não forem solicitados, melhorando a performance de pacotes muito grandes.

O Starlark terá um sistema de tipos experimental, semelhante às anotações de tipo do Python. Esperamos que o sistema de tipos se estabilize depois do lançamento do Bazel 9.

Capacidade de configuração

Nosso foco principal é reduzir o custo e a confusão das flags de build.

Estamos testando um novo modelo de configuração de projeto que não exige que os usuários saibam quais flags de build e de teste definir e onde. Assim, o $ bazel test //foo define automaticamente as flags corretas com base na política do projeto de foo. É provável que ele continue experimental no 9.0, mas seu feedback é muito importante.

O escopo de flags permite remover flags do Starlark quando elas saem dos limites do projeto, para que não interrompam o armazenamento em cache em dependências transitivas que não precisam delas. Isso torna os builds que usam transições mais baratos e rápidos. Confira um exemplo. Estamos estendendo a ideia para controlar quais flags são propagadas para configurações de execução e considerando um suporte ainda mais flexível, como o Starlark personalizado, para determinar quais arestas de dependência devem propagar flags.

Estamos priorizando o esforço para mover flags de linguagem integradas do Bazel para o Starlark, onde elas podem ficar com definições de regras relacionadas.

Melhorias na execução remota

Planejamos adicionar suporte à execução assíncrona, acelerando a execução remota ao aumentar o paralelismo.


Para acompanhar as atualizações do roteiro e discutir os recursos planejados, participe do servidor do Slack da comunidade em slack.bazel.build.

Este plano de ação tem como objetivo informar a comunidade sobre as intenções da equipe para o Bazel 9.0. As prioridades estão sujeitas a mudanças em resposta ao feedback de desenvolvedores e clientes ou a novas oportunidades de mercado.