feat(release): input autorizacao no chamador e guard de deploy ligado no reusável [INFRA-69300] #107

Merged
tmf-ia merged 1 commit from feat/INFRA-69300-autorizacao-dispatch into develop 2026-10-10 17:14:01 -03:00
Owner

Release único: input autorizacao no chamador e guard de deploy ligado no reusável [INFRA-69300]

Decisão do operador (10/10, por seleção): opção 1 da INFRA-69300. Fecha o item 1 da INFRA-69282.

Template release-chamador.yml: novo input autorizacao (string, opcional), repassado ao reusável.

  • A cópia anterior vira templates/release-chamador.anterior.yml, byte a byte, e passa com aviso no conferir-ci-identico até 24/10 (mesma janela do #101).
  • sha256 novo 11674c70…, anterior 939a7477….

Reusável release.yml: passo "guard: autorização do deploy (INFRA-68070)", depois do Infisical e antes de qualquer SSH.

  • Falha fechada; valores só por env:.
  • Em dispatch, a frase aceita é uma destas:
    • release-aprovado PR #N, do watcher: PR em main mergeado há até 24 h, tag = merge commit, aprovado por humano;
    • confirma-deploy <repo-minúsculo> vX.Y.Z AAAA-MM-DD, do operador, com a data de hoje ou de ontem.
  • Em push de tag: a tag tem de ser o merge commit de um PR aprovado em main.

Watcher (scripts/verify-live.py watch): acha o PR pelo descobrir_pr do guard e dispara com a frase. Sem PR, dispara sem a frase com ::warning::, e o guard reprova. Não há bypass.

Testes:

  • test_autorizacao_dispatch.py (18 testes): dispatch sem frase reprova, com frase válida passa, ordem guard → SSH, e transição até 24/10 e reprovação em 25/10;
  • TestWatchAutorizacao (4 testes);
  • release 429 (3 erros só nos SIGTERM de test_b3_resto, pré-existentes por load), deploy-guard 82, ci-unico 125, ci-config 150, soberania 26, if-em-caller 18, reusable-publico 13.

Riscos (nenhum produto adotou o release único ainda):

  • Produto ainda na cópia anterior: o dispatch reprova até copiar o template novo. O push de tag continua passando.
  • Push de tag passa a exigir PR em main aprovado e mergeado há até 24 h. Redeploy de tag antiga precisa da frase manual.
  • Não verificado em runner real: se o RELEASE_TOKEN lê PR, reviews e comments, e como o Forgejo trata um input extra no dispatch para quem está na cópia anterior. A primeira adoção (DANI, DAIS-68092) é a prova.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2

## Release único: input `autorizacao` no chamador e guard de deploy ligado no reusável [INFRA-69300] Decisão do operador (10/10, por seleção): opção 1 da INFRA-69300. Fecha o item 1 da INFRA-69282. **Template `release-chamador.yml`:** novo input `autorizacao` (string, opcional), repassado ao reusável. - A cópia anterior vira `templates/release-chamador.anterior.yml`, byte a byte, e passa com aviso no `conferir-ci-identico` até **24/10** (mesma janela do #101). - sha256 novo `11674c70…`, anterior `939a7477…`. **Reusável `release.yml`:** passo "guard: autorização do deploy (INFRA-68070)", depois do Infisical e **antes de qualquer SSH**. - Falha fechada; valores só por `env:`. - Em dispatch, a frase aceita é uma destas: - `release-aprovado PR #N`, do watcher: PR em main mergeado há até 24 h, tag = merge commit, aprovado por humano; - `confirma-deploy <repo-minúsculo> vX.Y.Z AAAA-MM-DD`, do operador, com a data de hoje ou de ontem. - Em push de tag: a tag tem de ser o merge commit de um PR aprovado em main. **Watcher (`scripts/verify-live.py watch`):** acha o PR pelo `descobrir_pr` do guard e dispara com a frase. Sem PR, dispara sem a frase com `::warning::`, e o guard reprova. Não há bypass. **Testes:** - `test_autorizacao_dispatch.py` (18 testes): dispatch sem frase reprova, com frase válida passa, ordem guard → SSH, e transição até 24/10 e reprovação em 25/10; - `TestWatchAutorizacao` (4 testes); - release 429 (3 erros só nos SIGTERM de `test_b3_resto`, pré-existentes por load), deploy-guard 82, ci-unico 125, ci-config 150, soberania 26, if-em-caller 18, reusable-publico 13. **Riscos (nenhum produto adotou o release único ainda):** - Produto ainda na cópia anterior: o dispatch reprova até copiar o template novo. O push de tag continua passando. - Push de tag passa a exigir PR em main aprovado e mergeado há até 24 h. Redeploy de tag antiga precisa da frase manual. - Não verificado em runner real: se o `RELEASE_TOKEN` lê PR, reviews e comments, e como o Forgejo trata um input extra no dispatch para quem está na cópia anterior. A primeira adoção (DANI, DAIS-68092) é a prova. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
feat(release): input autorizacao no chamador e guard de deploy ligado no reusável [INFRA-69300]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 5m10s
6103642e5d
O release.yml reusável chama o conferir_autorizacao_deploy.py (INFRA-68070) no job deploy,
depois do Infisical e antes de qualquer SSH. O release-chamador declara e repassa o input
autorizacao; release-chamador.anterior.yml (cópia de antes, byte a byte) passa com aviso
até 24/10. O tag-watcher dispara com 'release-aprovado PR #N' achado pelo descobrir_pr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
tmf-ia merged commit a33d61e1c2 into develop 2026-10-10 17:14:01 -03:00
Sign in to join this conversation.
No reviewers
No labels
seguranca
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
TMF/ci-shared!107
No description provided.