Reestruturação do repo de infraestrutura

TLDR: Realinhar a estrutura de diretórios deste repo com o padrão dos outros projetos WeHive, consolidar os secrets num único arquivo criptografado e dar cobertura de CI aos stacks de plataforma.

Contexto

O repo cresceu de forma orgânica e divergiu dos padrões usados nos demais projetos: o terraform de plataforma em src/platform/, os stacks compartilhados com um nível stacks/ desnecessário, makefiles e scripts na raiz em vez de dentro de .project/, secrets passados como GitHub Secrets individuais, e nenhuma cobertura de CI para os stacks de plataforma.

Objetivos

  • Alinhar a estrutura de diretórios com o resto da organização.
  • Consolidar os secrets num único arquivo criptografado.
  • Mover makefiles e scripts para dentro de .project/.
  • Renomear k8s/rbac/config.yml → config/access.yml e remover o obsoleto config/projects.yaml.
  • Unir kubernetes + kubernetes/rbac num único terraform.
  • Cobertura de CI para os stacks de plataforma.

Fora de escopo

  • src/platform/ e src/modules/ ficam como estão — já estavam limpos.
  • Apagar as chaves antigas de state no bucket: elas são mantidas até todos os stacks serem verificados.

Mudanças

1. Secrets consolidados

Um único arquivo criptografado (secrets/infra.enc.yml) com do_token, dd_api_key, cloudflare_api_token, cloudflare_zone_id, domain, github_token, docr_token, shared_messagebroker_admin_password, shared_messagebroker_subdomain, droplet_ssh_keys, kubernetes_version, terraform_backend_access_key e terraform_backend_secret_key. Sem separação staging/production — este repo não tem workspaces.

2. Reestruturação de diretório

Antes Depois
src/stacks/shared/kubernetes/terraform/ + .../kubernetes/rbac/terraform/ src/shared/kubernetes/terraform/ (unificados)
src/stacks/shared/messagebroker/terraform/ src/shared/messagebroker/terraform/
src/stacks/shared/github/terraform/ src/shared/github/terraform/
k8s/rbac/config.yml config/access.yml
config/projects.yaml removido
makefiles/ .project/make/
bin/stacks/, bin/platform/ .project/shell/tasks/stacks/, .project/shell/tasks/platform/
bin/tf, bin/bootstrap .project/shell/bin/

3. Migração de state

As chaves no bucket são atualizadas para os caminhos novos via terraform init -migrate-state, que copia o state da chave antiga para a nova automaticamente.

Chave antiga Chave nova
stacks/shared/kubernetes/terraform.tfstate shared/kubernetes/terraform.tfstate
stacks/shared/kubernetes/rbac/terraform.tfstate unificada na chave acima
stacks/shared/messagebroker/terraform.tfstate shared/messagebroker/terraform.tfstate
shared/github/terraform.tfstate inalterada

⚠️ Unir dois states exige terraform state mv para trazer os recursos de RBAC ao state unificado antes de rodar o init -migrate-state.

4. Targets de secret e CI

  • .project/make/secrets.mk com secrets.init, secrets.edit e secrets.view.
  • CI: os secrets passam a ser carregados do arquivo criptografado em vez de TF_VAR_* individuais; novos jobs platform-network e platform-registry (plan + apply); filtros de path atualizados para a estrutura nova.

5. Data sources

Todos os terraform_remote_state e working-directory do CI apontados para as chaves e caminhos novos.

Como verificar

  • make secrets.edit abre o editor sem erro.
  • make shared.kubernetes.plan roda com os secrets vindos do arquivo criptografado.
  • O CI roda todos os jobs para mudanças em src/shared/** e src/platform/** e passa.
  • terraform state list mostra os mesmos recursos depois da mudança de caminho.

Documentação

Nota histórica: o mecanismo de secret desta spec era SOPS+age. Ele foi substituído inteiramente pelo ward — ver migração dos secrets para ward e migração completa do repo para ward.