Bazel vision

Informar um problema Ver código-fonte

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 princípios básicos de compilação. 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 compilação para oferecer suporte a novas linguagens ou necessidades organizacionais únicas, os usuários se concentram nos aspectos de extensibilidade exclusivos do caso de uso, sem precisar reinventar o encanamento básico.

  • Os engenheiros podem contribuir facilmente com qualquer projeto. Um desenvolvedor que queira começar a trabalhar em um novo projeto pode simplesmente clonar o projeto e executar o build. A configuração local não é necessária. Com a execução remota multiplataforma, eles podem trabalhar em qualquer máquina em qualquer lugar e testar totalmente as alterações em todas as plataformas segmentadas pelo projeto. Os engenheiros podem configurar rapidamente a versão para um novo projeto ou migrar incrementalmente uma versão existente.

  • Os projetos podem ser escalonados para qualquer tamanho de base de código, equipe de qualquer tamanho. Testes rápidos e incrementais permitem que as equipes validem totalmente todas as alterações antes que elas sejam confirmadas. Isso é válido mesmo quando os repositórios aumentam, 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 por velocidade de compilação.

Acreditamos que o Bazel tenha o potencial para alcançar essa visão.

O Bazel foi criado do zero para permitir versões 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 à incrementabilidade segura (recriar apenas entradas alteradas não introduz o risco de corrupção) e capacidade de distribuição (ações de compilação são isoladas e podem ser descarregadas). Ao minimizar o trabalho necessário para fazer uma compilação correta e carregá-la em paralelo em vários núcleos e sistemas remotos, o Bazel torna qualquer build rápido.

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

Principais competências do Bazel

  1. O Bazel é compatível com testes e builds de várias linguagens e plataformas. É possível executar um único comando para criar e testar toda a árvore de origem, independentemente da combinação de linguagens e plataformas segmentadas.
  2. As versões do Bazel são rápidas e corretas. Cada execução de versão e teste é incremental nas máquinas dos seus desenvolvedores e na CI.
  3. O Bazel oferece uma linguagem uniforme e extensível para definir versões em qualquer linguagem ou plataforma.
  4. O Bazel permite que suas versões sejam escalonadas ao se conectar com serviços de execução remota e armazenamento em cache.
  5. O Bazel funciona em todas as principais plataformas de desenvolvimento (Linux, MacOS e Windows).
  6. Aceitamos que a adoção do Bazel exija esforço, mas a adoção gradual é possível. Interfaces do Bazel com ferramentas padrão de fato para uma determinada linguagem/plataforma.

Comunidades de atendimento de idiomas

A engenharia de software evolui no contexto das comunidades linguísticas, normalmente organizando grupos de pessoas que usam ferramentas e práticas comuns.

Para serem usadas nos membros de uma comunidade linguística, as regras de alta qualidade do Bazel precisam estar disponíveis e integradas 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 à criação e teste eficientes da linguagem, incluindo cobertura de código.
  2. As regras precisam interagir com um "gerenciador de pacotes" amplamente usado para a linguagem (como Maven para Java) e oferecer suporte a caminhos de migração incrementais de outros sistemas de compilação amplamente usados.
  3. As regras precisam ser extensíveis e interoperáveis, seguindo os princípios de sanduíche bazel.
  4. As regras precisam estar prontos para execução remota. Na prática, isso significa configurável usando o mecanismo toolchains.
  5. As regras (e o Bazel) precisam interagir com um ambiente de desenvolvimento integrado amplamente usado para a linguagem, se houver.
  6. As regras precisam ter uma documentação utilizável e detalhada, com material introdutório para novos usuários e documentos abrangentes para usuários especialistas.

Cada um desses itens é essencial e apenas juntos são entregues nas competências do Bazel para o próprio ecossistema.

Eles também são grandes o bastante. Quando todos são atendidos, o Bazel oferece todo o valor aos membros dessa comunidade de idiomas.