Pular para o conteúdo
Development

Uma correção de desvio de documentação que não foi tão chata quanto parecia

Por Victor Da Luz
railsrubydev-logblog-manager

A tarefa de hoje era três itens tirados de uma auditoria anterior: uma linha desatualizada num arquivo de documentação, alguns valores de configuração de placeholder que nunca foram substituídos por valores reais, e uma alegação errada no arquivo de inventário de outro repositório. No papel, nada disso parecia interessante. Na prática, quase cada passo virou algo que valia a pena parar para investigar.

Verifique antes de planejar

Antes de escrever qualquer código, checei cada uma das três alegações contra o estado atual real, em vez de confiar no texto da issue. Ainda bem: uma das três (“o build ainda roda em infraestrutura hospedada pelo GitHub”) já estava, na maior parte, corrigida por um trabalho anterior, exceto por uma única linha numa seção diferente do mesmo arquivo que a correção anterior tinha deixado passar. Se eu simplesmente tivesse executado a issue como estava escrita, eu teria duplicado uma correção ou deixado passar a única linha que ainda precisava dela.

A recuperação de senha que estava silenciosamente morta

Um dos valores de placeholder era o host padrão e o endereço de remetente de um mailer, ambos ainda configurados para um domínio fictício. Antes de mexer neles, checei se a funcionalidade por trás deles sequer era real, e era: uma ação de controller de recuperação de senha funcionando, totalmente conectada, só que apontando para lugar nenhum. Corrigir o placeholder foi a parte fácil. A pergunta mais difícil era o escopo: eu deveria também configurar o envio real de e-mail? Decidi que não, isso é um trabalho maior e separado, e deixei um comentário explícito dizendo isso, em vez de silenciosamente deixar uma funcionalidade meio corrigida sem nenhuma explicação.

O que a revisão pegou que eu não peguei

Rodei uma revisão no diff pequeno antes de fazer o merge, mais como formalidade dado quão pouco código estava de fato mudando. Ela encontrou coisas reais.

O domínio que eu tinha escolhido para o endereço de remetente não tinha nenhum registro de e-mail configurado, nada de SPF, nada de DKIM, nada. Qualquer e-mail enviado a partir dele seria marcado como spam ou rejeitado de cara por qualquer coisa moderna. O código já tinha um domínio de e-mail real e funcional em uso em outro lugar; eu só tinha pegado o errado por hábito.

Mais interessante: o valor de host que defini para gerar links nos e-mails estava correto para produção, mas esse app roda exatamente o mesmo arquivo de ambiente tanto para produção quanto para staging, não existe uma configuração de staging separada. Então um e-mail de recuperação de senha enviado a partir de staging teria gerado um link apontando para produção. Inofensivo por enquanto, porque o envio de e-mail ainda não está configurado, mas teria se tornado um bug real e silencioso no momento em que alguém terminasse esse trabalho de continuação mais tarde, e nessa altura ninguém pensaria em checar uma linha de uma issue sem relação, de “corrigir a documentação.”

Corrigi lendo o host de uma variável de ambiente definida por destino de deploy, em vez de fixar um único valor no código. Antes de confiar que a correção realmente funcionava, chamei diretamente o código de carregamento de configuração da ferramenta de deploy e imprimi para o que cada destino resolvia, confirmando valores diferentes para produção e staging sem precisar fazer deploy primeiro. Checagem barata, pegou um possível erro de digitação antes que virasse um problema em produção.

Seguindo o rastro

A parte entre repositórios era uma correção de uma linha no inventário. Ao fazer o push, encontrei uma checagem de CI vermelha na branch main daquele repositório, e parei em vez de fazer o push mesmo assim. Descobri que não era uma falha real: o job tinha rodado por três segundos e registrado zero passos, o que é a assinatura de a interrupção relacionada a cobrança que eu já tinha diagnosticado em outro projeto. Confirmei que não havia problema de verdade rodando a mesma checagem de lint localmente eu mesmo. Registrei uma issue de continuação para corrigir a causa raiz lá também, já que é a mesma categoria de risco de “o CI fica verde ou vermelho por motivos que não têm nada a ver com o seu código.”

O que vem a seguir

Nada pendente aqui. O tema em toda a sessão: issues pequenas e “chatas” são exatamente as que valem a pena desacelerar, porque ninguém espera encontrar nada, e é exatamente aí que as coisas passam despercebidas.

Leitura relacionada

Development

Adicionando links dos posts ao vivo no painel

Fazendo os títulos do painel linkarem para os posts ao vivo: um prefixo de caminho configurável, uma trava por pub_date contra links quebrados, e uma coluna do spec que descartei.

Ler

Você também pode achar útil

NordPass

NordPass

Gerenciador de senhas da equipe por trás da NordVPN, com um plano gratuito.

Como afiliado da NordPass, ganho com compras qualificadas.

Saiba mais
Proton

Proton Mail

E-mail criptografado de ponta a ponta, com arquitetura de acesso zero.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
Proton

Proton Drive

Armazenamento em nuvem criptografado, da equipe por trás do Proton Mail.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais