feat(release): deploy de produção fecha as issues do release (approved → done) [INFRA-69129] #95
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/INFRA-69129-done-no-deploy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
O que
O deploy de produção por tag, quando termina com sucesso, leva a
doneas issues do Hub que estavam emapprovede entraram no release. São três passos novos no jobdeploydorelease.ymle um script novo,scripts/hub_done_no_deploy.py.Por quê
Nenhum workflow da frota levava issue a
done. Ohub-issue-sync.ymlpara emapprovedno merge emdevelope, por desenho, não faz nada no merge emmain("o deploy leva a done"), mas nenhum deploy fazia essa parte. Hoje há 224 issues paradas emapproved. Decisão do operador: "o certo era ao fechar o release ele fechar".Desenho
if:semalways()), e só comenvironment == prodedeploy_hub_done == true.[PROJ-N]dos commitsgit log <tag anterior>..<tag>, lidas só do assunto. No merge do Forgejo o assunto já traz a branch (... from feat/KEY-slug). O corpo do commit nunca é lido, e a regex é a mesma dohub-issue-sync(um teste confere). A tag anterior é aPREV_TAGdo deploy, se for uma tag estrita ancestral da atual. Se não for, vale a maior tagvX.Y.Zancestral. No primeiro release entra o histórico todo, com teto de 300 chaves.origin/develope não está na tag. Commits equivalentes por patch-id não contam (git log --cherry-pick --right-only <tag>...origin/develop), então um hotfix aplicado com cherry-pick conta como "na tag". Limite conhecido: dois commits vazios têm o mesmo patch-id, então um commit vazio em develop não é visto como "fora da tag".approvedparadone, pela API v2 (GET /api/v2/issues/{key}ePOST .../transition, como o hub-issue-sync). Qualquer outro status fica como está e a issue é pulada, com o motivo. Se o Hub recusar (por exemplo, por filha aberta), a issue também é pulada, com odetailque o Hub devolveu.$GITHUB_STEP_SUMMARY, com as fechadas, as puladas e o motivo de cada uma.continue-on-error. O script sai sempre com 0 e transforma qualquer falha em::warning::. Depois de 3 falhas de rede seguidas, ele para de chamar o Hub.hub-issue-sync:HUB_TOKENvem do Infisical do produto (infisical_project,infisical_env(vazio viraprod),infisical_path), pela actioninfisical-secrets. O token só passa por$GITHUB_ENV, nunca aparece como${{ }}emrun:e nunca é impresso. O reusável continua sem blocosecrets:(INFRA-64944).release.ymlem vez de um reusável novo: o jobdeployjá tem o que o fechamento precisa (resultado do deploy,TAG/TAG_SHA,prev_tag, o ci-shared na mesma ref). Fazendo como passo, o produto não precisa adotar nada.deploy_hub_done, ligada por padrão: o operador quer que feche, e ligar por padrão é seguro porque uma falha do Hub nunca derruba o deploy. Para desligar num produto, bastadeploy_hub_done: false.Validação
tests/hub-done-no-deploy/(24 testes) monta um repo git temporário com tags e merges--no-ffde verdade e usa um Hub simulado. Os casos cobertos:reviewedone, que são pulados sem regredir;$GITHUB_STEP_SUMMARY;continue-on-error, nenhum${{com segredo dentro derun:;ci_config release.generate-docs, 2 testes falham só nesta máquina porque falta o bináriopython; com um alias depythonparapython3, a suíte passa inteira.Não verificado: nenhum deploy real ainda. Para adotar, o produto que chama o reusável precisa ter
HUB_TOKENno Infisical. Este PR não fecha as issues paradas emapprovedde releases anteriores, só as do intervalo de cada deploy.🤖 Generated with Claude Code
https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
Nada na frota levava issue a done: o hub-issue-sync para em approved no merge em develop e não mexe no merge em main ("o deploy leva a done"), mas nenhum deploy fazia isso. - release.yml (job deploy): três passos depois do deploy por tag com sucesso, só em prod, atrás da chave nova deploy_hub_done do ci-config (padrão true), todos com continue-on-error — falha do Hub vira :⚠️:, nunca derruba o deploy. HUB_TOKEN do Infisical do produto (infisical_*), mesmo mecanismo do hub-issue-sync. - scripts/hub_done_no_deploy.py: chaves do assunto dos commits <tag anterior>..<tag> (branch do merge pelo assunto, corpo nunca, mesma regex do hub-issue-sync); pula chave com commit em origin/develop fora da tag (git log --cherry-pick --right-only); só approved → done (API v2); recusa do Hub (filha aberta) = pulada; comentário com tag, SHA e run; resumo no GITHUB_STEP_SUMMARY. - tests/hub-done-no-deploy: repo git temporário com tags, Hub falso e contrato do yaml. - docs (guia de adoção, scripts, workflows reusáveis), exemplo do ci-config e CHANGELOG. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2Substituído pelo PR da branch feat/INFRA-69129-done-no-deploy-v2 (Lineu, depois de revisão). Ajustes: só move chaves dos prefixos do produto (hub_done_prefixos), não move epic/initiative/story-container, pula Revert, considera commits em origin/epic/*, modo ensaio no 1º deploy e com mais de 50 candidatas, e documenta que a trava HUB_STATUS_HUMANO não se aplica (decisão do operador de 09/10). Política autorizada pelo operador na sessão ORG em 09/10.
Pull request closed