Qualquer desenvolvedor de software pode criar, testar e empacotar qualquer projeto, de qualquer tamanho ou complexidade, com ferramentas fáceis de adotar e ampliar.
Os engenheiros podem dar por garantidos os fundamentos de build. Os desenvolvedores de software se concentram no processo criativo de criação de código porque o processo mecânico de criação e teste é resolvido. Ao personalizar o sistema de build para oferecer suporte a novas linguagens ou necessidades organizacionais exclusivas, os usuários se concentram nos aspectos de extensibilidade exclusivos do caso de uso, sem precisar reinventar a estrutura básica.
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 a configuração local, ela simplesmente funciona. Com a execução remota em várias plataformas, eles podem trabalhar em qualquer máquina em qualquer lugar e testar totalmente as mudanças em todas as plataformas que o projeto tem como destino. Os engenheiros podem configurar rapidamente o build para um novo projeto ou migrar um build atual de forma incremental.
Os projetos podem ser dimensionados para qualquer base de código e equipe. Testes rápidos e incrementais permitem que as equipes validem totalmente cada mudança antes de confirmá-la. Isso continua verdadeiro mesmo quando os repos crescem, os projetos abrangem vários repos e vários idiomas são introduzidos. 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áveis (um build pode ser executado em qualquer máquina sem afetar a saída).
Essas características oferecem suporte à incrementalidade segura (a reconstrução de apenas entradas alteradas não introduz o risco de corrupção) e à distributividade (as ações de build são isoladas e podem ser transferidas). 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, instruções específicas para idiomas, plataformas e toolchains implementadas em uma linguagem de extensibilidade simples, permite que ele seja facilmente aplicado a qualquer contexto.
Principais competências do Bazel
- O Bazel oferece suporte a builds e testes multilíngue e multiplataforma. É possível executar um único comando para criar e testar toda a árvore de origem, não importa qual combinação de idiomas e plataformas você usa.
- Os builds do Bazel são rápidos e corretos. Cada execução de build e teste é incremental nas máquinas dos desenvolvedores e na CI.
- O Bazel fornece uma linguagem uniforme e extensível para definir builds para qualquer linguagem ou plataforma.
- O Bazel permite que seus builds sejem dimensionados ao se conectar a serviços de execução remota e de armazenamento em cache.
- O Bazel funciona em todas as principais plataformas de desenvolvimento (Linux, MacOS e Windows).
- Sabemos que adotar o Bazel exige esforço, mas a adoção gradual é possível. O Bazel se integra a ferramentas padrão de fato para uma determinada linguagem/plataforma.
Como atender comunidades de idiomas
A engenharia de software evolui no contexto de comunidades de linguagem, geralmente grupos autoorganizados de pessoas que usam ferramentas e práticas comuns.
Para serem úteis aos membros de uma comunidade de linguagem, regras do Bazel de alta qualidade precisam estar disponíveis e se integrar aos fluxos de trabalho e convenções dessa comunidade.
O Bazel tem o compromisso de ser extensível e aberto, além de oferecer suporte a boas regras para qualquer linguagem.
Requisitos de uma boa regra
- As regras precisam oferecer suporte a criação e teste eficientes para a linguagem, incluindo a cobertura de código.
- 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 incrementais de outros sistemas de build amplamente usados.
- As regras precisam ser extensíveis e interoperáveis, seguindo os princípios do "sanduíche de Basil".
- As regras precisam estar prontas para execução remota. Na prática, isso significa configurável usando o mecanismo de toolchains.
- As regras (e o Bazel) precisam interagir com um ambiente de desenvolvimento integrado amplamente usado para a linguagem, se houver um.
- As regras precisam ter documentação completa e útil, com material introdutório para novos usuários e documentos abrangentes para usuários experientes.
Cada um desses itens é essencial e, juntos, eles entregam as competências do Bazel para o ecossistema específico.
Elas também são, em grande parte, suficientes. Depois que todas são atendidas, o Bazel entrega totalmente o valor para os membros dessa comunidade de linguagem.