Skip to Content

Arquitetura de CI/CD

🌐 EN | PT | ES


Story 6.1: Otimização de Custos do GitHub Actions

Visão Geral

O AIOS-Core utiliza GitHub Actions para integração contínua e implantação. Este documento descreve a arquitetura de workflow otimizada implementada na Story 6.1.

Hierarquia de Workflows

┌─────────────────────────────────────────────────────────────────┐ │ EVENTOS DE TRIGGER │ ├─────────────────────────────────────────────────────────────────┤ │ Pull Request → ci.yml (obrigatório) + pr-automation.yml (métricas) │ │ Push para main → ci.yml + semantic-release.yml + test.yml │ │ + cross-platform (condicional no ci.yml) │ │ Tag v* → release.yml → npm-publish.yml │ └─────────────────────────────────────────────────────────────────┘

Nota: PRs executam apenas ci.yml e pr-automation.yml (~12 jobs). Testes estendidos (test.yml) executam apenas no push para main.

Workflows Ativos

WorkflowPropósitoTriggerCrítico
ci.ymlValidação principal de CI (lint, typecheck, test)PR, push para mainSim
pr-automation.ymlRelatório de cobertura e métricasApenas PRNão
semantic-release.ymlVersionamento automático e changelogPush para mainSim
test.ymlTestes estendidos (segurança, build, integração)Apenas push para mainNão
macos-testing.ymlTestes específicos para macOS (Intel + ARM)Filtrado por pathNão
release.ymlCriação de Release no GitHubTag v*Sim
npm-publish.ymlPublicação de pacote no NPMRelease publicadoSim
pr-labeling.ymlAuto-rotulagem de PRsPR aberto/sincronizadoNão
quarterly-gap-audit.ymlAuditoria agendadaCronNão
welcome.ymlBoas-vindas a contribuidores iniciantesPRNão

Estratégias de Otimização

1. Controle de Concorrência

Todos os workflows usam grupos de concorrência para evitar execuções duplicadas:

concurrency: group: <workflow>-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true # Para workflows de CI # OU cancel-in-progress: false # Para workflows de release/publicação

2. Filtros de Path

Workflows ignoram execuções desnecessárias para mudanças apenas em documentação:

paths-ignore: - 'docs/**' - '*.md' - '.aios/**' - 'squads/**' - 'LICENSE' - '.gitignore'

3. Testes Cross-Platform Condicionais

Matriz cross-platform (3 SOs x 3 versões do Node = 7 jobs após exclusões) executa apenas no push para main:

cross-platform: if: github.ref == 'refs/heads/main' && github.event_name == 'push' strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] node: ['18', '20', '22'] exclude: - os: macos-latest node: '18' # SIGSEGV do isolated-vm - os: macos-latest node: '20' # SIGSEGV do isolated-vm

4. Validação Consolidada

Fonte única de verdade para validação:

  • ci.yml trata toda validação (lint, typecheck, test)
  • semantic-release.yml depende da proteção de branch (sem CI duplicado)
  • pr-automation.yml foca apenas em métricas/cobertura

Redução de Minutos Faturáveis

AntesDepoisEconomia
~340 min/semana~85 min/semana~75%

Detalhamento:

  • Concorrência: 40% de redução (cancela execuções obsoletas)
  • Filtros de path: 30% de redução (ignora PRs apenas de docs)
  • Cross-platform consolidado: 25% de redução (7 vs 16 jobs)
  • Workflows redundantes removidos: 5% de redução

Estratégia de Branches

Todos os workflows visam apenas a branch main:

  • Sem branches master ou develop
  • Feature branches → PR para main
  • Releases via semantic-release na main

Verificações de Status Obrigatórias

Para proteção de branch na main:

  1. CI / ESLint
  2. CI / TypeScript Type Checking
  3. CI / Jest Tests
  4. CI / Validation Summary

Solução de Problemas

Workflow não está executando?

  1. Verifique se os paths estão em paths-ignore
  2. Verifique se a branch corresponde ao trigger
  3. Verifique o grupo de concorrência (pode ter sido cancelado)

Release não está publicando?

  1. Verifique se o secret NPM_TOKEN está configurado
  2. Verifique a configuração do semantic-release
  3. Verifique o formato dos conventional commits

Testes do macOS falhando?

  • Node 18/20 no macOS têm problemas de SIGSEGV com isolated-vm
  • Apenas Node 22 executa no macOS (por design)

Documentação Relacionada