Se você planeja adicionar, mudar ou remover um recurso voltado ao usuário ou fazer uma mudança arquitetônica significativa no Bazel, é necessário escrever um documento de design e fazer a revisão antes de enviar a mudança.
Confira alguns exemplos de mudanças significativas:
- Adição ou exclusão de regras de build nativo
- Mudanças interruptivas nas regras nativas
- Mudanças na semântica de uma regra de build nativa que afetam o comportamento de mais de uma regra
- Mudanças na API de definição de regras do Bazel
- Mudanças nas APIs que o Bazel usa para se conectar a outros sistemas
- Mudanças na linguagem, na semântica ou nas APIs do Starlark
- Mudanças que podem ter um efeito generalizado no desempenho ou no uso da memória do Bazel (para melhor ou para pior)
- Mudanças em APIs internas amplamente usadas
- Mudanças nas flags e na interface da linha de comando.
Motivos para revisões de design
Ao escrever um documento de design, você pode coordenar com outros desenvolvedores do Bazel e buscar orientação da equipe principal do Bazel. Por exemplo, quando uma proposta adiciona, remove ou modifica qualquer função ou objeto disponível em arquivos BUILD, WORKSPACE ou bzl, adicione a equipe do Starlark como revisores. Os documentos de design são analisados antes do envio porque:
- O Bazel é um sistema muito complexo. Mudanças locais aparentemente inofensivas podem ter consequências globais significativas.
- A equipe recebe muitas solicitações de recursos dos usuários. Essas solicitações precisam ser avaliadas não apenas pela viabilidade técnica, mas também pela importância em relação a outras solicitações de recursos.
- Os recursos do Bazel são frequentemente implementados por pessoas de fora da equipe principal. Esses colaboradores têm níveis muito diferentes de experiência com o Bazel.
- A equipe do Bazel tem níveis variados de experiência. Nenhum membro da equipe tem um entendimento completo de todos os recursos do Bazel.
- As mudanças no Bazel precisam considerar a compatibilidade com versões anteriores e evitar mudanças quebradas.
A política de análise de design do Bazel ajuda a maximizar a probabilidade de:
- Todas as solicitações de recursos recebem um nível básico de análise.
- as pessoas certas vão pesar os designs antes de investirmos em uma implementação que pode não funcionar.
Para começar, confira os documentos de design no repositório de propostas do Bazel. Os designs estão em andamento, então os detalhes de implementação podem mudar com o tempo e com o feedback. Os documentos de design publicados capturam o design inicial, não as mudanças contínuas à medida que os designs são implementados. Sempre consulte a documentação para ver descrições da funcionalidade atual do Bazel.
Fluxo de trabalho do colaborador
Como colaborador, você pode escrever um documento de design, enviar solicitações de pull e pedir revisores para sua proposta.
Escrever o documento de design
Todos os documentos de design precisam ter um cabeçalho que inclua:
- autor
- data da última mudança importante
- lista de revisores, incluindo um (e apenas um) revisor principal
- status atual (rascunho, em revisão, aprovado, rejeitado, em implementação, implementado)
- link para a discussão (a ser adicionado após o anúncio)
O documento pode ser escrito como um Google Doc legível para todos ou usando Markdown. Leia abaixo sobre uma comparação entre Markdown e Documentos Google.
As propostas que têm um impacto visível para o usuário precisam ter uma seção que documente o impacto na compatibilidade com versões anteriores (e um plano de lançamento, se necessário).
Criar uma solicitação de envio
Compartilhe seu documento de design criando uma solicitação de pull (PR, na sigla em inglês) para adicionar o documento ao índice de design. Adicione seu arquivo Markdown ou um link de documento à sua solicitação de pull.
Quando possível, escolha um revisor principal e copie outros revisores. Se você não escolher um revisor principal, um mantenedor do Bazel vai atribuir um à sua PR.
Depois que você cria a PR, os revisores podem fazer comentários preliminares durante a revisão de código. Por exemplo, o revisor principal pode sugerir outros revisores ou apontar informações ausentes. O revisor principal aprova o PR quando acredita que o processo de revisão pode começar. Isso não significa que a proposta é perfeita ou será aprovada. Significa que ela contém informações suficientes para iniciar a discussão.
Anunciar a nova proposta
Envie um aviso para bazel-dev quando o PR for enviado.
Você pode copiar outros grupos (por exemplo, bazel-discuss, para receber feedback dos usuários finais do Bazel).
Fazer iterações com revisores
Qualquer pessoa interessada pode comentar sobre sua proposta. Tente responder a perguntas, esclarecer a proposta e resolver as dúvidas.
A discussão deve acontecer na linha de execução do anúncio. Se a proposta estiver em um documento do Google, os comentários poderão ser usados. Os comentários anônimos são permitidos.
Atualizar o status
Crie uma nova proposta de alteração para atualizar o status da proposta quando a iteração for concluída. Envie a PR para o mesmo revisor principal e copie os outros revisores.
Para aceitar oficialmente a proposta, o revisor principal aprova a PR depois de garantir que os outros revisores concordam com a decisão.
É preciso haver pelo menos uma semana entre o primeiro anúncio e a aprovação de uma proposta. Isso garante que os usuários tenham tempo suficiente para ler o documento e compartilhar as dúvidas.
A implementação pode começar antes que a proposta seja aceita, por exemplo, como prova de conceito ou experimentação. No entanto, não é possível enviar a mudança antes da conclusão da análise.
Como escolher um revisor principal
O revisor principal precisa ser um especialista no domínio que:
- Conhecimento dos subsistemas relevantes
- Objetivo e capaz de dar feedback construtivo
- Disponibilidade durante todo o período de análise para liderar o processo
Verifique se os contatos têm vários rótulos de equipe.
Markdown x Documentos Google
Decida qual funciona melhor para você, já que ambos são aceitos.
Benefícios de usar o Documentos Google:
- É eficaz para a discussão de ideias, já que é fácil de usar.
- Edição colaborativa.
- Iteração rápida.
- Uma maneira fácil de sugerir edições.
Vantagens do uso de arquivos Markdown:
- Limpe os URLs para vincular.
- Registro explícito de revisões.
- Não se esqueça de configurar os direitos de acesso antes de divulgar um link.
- Fácil de pesquisar com mecanismos de pesquisa.
- Compatível com o futuro: o texto simples não está à mercê de nenhuma ferramenta específica e não requer uma conexão de Internet.
- É possível atualizar as informações mesmo que o autor não esteja mais disponível.
- Eles podem ser processados automaticamente (atualizar/detectar links inválidos, buscar lista de autores etc.).
Você pode iterar primeiro em um Documento Google e depois convertê-lo em Markdown para a posteridade.
Usar o Documentos Google
Para manter a consistência, use o modelo de documento de design do Bazel. Ele inclui o cabeçalho necessário e cria consistência visual com outros documentos relacionados ao Bazel. Para fazer isso, clique em Arquivo > Fazer uma cópia ou clique neste link para fazer uma cópia do modelo de documento de design.
Para tornar seu documento legível para o mundo, clique em Compartilhar > Avançado > Mudar… e escolha "Ativado: qualquer pessoa com o link". Se você permitir comentários no documento, qualquer pessoa poderá comentar anonimamente, mesmo sem uma Conta do Google.
Como usar Markdown
Os documentos são armazenados no GitHub e usam o Markdown do GitHub (especificação).
Crie uma solicitação de pull para atualizar um documento. As mudanças significativas precisam ser analisadas pelos revisores de documentos. Mudanças triviais (como erros de digitação e formatação) podem ser aprovadas por qualquer pessoa.
Fluxo de trabalho do revisor
Um revisor comenta, analisa e aprova documentos de design.
Responsabilidades gerais do revisor
Você é responsável por revisar documentos de design, solicitar mais informações, se necessário, e aprovar um design que passe pelo processo de revisão.
Quando você receber uma nova proposta
- Analise rapidamente o documento.
- Comente se informações importantes estiverem faltando ou se o design não se encaixa nas metas do projeto.
- Sugerir outros revisores.
- Aprovar a PR quando ela estiver pronta para revisão.
Durante o processo de análise
- Converse com o autor do design sobre problemas ou questões que precisam de esclarecimento.
- Se apropriado, convide comentários de pessoas que não são revisores, mas que precisam conhecer o design.
- Decida quais comentários precisam ser abordados pelo autor como pré-requisito para aprovação.
- Escreva "LGTM" (Looks Good To Me) na conversa quando estiver satisfeito com o estado atual da proposta.
Siga este processo para todas as solicitações de revisão de design. Não aprove designs que afetem o Bazel se eles não estiverem no índice de design.
Responsabilidades do principal revisor
Você é responsável por tomar a decisão de colocar em produção ou não na implementação de um design pendente. Se não for possível fazer isso, identifique um delegado adequado (reatribua o PR ao delegado) ou reatribua o bug a um gerenciador do Bazel para mais providências.
Durante o processo de análise
- Garanta que o processo de iteração de comentários e design avance de forma construtiva.
- Antes da aprovação, verifique se as preocupações de outros revisores foram resolvidas.
Após a aprovação de todos os revisores
- Verifique se já se passaram pelo menos uma semana desde o anúncio na lista de e-mails.
- Verifique se a solicitação de pull atualiza o status.
- Aprovar a RP enviada pelo autor da proposta.
Como rejeitar designs
- Verifique se o autor do RP enviou um RP ou envie um para ele.
- A solicitação de alteração de processo atualiza o status do documento.
- Adicione um comentário ao documento explicando por que o design não pode ser aprovado no estado atual e descrevendo as próximas etapas, se houver (como "rever suposições inválidas e reenviar").