Visão do Bazel

Reportar um problema Ver a fonte Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Qualquer desenvolvedor de software pode criar, testar e empacotar com eficiência qualquer projeto, de qualquer tamanho ou complexidade, com ferramentas fáceis de adotar e estender.

  • Os engenheiros podem considerar os fundamentos de build como garantidos. Os desenvolvedores de software se concentram no processo criativo de criação de código porque o processo mecânico de build e teste é resolvido. Ao personalizar o sistema de build para suportar novas linguagens ou necessidades organizacionais exclusivas, os usuários se concentram nos aspectos de extensibilidade exclusivos do caso de uso, sem precisar reinventar o básico.

  • Os engenheiros podem contribuir facilmente com qualquer projeto. Um desenvolvedor que quer começar a trabalhar em um novo projeto pode simplesmente clonar o projeto e executar o build. Não é necessário fazer configurações locais. Basta usar. Com a execução remota multiplataforma, eles podem trabalhar em qualquer máquina em qualquer lugar e testar totalmente as mudanças em todas as plataformas que o projeto segmenta. Os engenheiros podem configurar rapidamente o build para um novo projeto ou migrar um build atual de forma incremental.

  • Os projetos podem ser escalonados para qualquer tamanho de base de código ou equipe. Os testes rápidos e incrementais permitem que as equipes validem totalmente cada mudança antes de ela ser confirmada. Isso continua sendo verdade mesmo à medida que os repositórios crescem, os projetos abrangem vários repositórios e várias linguagens são introduzidas. A infraestrutura não força os desenvolvedores a trocar a cobertura de teste pela velocidade de build.

Acreditamos que o Bazel tem o potencial de realizar essa visão.

O Bazel foi criado do zero para permitir builds reproduzíveis (um determinado conjunto de entradas sempre produzirá as mesmas saídas) e portáteis (um build pode ser executado em qualquer máquina sem afetar a saída).

Essas características oferecem suporte ao incremento seguro (a reconstrução apenas de entradas alteradas não introduz o risco de corrupção) e à capacidade de distribuição (as ações de build são isoladas e podem ser descarregadas). Ao minimizar o trabalho necessário para fazer um build correto e paralelizar esse trabalho em vários núcleos e sistemas remotos, o Bazel pode acelerar qualquer build.

A camada de abstração do Bazel, com instruções específicas para linguagens, plataformas e cadeias de ferramentas implementadas em uma linguagem de extensibilidade simples, permite que ele seja aplicado facilmente a qualquer contexto.

Competências principais do Bazel

  1. O Bazel é compatível com criações e testes multilíngues e multiplataformas. Você pode executar um único comando para criar e testar toda a árvore de origem, não importa qual combinação de linguagens e plataformas você esteja segmentando.
  2. Os builds do Bazel são rápidos e corretos. Cada build e execução de teste é incremental, nas máquinas dos desenvolvedores e na CI.
  3. O Bazel oferece uma linguagem uniforme e extensível para definir builds em qualquer linguagem ou plataforma.
  4. O Bazel permite que seus builds sejam dimensionados ao se conectar à execução remota e aos serviços de caching.
  5. O Bazel funciona em todas as principais plataformas de desenvolvimento (Linux, MacOS e Windows).
  6. Sabemos que a adoção do Bazel exige esforço, mas é possível fazer isso de forma gradual. O Bazel interage com ferramentas padrão de fato para uma determinada linguagem/plataforma.

Atendimento a comunidades de idiomas

A engenharia de software evolui no contexto das comunidades de linguagem, geralmente grupos auto-organizados de pessoas que usam ferramentas e práticas comuns.

Para serem úteis aos membros de uma comunidade de linguagem, é preciso ter regras do Bazel de alta qualidade que se integrem aos fluxos de trabalho e às convenções dessa comunidade.

O Bazel tem o compromisso de ser extensível e aberto, além de oferecer suporte a bons conjuntos de regras para qualquer linguagem.

Requisitos de um bom conjunto de regras

  1. As regras precisam oferecer suporte a criação e testes eficientes para a linguagem, incluindo cobertura de código.
  2. As regras precisam interagir com um "gerenciador de pacotes" amplamente usado para a linguagem (como o Maven para Java) e oferecer suporte a caminhos de migração incremental de outros sistemas de build amplamente usados.
  3. As regras precisam ser extensíveis e interoperáveis, seguindo os princípios do "sanduíche do Bazel".
  4. As regras precisam estar prontas para execução remota. Na prática, isso significa configurável usando o mecanismo de toolchains.
  5. As regras (e o Bazel) precisam interagir com um ambiente de desenvolvimento integrado amplamente usado para a linguagem, se houver um.
  6. As regras precisam ter uma documentação completa e útil, com material introdutório para novos usuários e documentos abrangentes para usuários avançados.

Cada um desses itens é essencial e só juntos eles atendem às competências do Bazel para o ecossistema específico.

Eles também são, em geral, suficientes. Depois que todos são atendidos, o Bazel entrega totalmente o valor dele aos membros dessa comunidade de linguagem.