ADR 0217 — Promoção automática dev → qa enquanto a QA está em fase de teste
Status
Accepted. 2026-10-15 (AT-555, decisão do dono de 15/10): "Para ganharmos agilidade, uma regra de auto merge em qa quando houver merge em dev, e um aviso de que, enquanto estiver em fase de teste, a qa ainda não será considerada."
Tema: git. Revisa, sem editar, o fluxo de promoção do ADR 0030 (o merge de
promoção como ato manual) e a escada de aprovação dele, só no par dev → qa
e só com a variável ligada. O ADR 0073 (o caminho publicado nomeia o ambiente)
não muda: muda o quanto /brabo/qa/ publica.
Contexto
A promoção dev → qa era sempre manual: promote.yml (workflow_dispatch)
calcula a versão e abre o PR pelo BRABO_BOT_TOKEN, e o owner aprova e mergeia.
Com a qa ainda sem uso como ambiente validado, esse passo custava um gesto
humano por ciclo sem proteger nada que alguém consumisse.
O repositório não tem checks obrigatórios: gh pr merge --auto mergearia na
hora, sem esperar o CI. Automatizar o merge exige que a ESPERA seja da
automação.
Decisão
- Workflow
promote-auto-qa.yml, empushnadev, só com a variável de repositórioQA_FASE_DE_TESTE == 'true'. Ele roda o MESMO cálculo de versão (scripts/ci/promote.ts) e o MESMO passo de abertura (scripts/ci/abrir-pr-de-promocao.sh, extraído dopromote.yml) para abrir ou atualizar o PRdev→qapeloBRABO_BOT_TOKEN. - Espera e merge por
scripts/ci/promocao-automatica.ts: lê os check runs do head até TODOS terminarem; mergeia com merge commit (e--match-head-commit) só se nenhum terminoufailure,cancelled,timed_out,action_required,startup_failureoustale. Zero checks é esperar, nunca mergear. Qualquer falha para a promoção e escreve no resumo do job qual check e o link. Teto de 50 minutos de espera. Concurrencypromote-auto-qa, sem cancelamento. - Ciclo vazio não é falha na promoção automática (
cicloVazioEhFalha): push nadevsem trabalho novo — merge de promoção, backmerge,devjá igual àqa— sai 0 com::notice::e "nada a promover: o ciclo está vazio" no resumo, sem abrir PR. Vermelho recorrente ensinaria a ignorar o vermelho. Nopromote.ymlmanual segue falha. - Sem
BRABO_BOT_TOKEN, falha visível: o job sai vermelho dizendo isso. O token padrão abriria o PR com checks emaction_requirede o merge dele não disparariatag-releasenemdocs-deploy. - A escada (
scripts/ci/approval-ladder.ts,ehPromocaoAutomaticaDaFaseDeTeste) dispensa a aprovação SÓ quando o par édev→qa, a variável está ligada e o autor do PR é o usuário doBRABO_BOT_TOKEN— resolvido no workflow porgh api usercom o próprio segredo, nunca por nome fixo. A razão sai no resumo do check.qa→maine qualquer outro par seguem exigindo aprovação, nos dois modos. - O aviso: o site publicado em
/brabo/qa/ganhaannouncementBarfixo, e o corpo do PR automático abre com o mesmo texto — "Fase de teste: a QA é promovida automaticamente a cada merge na dev e ainda não é considerada ambiente validado."
Consequências
- Cada merge na
devcom CI verde vira uma tag-qa.N(otag-releaseroda no push daqa), e oNpassa a contar merges, não voltas de validação. /brabo/qa/é republicado a cada merge nadev.- A variável liga e desliga sem tocar código: apagá-la ou mudar o valor volta
ao
promote.ymlmanual, e a escada volta a exigir o owner. qa→mainfica intacto: manual, com aprovação, e a tag final só nasce no commit da última-qa.N.- Se o usuário do
BRABO_BOT_TOKENfor o próprio owner, a escada já passava por autoria (modosolo); a dispensa nova só muda o motivo escrito. - Preço declarado: a
qadeixa de ser candidata validada enquanto a variável estiver ligada — é exatamente o que o aviso diz.