feat(release): deploy por tag estrita com garantias, tag-watcher e verify-live [INFRA-67970] #29
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/INFRA-67970-release-deploy-inputs"
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 quê
Reescreve o release único do
ci-sharedpara o gatilho por tag estrita, com garantias de que o que está no ar é a tag (decisões do operador, 01/10/2026). Cobre o piloto DANI (v3.2.0 espera este pipeline) e os demais produtos do deploy padrão (hosttmf-prod); TMF7/TMF9 (EKS) ficam fora.vX.Y.Zestrita +workflow_dispatch(version)de reserva. A tag nasce fora do workflow (token de workflow não dispara workflow no Forgejo — TH-54635). Todo deploy sai demain; hotfix = PR paramain+ nova tag.origin/main, bate com o SHA do evento (tag movida = falha),VERSIONdo commit == tag; no host,git describe --exact-match== tag.APP_VERSION(tag semv) eAPP_GIT_SHAexportados aodeploy_script.deploy_verify_version: true,version== tag egit_sha== sha, senão rollback automático + job vermelho.deploy/productionno sha da tag (sempre, sucesso ou falha) + marcador.deployedno host.flockem/var/lock/deploy-<hostname>.lock(aconcurrencydo Forgejo é por repositório).verify-live.ymlagendado — tag-watcher (disparadispatch(version)da tag que ficou sem status nem run, idempotente) e verify-live (compara o ar × último statussuccess).deploy_timeout_minutes(10–240), backmergemain→develop(desligado por padrão).deploy-remoto.shaceitavaROLLBACK_SCRIPT/DEPLOY_SCRIPTcom caminho absoluto (/etc/passwdseria executado combash).⚠ Muda comportamento
rollback_scriptpassa a ser chamado SEM argumentos, comPREV_TAGno ambiente. Orollback.shdo DANI espera--yes <tag>: precisa lerPREV_TAGdo ambiente.RELEASE_TOKENé OBRIGATÓRIO no Infisical (deploy_infisical_project,prod, pastadeploy_infisical_path): publica o status e permite o watcher disparar workflow. Sem ele o deploy falha fechado antes de tocar no host. O projeto do DANI tem 0 segredos emprod(tabela do ORG, 25/09): o operador precisa criarDEPLOY_HOST,DEPLOY_USER,SSH_PRIVATE_KEY,SSH_KNOWN_HOSTS,RELEASE_TOKEN(eDEPLOY_PORT, opcional) antes do 1º deploy.templates/release-chamador.ymlmudou (push de tag +dispatch(version); inputtagvirouversion; sai o gatilho de push emmain). Novotemplates/verify-live-chamador.yml. O produto copia os dois sem editar (scripts/conferir-ci-identico.shreprova cópia editada) e deve apagar o deploy/auto-tag antigos no mesmo PR.deploy_verify_versioné opt-in (padrãofalse): enquanto o produto não expõeversion+git_shano/health, confere só 2xx e o status sai "versão não verificada".ci-config:deploy_verify_version,deploy_version_field,deploy_sha_field,deploy_image_repo,deploy_infisical_project(padrão =infisical_project; apontar para INFRA compartilha a chave SSH — decisão do operador),deploy_tag_grace_minutes,deploy_lock_timeout_seconds,deploy_timeout_minutes,deploy_backmerge(_para).Como testar
Verificado (imagem real
tmf-ci-python:3.12, linux/amd64, depois do rebase sobremaincom o #28): 301 testes, rc=0 —release168,ci-config67,ci-unico39,hub-issue-sync18,infisical-secrets9. Os testes usamdocker/ssh/Forgejo falsos e um clone git real; o timeout foi provado comsshfalso (estouro = rc 124).Mutações reprovadas pelos testes certos: sem o teste de ancestral de
main; sem a comparação de versão; watcher filtrando porevent; watcher ignorando status existente; data do commit em vez da data da tag.NÃO provado: nada rodou no act_runner
release.ymlnovo, oschedule, oworkflow_dispatche oruns-onnão foram executados num runner real;deploy_scriptde cada produto precisa propagarAPP_VERSION/APP_GIT_SHA(não verificado);RELEASE_TOKENcom permissão real (write:repository) não foi exercitado;runs-on: dockerficou fixo: expressão emruns-onnão é provada e, se falhar, quebraria todo deploy.Plano de prova em QA (pelo DANI)
prod:/deploydo projeto do DANI e confere (secret.sh --doctor).ci-confige orollback.sh(PREV_TAG), e roda primeiro em QA (deploy_verify_version: false).deploy/productionpublicado, marcador.deployedno host.verify-livedeve disparar odispatch.deploy_verify_version: trueno QA, provocar divergência (versão errada) e ver rollback + vermelho.v3.2.0em produção.Fora de escopo (fatias seguintes)
Ambientes
prod|qa|devparametrizados +restore-db.yml(fatia 3) ecapture-releases(fatia 4).Refs: INFRA-67970
🤖 Generated with Claude Code
https://claude.ai/code/session_01G2e3V17tRc4mAZ4ea1XX1e