feat(release): environment + environments{} sem default + guard de host por ambiente (B2) #31

Merged
tarcisio merged 1 commit from feat/INFRA-B2-environments into main 2026-10-01 14:01:49 -03:00
Owner

O release.yml ganha o input environment (prod|qa|dev, padrão prod) e o ci-config ganha environments{}.

Contrato

  • environments.<amb>: expected_host e cluster obrigatórios, sem default; type padrao|eks (eks não é deployado por este reusável). Sem o bloco só vale prod (comportamento atual).
  • Ambiente não declarado, qa/dev com expected_host: tmfprod e type: eks falham na resolução de config, no job tag (sem SSH; o deploy depende dele).
  • scripts/guard-ambiente.sh: aborta se o host de qa/dev responder tmfprod, ou se o hostname real diferir do esperado.
  • O ambiente do Infisical e o commit status seguem o environment: um deploy de qa publica deploy/qa, nunca deploy/production (que o watcher lê).
  • O chamador (templates/release-chamador.yml) repassa environment; o push de tag continua sendo prod. O parser do ci-config aceita um nível de mapa dentro de mapa.

Prova: suíte tests/release 225/225 na tmf-ci-python:3.12 (27 testes novos em test_environments.py). Os dois aceites negativos da issue têm teste: environment=dev sem environments.dev falha antes do SSH; qa cujo host responde tmfprod é abortado. Mutação em 6 regras (guard, ambiente não declarado, expected_host sem default, contexto de qa, ambiente do Infisical, type) foi pega pelos testes.

Não provado: nada rodou no Forgejo (workflow_dispatch com environment, repasse via workflow_call) — é o escopo do A4. Não sei se há ambiente dev no Infisical (o schema só lista prod/qa em infisical_env). verify-live/watcher ainda leem só deploy/production (B5/B6). A cópia idêntica do chamador nos produtos diverge até a propagação; nenhum gatilho novo foi ligado.
Modelo: ORG engenharia/decisoes/0014-modelo-unico-de-ambientes-e-operacao.md

🤖 Generated with Claude Code

https://claude.ai/code/session_01G2e3V17tRc4mAZ4ea1XX1e

O `release.yml` ganha o input `environment` (prod|qa|dev, padrão prod) e o ci-config ganha `environments{}`. **Contrato** - `environments.<amb>`: `expected_host` e `cluster` obrigatórios, **sem default**; `type` padrao|eks (eks não é deployado por este reusável). Sem o bloco só vale prod (comportamento atual). - Ambiente não declarado, qa/dev com `expected_host: tmfprod` e `type: eks` falham na resolução de config, no job `tag` (sem SSH; o `deploy` depende dele). - `scripts/guard-ambiente.sh`: aborta se o host de qa/dev responder `tmfprod`, ou se o hostname real diferir do esperado. - O ambiente do Infisical e o commit status seguem o `environment`: um deploy de qa publica `deploy/qa`, nunca `deploy/production` (que o watcher lê). - O chamador (`templates/release-chamador.yml`) repassa `environment`; o push de tag continua sendo prod. O parser do ci-config aceita um nível de mapa dentro de mapa. **Prova:** suíte `tests/release` 225/225 na tmf-ci-python:3.12 (27 testes novos em `test_environments.py`). Os dois aceites negativos da issue têm teste: `environment=dev` sem `environments.dev` falha antes do SSH; qa cujo host responde `tmfprod` é abortado. Mutação em 6 regras (guard, ambiente não declarado, expected_host sem default, contexto de qa, ambiente do Infisical, type) foi pega pelos testes. **Não provado:** nada rodou no Forgejo (`workflow_dispatch` com `environment`, repasse via `workflow_call`) — é o escopo do A4. Não sei se há ambiente `dev` no Infisical (o schema só lista prod/qa em `infisical_env`). `verify-live`/watcher ainda leem só `deploy/production` (B5/B6). A cópia idêntica do chamador nos produtos diverge até a propagação; nenhum gatilho novo foi ligado. Modelo: ORG engenharia/decisoes/0014-modelo-unico-de-ambientes-e-operacao.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01G2e3V17tRc4mAZ4ea1XX1e
feat(release): environment + environments{} sem default + guard de host por ambiente (B2)
Some checks failed
PR checks (ci-shared) / testes (pull_request) Failing after 1m33s
d3328c15ea
release.yml ganha o input environment (prod|qa|dev, padrão prod). O ci-config ganha
environments{} (expected_host e cluster obrigatórios por ambiente, sem default; type
padrao|eks); o parser aceita um nível de mapa dentro de mapa. Ambiente não declarado,
qa/dev apontando para tmfprod e type eks falham na resolução (job tag), antes de qualquer
SSH. guard-ambiente.sh aborta se o host de qa/dev responder tmfprod. O Infisical e o
commit status seguem o ambiente (deploy/qa nunca escreve deploy/production).

209 testes (27 novos); mutação nas 6 regras pega pelos testes.
Empilhado sobre o PR #29. Modelo: ORG engenharia/decisoes/0014-modelo-unico-de-ambientes-e-operacao.md

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G2e3V17tRc4mAZ4ea1XX1e
tarcisio deleted branch feat/INFRA-B2-environments 2026-10-01 14:01:49 -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!31
No description provided.