ADR 0217 — Автоматическое продвижение dev → qa, пока QA находится в тестовой фазе
Статус
Accepted. 2026-10-15 (AT-555, решение владельца от 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."
Тема: git. Пересматривает, не редактируя, поток продвижения ADR 0030 (merge
продвижения как ручной акт) и его лестницу одобрения, только для пары dev → qa
и только при включённой переменной. ADR 0073 (опубликованный путь называет окружение)
не меняется: меняется то, насколько часто публикуется /brabo/qa/.
Контекст
Продвижение dev → qa всегда было ручным: promote.yml (workflow_dispatch)
вычисляет версию и открывает PR через BRABO_BOT_TOKEN, а owner одобряет и мержит.
Пока qa ещё не используется как проверенное окружение, этот шаг стоил одного
человеческого жеста за цикл, ничего не защищая из того, что кто-либо потреблял.
В репозитории нет обязательных проверок: gh pr merge --auto смержил бы
сразу, не дожидаясь CI. Автоматизация merge требует, чтобы ОЖИДАНИЕ принадлежало
автоматизации.
Решение
- Workflow
promote-auto-qa.ymlнаpushвdev, только при переменной репозиторияQA_FASE_DE_TESTE == 'true'. Он выполняет ТО ЖЕ вычисление версии (scripts/ci/promote.ts) и ТОТ ЖЕ шаг открытия (scripts/ci/abrir-pr-de-promocao.sh, извлечённый изpromote.yml), чтобы открыть или обновить PRdev→qaчерезBRABO_BOT_TOKEN. - Ожидание и merge через
scripts/ci/promocao-automatica.ts: читает check runs head, пока ВСЕ не завершатся; мержит с merge commit (и--match-head-commit) лишь если ни один не завершилсяfailure,cancelled,timed_out,action_required,startup_failureилиstale. Ноль проверок — ждать, никогда не мержить. Любой сбой останавливает продвижение и пишет в сводку job, какая проверка, и ссылку. Предел ожидания 50 минут. Concurrencypromote-auto-qa, без отмены. - Пустой цикл не является сбоем при автоматическом продвижении (
cicloVazioEhFalha): push вdevбез новой работы — merge продвижения, backmerge,devуже равнаqa— завершается 0 с::notice::и "nada a promover: o ciclo está vazio" в сводке, не открывая PR. Повторяющееся красное научило бы игнорировать красное. В ручномpromote.ymlпо-прежнему сбой. - Без
BRABO_BOT_TOKEN— видимый сбой: job выходит красным, сообщая об этом. Стандартный токен открыл бы PR с проверками вaction_required, а его merge не запустил быtag-releaseиdocs-deploy. - Лестница (
scripts/ci/approval-ladder.ts,ehPromocaoAutomaticaDaFaseDeTeste) снимает одобрение ТОЛЬКО когда пара —dev→qa, переменная включена, а автор PR — пользовательBRABO_BOT_TOKEN, разрешаемый в workflow черезgh api userс самим секретом, никогда по фиксированному имени. Причина выходит в сводку проверки.qa→mainи любая другая пара по-прежнему требуют одобрения в обоих режимах. - Предупреждение: сайт, опубликованный в
/brabo/qa/, получает фиксированныйannouncementBar, а тело автоматической PR начинается тем же текстом — "Fase de teste: a QA é promovida automaticamente a cada merge na dev e ainda não é considerada ambiente validado."
Последствия
- Каждый merge в
devс зелёным CI становится тегом-qa.N(tag-releaseвыполняется на push вqa), иNначинает считать merges, а не круги проверки. /brabo/qa/переопубликовывается при каждом merge вdev.- Переменная включается и выключается без изменения кода: её удаление или смена значения возвращает
к ручному
promote.yml, и лестница снова требует owner. qa→mainостаётся нетронутым: вручную, с одобрением, а финальный тег рождается лишь на коммите последнего-qa.N.- Если пользователь
BRABO_BOT_TOKEN— сам owner, лестница уже проходила по авторству (режимsolo); новое снятие меняет лишь записанную причину. - Объявленная цена:
qaперестаёт быть проверенным кандидатом, пока переменная включена, — именно это и говорит предупреждение.