Migrar o repo de infraestrutura inteiro para ward
TLDR: Terminar a migração SOPS → ward neste repo — mover os três últimos stacks (
shared/github,platform/network,platform/registry) e os secrets do arquivo SOPS para o ward, para que o CI de todo stack rodeward exece o SOPS seja removido por completo.
Contexto
Os secrets estavam divididos entre dois sistemas:
| Sistema | Stacks |
|---|---|
| ward | kubernetes e messagebroker — o CI instala o ward e roda ward exec -- terraform …. Vaults em .ward/vaults/{infrastructure,bootstrap} |
| SOPS | shared/github, platform/network, platform/registry — o CI decripta secrets/infra.enc.yml com SOPS_AGE_KEY e joga os valores em TF_VAR_ com awk |
O sistema duplo é a raiz de atrito recorrente: job com ward num stack de SOPS travava, e secret ficava duplicado em dois lugares. A migração do messagebroker provou o padrão ward ponta a ponta.
Boa notícia da inspeção: os três stacks restantes já usam nome de variável minúsculo (compatível com ward), e o vault infrastructure/core já tinha a maior parte das chaves (do_token, github_token, region, platform_network_*). Faltavam só docr_token e platform_registry_name/region/tier.
Objetivos
- Os jobs de
github,platform-networkeplatform-registryrodando viaward exec. - Todos os
TF_VAR_que esses stacks precisam existindo no vaultinfrastructure. secrets/infra.enc.yml,.sops.yamle os passos de instalação/decriptação de SOPS removidos.- Nenhum stack referenciando SOPS em
.github/workflows/.
Fora de escopo
- Apagar o GitHub Secret
SOPS_AGE_KEYem si — isso um admin faz separadamente. - Dividir o vault por ambiente. Este repo é de ambiente único; um vault
infrastructuresó.
Mudanças
Vault — .ward/vaults/infrastructure/
Adicionar as chaves que faltavam via ward edit: TF_VAR_docr_token, TF_VAR_platform_registry_name, TF_VAR_platform_registry_region, TF_VAR_platform_registry_tier. Os valores atuais são retirados de secrets/infra.enc.yml antes de apagá-lo.
.github/workflows/infra.yml + infra-pr.yml
Reescrever os jobs github-plan/apply, platform-network-plan/apply e platform-registry-plan/apply no padrão ward (checkout do commons → install-ward.sh → ward exec -- terraform …), igual aos jobs de kubernetes/messagebroker. Derrubar os passos Install sops e o carregamento de secret por age/awk, mais a env SOPS_AGE_KEY. Adicionar job de plan em infra-pr.yml onde faltava.
Remover o SOPS
Apagar secrets/infra.enc.yml, .sops.yaml e o diretório secrets/ se ficar vazio.
Como verificar
- Um PR que toca
src/shared/github/**,src/platform/network/**ousrc/platform/registry/**roda um job de plan baseado em ward que completa — sem SOPS, sem travar. grep -rn sops .github/→ nenhum resultado.- Depois do merge, os jobs de apply dos três stacks fecham verde.
terraform planem cada um não mostra diff inesperado — mesmos valores, agora vindos do ward.
Notas de execução
- Não reintroduzir nome de variável em MAIÚSCULA: esses stacks já são minúsculos e o ward mapeia
TF_VAR_<name>direto. - Usar os jobs do
messagebrokercomo template exato — são a implementação ward de referência neste repo. - Migrar o valor de cada secret para o ward antes de apagar o arquivo SOPS, verificando que cada
planresolve. - Atenção: um override de ward substitui o arquivo inteiro, não faz merge por chave.
Documentação
CLAUDE.md— o repo inteiro usa ward; SOPS removido.- Guia do vault ward — inventário de vault e fluxo de edição.
- Stack github precisa de token com admin:org — o 403 que apareceu logo depois desta migração e não era regressão dela.