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 rode ward exec e 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-network e platform-registry rodando via ward exec.
  • Todos os TF_VAR_ que esses stacks precisam existindo no vault infrastructure.
  • secrets/infra.enc.yml, .sops.yaml e 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_KEY em si — isso um admin faz separadamente.
  • Dividir o vault por ambiente. Este repo é de ambiente único; um vault infrastructure só.

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/** ou src/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 plan em 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 messagebroker como 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 plan resolve.
  • Atenção: um override de ward substitui o arquivo inteiro, não faz merge por chave.

Documentação