Skip to content

Latest commit

 

History

History
151 lines (108 loc) · 5.9 KB

File metadata and controls

151 lines (108 loc) · 5.9 KB

Arquitetura de CI/CD

🌐 EN | PT | ES


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

Visão Geral

O AIOX-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

Workflow Propósito Trigger Crítico
ci.yml Validação principal de CI (lint, typecheck, test) PR, push para main Sim
pr-automation.yml Relatório de cobertura e métricas Apenas PR Não
semantic-release.yml Versionamento automático e changelog Push para main Sim
test.yml Testes estendidos (segurança, build, integração) Apenas push para main Não
macos-testing.yml Testes específicos para macOS (Intel + ARM) Filtrado por path Não
release.yml Criação de Release no GitHub Tag v* Sim
npm-publish.yml Publicação de pacote no NPM Release publicado Sim
pr-labeling.yml Auto-rotulagem de PRs PR aberto/sincronizado Não
quarterly-gap-audit.yml Auditoria agendada Cron Não
welcome.yml Boas-vindas a contribuidores iniciantes PR Nã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'
  - '.aiox/**'
  - '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

Antes Depois Economia
~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