Validação de CI para os stacks de bootstrap

TLDR: Adicionar uma checagem estática de fmt/validate sobre src/bootstrap/** ao workflow de PR, para que mudança de bootstrap seja pega antes do merge — sem precisar de credencial, state ou apply.

Contexto

src/bootstrap/** está fora de todo filtro de path em infra-pr.yml e infra.yml, então mudança de bootstrap não recebe CI nenhum: nem fmt, nem validate, nem plan. Isso apareceu durante o trabalho de cluster autoscaler — a edição na TerraformPolicy (src/bootstrap/aws-account/terraform/main.tf) foi mergeada com apenas validação local.

Isso é em parte proposital: o apply do bootstrap tem que continuar manual e local. Ele usa backend local (tmp/aws-account.tfstate), assume a OrganizationAccountAccessRole de nível de organização, é interativo, e é justamente o passo que cria a TerraformRole da qual todo o resto do CI depende. Rodar o apply no CI seria circular e um risco de segurança.

Mas validação estática (fmt -check, validate -backend=false) não precisa de credencial, state nem apply — só pega erro de sintaxe e formatação antes do merge. É esse o gap.

Objetivos

  • terraform fmt -check + terraform validate nos stacks de bootstrap em tempo de PR.
  • Sem credencial, sem remote state, sem apply — puramente estático.

Fora de escopo

  • Não adicionar um job de apply do bootstrap. O apply continua manual e local, por decisão de arquitetura.

Mudanças

.github/workflows/infra-pr.yml

  • src/bootstrap/** adicionado ao trigger on.pull_request.paths.
  • Output e filtro bootstrap no job changes.
  • Job novo bootstrap / validate, condicionado a changes.outputs.bootstrap == 'true':
    • hashicorp/setup-terraform@v3
    • terraform fmt -check -recursive src/bootstrap
    • terraform init -backend=false + terraform validate por stack de bootstrap (hoje só src/bootstrap/aws-account/terraform)
    • sem ward e sem credencial AWS — a validação é offline.

Como verificar

  • Um PR que toca src/bootstrap/aws-account/terraform/main.tf roda o job bootstrap / validate e passa no código atual.
  • Introduzir erro deliberado de formatação ou sintaxe faz o job falhar.
  • PR que não toca src/bootstrap/** tem o job pulado pelo filtro.

Documentação

— (nenhuma; a mudança é só de CI, sem regra de negócio)