Перейти к основному содержимому

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 требует, чтобы ОЖИДАНИЕ принадлежало автоматизации.

Решение​

  1. 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), чтобы открыть или обновить PR dev → qa через BRABO_BOT_TOKEN.
  2. Ожидание и 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 минут. Concurrency promote-auto-qa, без отмены.
  3. Пустой цикл не является сбоем при автоматическом продвижении (cicloVazioEhFalha): push в dev без новой работы — merge продвижения, backmerge, dev уже равна qa — завершается 0 с ::notice:: и "nada a promover: o ciclo está vazio" в сводке, не открывая PR. Повторяющееся красное научило бы игнорировать красное. В ручном promote.yml по-прежнему сбой.
  4. Без BRABO_BOT_TOKEN — видимый сбой: job выходит красным, сообщая об этом. Стандартный токен открыл бы PR с проверками в action_required, а его merge не запустил бы tag-release и docs-deploy.
  5. Лестница (scripts/ci/approval-ladder.ts, ehPromocaoAutomaticaDaFaseDeTeste) снимает одобрение ТОЛЬКО когда пара — dev → qa, переменная включена, а автор PR — пользователь BRABO_BOT_TOKEN, разрешаемый в workflow через gh api user с самим секретом, никогда по фиксированному имени. Причина выходит в сводку проверки. qa → main и любая другая пара по-прежнему требуют одобрения в обоих режимах.
  6. Предупреждение: сайт, опубликованный в /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 перестаёт быть проверенным кандидатом, пока переменная включена, — именно это и говорит предупреждение.