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.ymle remover o obsoletoconfig/projects.yaml. - Unir
kubernetes+kubernetes/rbacnum único terraform. - Cobertura de CI para os stacks de plataforma.
Fora de escopo
src/platform/esrc/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 mvpara trazer os recursos de RBAC ao state unificado antes de rodar oinit -migrate-state.
4. Targets de secret e CI
.project/make/secrets.mkcomsecrets.init,secrets.editesecrets.view.- CI: os secrets passam a ser carregados do arquivo criptografado em vez de
TF_VAR_*individuais; novos jobsplatform-networkeplatform-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.editabre o editor sem erro.make shared.kubernetes.planroda com os secrets vindos do arquivo criptografado.- O CI roda todos os jobs para mudanças em
src/shared/**esrc/platform/**e passa. terraform state listmostra os mesmos recursos depois da mudança de caminho.
Documentação
- Guia de acesso — caminho de
rbac/config.yml→config/access.yml. - Guia de primeiros passos — reescrita completa dos targets e do setup de credencial.
- Arquitetura de abstração — caminhos de módulo.
CLAUDE.md— seção de estrutura de diretórios.
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.