release: ci-shared v0.2.1 (develop → main) — guard de autorização do deploy + blue-green + pin de actions #110

Merged
tarcisio merged 17 commits from develop into main 2026-10-11 10:22:46 -03:00
Owner

Release ci-shared v0.2.1 (develop → main)

⛔ No merge, DESMARQUE "apagar branch após merge". Não apagar a develop. A source deste PR é o trunk (INFRA-68957).

Os produtos consomem os reusáveis por @main; só depois deste merge o que está abaixo chega à frota.

Entra

  • #107 (INFRA-69300, segurança): input autorizacao no release-chamador.yml e guard de autorização do deploy (INFRA-68070) ligado no release.yml, antes de qualquer SSH.
    • Frases aceitas em dispatch: release-aprovado PR #N (watcher) ou confirma-deploy <repo> vX.Y.Z AAAA-MM-DD (operador).
    • A cópia anterior do chamador passa com aviso até 24/10.
  • #105 (INFRA-69282): health no slot ativo do blue-green (deploy_blue_green_upstream_file) e lista de checks públicos com código aceito (deploy_checks_publicos). Destrava o DANI (DAIS-68092).
  • #106 (INFRA-57651): os 38 uses: de action externa pinados por SHA dos mirrors internos.
  • #108 (INFRA-69243): build-python-ci publica só a 3.12, sem a :latest.
  • #103: o mesmo commit do hotfix #101 (transição dos chamadores), já na main.
  • #109: VERSION 0.2.1 + CHANGELOG.

Riscos

  • Nenhum produto adotou o release único. A primeira adoção (DANI) prova em runner real o guard de autorização: o RELEASE_TOKEN lendo PR e reviews, e o input extra no dispatch.
  • Push de tag passa a exigir PR aprovado e mergeado em main nas últimas 24 h. Redeploy de tag antiga precisa da frase manual.

Depois do merge (operador)

  • Tag v0.2.1 no merge commit da main. A tag v0.2.0 também está pendente: a main recebeu o #100 sem tag.
  • Conferir que a develop e a default_branch continuam de pé (pr.py conferir-trunk).

Aberto pela sessão e parado aqui: o merge e a tag ficam com o operador.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2

## Release ci-shared v0.2.1 (develop → main) > ⛔ **No merge, DESMARQUE "apagar branch após merge". Não apagar a develop.** A source deste PR é o trunk (INFRA-68957). Os produtos consomem os reusáveis por `@main`; só depois deste merge o que está abaixo chega à frota. ### Entra - **#107** (INFRA-69300, segurança): input `autorizacao` no `release-chamador.yml` e guard de autorização do deploy (INFRA-68070) ligado no `release.yml`, **antes de qualquer SSH**. - Frases aceitas em dispatch: `release-aprovado PR #N` (watcher) ou `confirma-deploy <repo> vX.Y.Z AAAA-MM-DD` (operador). - A cópia anterior do chamador passa com aviso até **24/10**. - **#105** (INFRA-69282): health no slot ativo do blue-green (`deploy_blue_green_upstream_file`) e lista de checks públicos com código aceito (`deploy_checks_publicos`). Destrava o DANI (DAIS-68092). - **#106** (INFRA-57651): os 38 `uses:` de action externa pinados por SHA dos mirrors internos. - **#108** (INFRA-69243): `build-python-ci` publica só a 3.12, sem a `:latest`. - **#103**: o mesmo commit do hotfix #101 (transição dos chamadores), já na main. - **#109**: VERSION 0.2.1 + CHANGELOG. ### Riscos - Nenhum produto adotou o release único. A primeira adoção (DANI) prova em runner real o guard de autorização: o `RELEASE_TOKEN` lendo PR e reviews, e o input extra no dispatch. - Push de tag passa a exigir PR aprovado e mergeado em main nas últimas 24 h. Redeploy de tag antiga precisa da frase manual. ### Depois do merge (operador) - Tag `v0.2.1` no merge commit da main. A tag `v0.2.0` também está pendente: a main recebeu o #100 sem tag. - Conferir que a develop e a default_branch continuam de pé (`pr.py conferir-trunk`). Aberto pela sessão e parado aqui: o merge e a tag ficam com o operador. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
Os 38 uses: de action externa saem da tag flutuante para o SHA de commit
completo, com a versão no comentário (resolvido por git ls-remote nos
mirrors internos): checkout v4 -> v4.4.0, cache v4 -> v4.3.0,
upload-artifact v3 -> v3.2.1. Teste novo tests/pin-actions/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
- deploy_blue_green_upstream_file (padrão vazio): o deploy-remoto.sh roda o health no slot que o
  router serve (mesmas regex do blue-green-router.sh ativo + rótulo br.com.tmf.blue-green-slot),
  antes do build (PREV_TAG, idempotência) e depois dele; vazio = deploy_container fixo.
  Com deploy_gate: true o arquivo vem do conf do tmf-deploy-gate (UPSTREAM_FILE=, opcional).
- deploy_checks_publicos (padrão []): "<url>" (2xx) ou "<url>: <código>[,<código>]" no
  verify-publico.sh, depois do health de deploy_public_url, que não muda.
- A frase de dispatch (INFRA-68070) fica de fora: o release-chamador.yml não tem o input
  autorizacao e sem ele todo dispatch reprovaria.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
merge: origin/develop em feat/INFRA-69282 (traz o hotfix de transição #103) [INFRA-69282]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m7s
d354d9689c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
merge: origin/develop em chore/INFRA-57651 (CHANGELOG com as duas entradas) [INFRA-57651]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m16s
ef36eb409c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: 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
Entram 69300, 69282, 57651 e o hotfix de transição (68076). As entradas de 69215, 69129 e
68093, que foram para a main no v0.2.0, saem de [Não lançado] para [0.2.0].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
merge: origin/main em release/v0.2.1 (traz o merge commit do hotfix #101, sem mudança de conteúdo)
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 5m27s
834bf2c5e5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
fix(ci-images): python-ci do ci-shared não publica mais a 3.11 nem a :latest [INFRA-69243]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m24s
bef56aed3a
A Python 3.11 foi aposentada (tmf_imagens #56, em main desde 4b99f53) e a
tmf-ci-python:latest é publicada só pelo TMF/tmf_imagens, onde aponta para a
3.12 (sha256:6056aef3…). O job build-python-ci daqui ainda fazia
`for PY in 3.11 3.12` + `docker tag …:3.11 …:latest`: um dispatch "all" ou um
push no Dockerfile republicaria a 3.11 (cujas tags vão ser apagadas do registry)
e sobrescreveria a :latest com a cópia atrasada deste repo.

- loop só com a 3.12; sai o push da :latest; ARG PYTHON_VERSION padrão 3.12.
- tests/ci-unico/test_ci_python_sem_311.py: reprova 3.11 no loop e :latest no
  job; controle com o passo antigo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axu8pSLigGKWaQj1sASKC
merge: origin/develop em release/v0.2.1 (traz o #108) + CHANGELOG da INFRA-69243
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m37s
770089c0d1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
Merge pull request 'chore(release): v0.2.1 — bump + CHANGELOG' (#109) from release/v0.2.1 into develop
All checks were successful
PR checks (ci-shared) / testes (push) Successful in 3m59s
PR checks (ci-shared) / testes (pull_request) Successful in 10m5s
e098c49eb3
chore(graft): /graft/ no .gitignore e .ignore versionado (INFRA-69342)
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m50s
7223a8736a
Regra da frota (tmf_ia #80, agent-tooling.md §1): o cache do graft fica fora do git
e os cards continuam visíveis ao ripgrep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017QrAM1chSgVpSwDrKJVLVn
Merge pull request 'chore(graft): /graft/ no .gitignore e .ignore versionado (INFRA-69342)' (#111) from chore/INFRA-69342-graft-versionado into develop
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m31s
PR checks (ci-shared) / testes (push) Successful in 4m57s
3dd811a72f
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!110
No description provided.