feat(deploy): guard de autorização do deploy de produção — versão canônica [INFRA-68070] #80

Closed
tmf-ia wants to merge 0 commits from feat/INFRA-68070-guard-deploy-global into develop
Owner

INFRA-68070: versão global do guard de deploy de produção

A versão canônica de scripts/ci/conferir_autorizacao_deploy.py vem do script do Hub (#3321) e do DANI (#916), com as 4 regras mais estritas decididas pelo Lineu:

  1. A data da frase é avaliada no fuso America/Sao_Paulo e vale só hoje e ontem; data futura reprova. Sem tzdata, cai em UTC-3 fixo, nunca em UTC.
  2. Espaço nas pontas continua aceito (strip).
  3. Caractere de controle (categoria Unicode C*, U+2028/2029) ou :: reprova antes de qualquer eco. O log só mostra a frase depois de validada, numa linha.
  4. Push sem frase só com tag de versão (refs/tags/v); qualquer outro push reprova.

Também: o RE_PR casa (#N) e (!N), e o F401 foi resolvido. A semântica do release não muda: API, 2º pai do merge, review, merged_by, AUTORIZO hotfix e DEPLOY_BOTS.

Prova:

  • pytest tests -q: 843 passed.
  • tests/deploy-guard: 61 passed.
  • Os 6 xfail estritos do DANI passam.
  • Controle negativo: a suíte nova contra o script do DANI dá 46 falhas.

Adoção nos produtos (sessões donas): trocar a cópia local por este arquivo e ajustar 2 testes locais: o (#884) → None e os xfail estritos, que passam a XPASS.

🤖 Generated with Claude Code

https://claude.ai/code/session_017QrAM1chSgVpSwDrKJVLVn

## INFRA-68070: versão global do guard de deploy de produção A versão canônica de `scripts/ci/conferir_autorizacao_deploy.py` vem do script do Hub (#3321) e do DANI (#916), com as 4 regras mais estritas decididas pelo Lineu: 1. A data da frase é avaliada no fuso America/Sao_Paulo e vale **só hoje e ontem**; data futura reprova. Sem tzdata, cai em UTC-3 fixo, nunca em UTC. 2. Espaço nas pontas continua aceito (strip). 3. Caractere de controle (categoria Unicode C*, U+2028/2029) ou `::` **reprova antes de qualquer eco**. O log só mostra a frase depois de validada, numa linha. 4. Push sem frase **só com tag de versão** (`refs/tags/v`); qualquer outro push reprova. Também: o `RE_PR` casa `(#N)` e `(!N)`, e o F401 foi resolvido. A semântica do release não muda: API, 2º pai do merge, review, merged_by, `AUTORIZO hotfix` e `DEPLOY_BOTS`. **Prova:** - `pytest tests -q`: 843 passed. - `tests/deploy-guard`: 61 passed. - Os 6 xfail estritos do DANI passam. - Controle negativo: a suíte nova contra o script do DANI dá 46 falhas. **Adoção nos produtos** (sessões donas): trocar a cópia local por este arquivo e ajustar 2 testes locais: o `(#884)` → `None` e os xfail estritos, que passam a XPASS. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017QrAM1chSgVpSwDrKJVLVn
feat(ci): guard global de autorização do deploy de produção [INFRA-68070]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m55s
9e029ef4af
scripts/ci/conferir_autorizacao_deploy.py vira canônico no ci-shared (origem: Hub
PR #3321 + DANI ffa630037b), mesma interface (conferir, descobrir-pr). Regras novas:
- data da frase no fuso America/Sao_Paulo; vale só hoje e ontem (amanhã reprova);
- strip() nas pontas continua aceito;
- quebra de linha, caractere de controle ou '::' na frase/tag reprova antes de
  qualquer eco; a frase só vai ao log depois de validada, numa linha;
- push só passa sem frase se o ref for refs/tags/v*;
- RE_PR casa (#N) e (!N).

tests/deploy-guard: 61 testes (unittest), incluindo os 6 xfail estritos do DANI
como regra decidida, com controle negativo contra o script antigo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017QrAM1chSgVpSwDrKJVLVn
Author
Owner

Fechado sem merge pelo Lineu: a revisão de segurança achou formas de pular a autorização (push de tag sem checagem de aprovação, AUTORIZO hotfix aceito de qualquer humano, ref de dispatch vinda de input, review não oficial). A correção vai num PR novo, numa branch nova.

Fechado sem merge pelo Lineu: a revisão de segurança achou formas de pular a autorização (push de tag sem checagem de aprovação, AUTORIZO hotfix aceito de qualquer humano, ref de dispatch vinda de input, review não oficial). A correção vai num PR novo, numa branch nova.
tmf-ia closed this pull request 2026-10-09 14:13:40 -03:00
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m55s

Pull request closed

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!80
No description provided.