Guia para lançar alterações interruptivas

Informar um problema Ver a fonte Nightly · 8.0 · 7.4 · 7.3 · 7.2 · 7.1 · 7.0  · 6.5

É inevitável que façamos mudanças drásticas no Bazel. Vamos precisar mudar nossos designs e corrigir as coisas que não funcionam. No entanto, precisamos garantir que a comunidade e o ecossistema do Bazel possam acompanhar. Para isso, o projeto do Bazel adotou uma política de compatibilidade com versões anteriores. Este documento descreve o processo para que os colaboradores do Bazel façam uma mudança importante no Bazel para aderir a essa política.

  1. Siga a política de documentos de design.

  2. Envie um problema no GitHub.

  3. Implemente a mudança.

  4. Atualizar rótulos

  5. Inverta a flag incompatível.

Problema no GitHub

Registre um problema no GitHub no repositório do Bazel. Confira o exemplo.

Recomendamos que você:

  • O título começa com o nome da sinalização (que começa com incompatible_).

  • Você adiciona o rótulo incompatible-change.

  • A descrição contém uma descrição da mudança e um link para documentos de design relevantes.

  • A descrição contém uma receita de migração para explicar aos usuários como atualizar o código. O ideal é que, quando a mudança for mecânica, inclua um link para uma ferramenta de migração.

  • A descrição inclui um exemplo da mensagem de erro que os usuários vão receber se não migrarem. Isso vai tornar o problema do GitHub mais detectável pelos motores de pesquisa. Verifique se a mensagem de erro é útil e pode ser usada. Quando possível, a mensagem de erro deve incluir o nome da flag incompatível.

Para a ferramenta de migração, considere contribuir com o Buildifier. Ele pode aplicar correções automáticas a arquivos BUILD, WORKSPACE e .bzl. Ele também pode gerar alertas.

Implementação

Crie uma nova flag no Bazel. O valor padrão precisa ser falso. O texto de ajuda precisa conter o URL do problema do GitHub. Como o nome da flag começa com incompatible_, ele precisa de tags de metadados:

      metadataTags = {
        OptionMetadataTag.INCOMPATIBLE_CHANGE,
      },

Na descrição do commit, adicione um breve resumo da flag. Adicione também RELNOTES: no seguinte formulário: RELNOTES: --incompatible_name_of_flag has been added. See #xyz for details

A confirmação também precisa atualizar a documentação relevante para que não haja janelas de confirmação em que o código seja inconsistente com os documentos. Como nossa documentação é versionada, as mudanças nos documentos não são lançadas prematuramente.

Rótulos

Depois que o commit for mesclado e a mudança incompatível estiver pronta para ser adotada, adicione o rótulo migration-ready ao problema do GitHub.

Se um problema for encontrado com a flag e os usuários ainda não precisarem migrar: remova as flags migration-ready.

Se você planeja ativar a flag na próxima versão principal, adicione o rótulo "breaking-change-X.0" ao problema.

atualização de repositórios.

O Bazel CI testa uma lista de projetos importantes em Bazel@HEAD + Downstream. A maioria delas costuma ser dependência de outros projetos do Bazel. Portanto, é importante migrá-las para desbloquear a migração para a comunidade em geral.

Para monitorar o status da migração desses projetos, use o pipeline bazelisk-plus-incompatible-flags. Confira como ele funciona aqui.

A migração de projetos no pipeline downstream NÃO é totalmente de responsabilidade do autor da mudança incompatível. No entanto, você pode fazer o seguinte para acelerar a migração e facilitar a vida dos usuários do Bazel e da Equipe Verde do Bazel.

  1. Envie problemas do GitHub para notificar os proprietários dos projetos downstream que foram corrompidos pela mudança incompatível.
  2. Envie PRs para corrigir projetos downstream.
  3. Entre em contato com a comunidade do Bazel para receber ajuda com a migração (por exemplo, Bazel Rules Authors SIG).

Como inverter a bandeira

Antes de definir o valor padrão da flag como "true", verifique se:

  • Os repositórios principais do ecossistema são migrados.

    No pipeline bazelisk-plus-incompatible-flags, a flag precisa aparecer em The following flags didn't break any passing Bazel team owned/co-owned projects.

  • As dúvidas e preocupações do usuário foram resolvidas.

Quando a flag estiver pronta para ser invertida no Bazel, mas bloqueada na migração interna do Google, defina o valor da flag como "false" no arquivo blazerc interno para desbloquear a inversão da flag. Ao fazer isso, podemos garantir que os usuários do Bazel dependam do novo comportamento por padrão o mais rápido possível.

Ao mudar o padrão da flag para "true", faça o seguinte:

  • Use RELNOTES[INC] na descrição da confirmação, com o seguinte formato: RELNOTES[INC]: --incompatible_name_of_flag is flipped to true. See #xyz for details É possível incluir outras informações no restante da descrição da confirmação.
  • Use Fixes #xyz na descrição para que o problema do GitHub seja fechado quando a confirmação for mesclada.
  • Revise e atualize a documentação, se necessário.
  • Registre um novo problema #abc para acompanhar a remoção da flag.

Como remover a sinalização

Depois que a flag for invertida no HEAD, ela será removida do Bazel. Quando você planeja remover a flag incompatível:

  • Considere deixar mais tempo para os usuários migrarem se for uma mudança importante e incompatível. O ideal é que a flag esteja disponível em pelo menos uma versão principal.
  • Para a confirmação que remove a flag, use Fixes #abc na descrição para que o problema do GitHub seja fechado quando a confirmação for mesclada.