Módulo 03 — Versionamento com Git e GitHub • Bloco 5: Automação, CI/CD, Ferramentas & Hospedagem


🗺️ Mapa Conceitual do Capítulo

flowchart TD
    subgraph ACTIONS_CORE["Arquitetura do GitHub Actions Engine"]
        TRIGGERS["Gatilhos de Evento (push · pull_request · schedule · dispatch)"]
        RUNNERS["Runners Efêmeros (Ubuntu, Windows, macOS Isolados)"]
        HIERARCHY["Hierarquia: Workflow -> Jobs (Paralelos) -> Steps (Sequenciais)"]
        TRIGGERS --> RUNNERS --> HIERARCHY
    end

    subgraph CI_PERF["Estratégias de Alta Performance & Escala"]
        MATRIX["Matrix Builds (strategy.matrix: múltiplos SOs e Versões)"]
        CACHE["Caching Inteligente (actions/cache via hashFiles de Lockfile)"]
        DEPENDENCIES["Orquestração de Dependências de Jobs (needs: [lint, test])"]
        MATRIX --> CACHE --> DEPENDENCIES
    end

    subgraph SECURE_CD["Segurança, Compliance & Deploy Contínuo (CD)"]
        LEAST_PRIV["Menor Privilégio: permissions: { contents: read }"]
        OIDC_AUTH["Autenticação sem Chaves Fixas via OpenID Connect (OIDC)"]
        ENV_GATES["GitHub Environments (Aprovação Manual & Proteção de Produção)"]
        LEAST_PRIV --> OIDC_AUTH --> ENV_GATES
    end

    ACTIONS_CORE --> CI_PERF
    CI_PERF --> SECURE_CD

⚡ 1. O Modelo de Execução Orientado a Eventos

O GitHub Actions é uma plataforma de automação e orquestração de esteiras de Integração Contínua e Entrega Contínua (CI/CD) nativamente integrada ao ecossistema Git. Seus arquivos de definição residem obrigatoriamente no diretório .github/workflows/ em formato YAML:

[ Gatilho de Evento (ex: push na branch main) ]
                     │
                     ▼
           [ Runner Virtual Efêmero ]
                     │
         ┌───────────┴───────────┐
         ▼                       ▼
    [ Job 1: Lint ]         [ Job 2: Testes ]  (Executam em PARALELO por padrão)
         │                       │
         └───────────┬───────────┘
                     │ needs: [Job 1, Job 2]
                     ▼
             [ Job 3: Build & Deploy ]

Anatomia da Hierarquia:

  1. Workflow: O fluxo automatizado global configurado no arquivo .yml.
  2. Eventos (Triggers): Ações no repositório que disparam o workflow (on: push, on: pull_request, on: schedule para cron jobs ou on: workflow_dispatch para disparo manual).
  3. Jobs: Conjunto de etapas executadas em uma máquina virtual dedicada (Runner). Jobs distintos rodam em paralelo, a menos que uma dependência seja declarada via diretiva needs:.
  4. Steps: Tarefas sequenciais executadas dentro da mesma máquina virtual do job, compartilhando o sistema de arquivos local.

🎛️ 2. Matrix Builds e Caching Estratégico de Dependências

Matrix Builds para Validação Multiplataforma:

Permite testar a compatibilidade da base de código em múltiplos sistemas operacionais e versões de linguagem simultaneamente sem duplicar código YAML:

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false # Se uma versão falhar, continua testando as outras
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ["3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - run: pytest

Aceleração com actions/cache:

Como cada job inicia em uma máquina virtual recém-criada e vazia, reinstalar centenas de megabytes de dependências a cada push desperdiça tempo e créditos de CI. O cache reaproveita pacotes baseado no hash do arquivo de trava (lockfile):

- name: Cache de Dependências
  uses: actions/cache@v4
  with:
    path: ~/.cache/pip
    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
    restore-keys: |
      ${{ runner.os }}-pip-

🔒 3. Princípio do Menor Privilégio e Autenticação OIDC

Pipelines de CI/CD tornaram-se alvos prioritários de ataques de cadeia de suprimentos (Supply Chain Attacks). O GitHub impõe diretrizes estritas de endurecimento (Hardening):

1. Declaração Explícita de Permissões (permissions):

Por padrão corporativo, restrinja o token automático ${{ secrets.GITHUB_TOKEN }} para permissão estrita de leitura:

permissions:
  contents: read
  pull-requests: write # Habilita apenas escrita de comentários se necessário

2. Autenticação Moderna em Nuvem sem Chaves Fixas (OIDC):

Em vez de cadastrar chaves de acesso estáticas e perigosas de longa duração (como AWS_SECRET_ACCESS_KEY), utilize OpenID Connect (OIDC). O GitHub Actions negocia um token criptográfico temporário de curta duração diretamente com o provedor de nuvem (AWS IAM, Google Cloud Workload Identity, Azure AD):

permissions:
  id-token: write # Mandatório para negociar o token JWT OIDC
  contents: read

🚀 4. Esteira Completa de Produção com Ambientes de Deploy

Para garantir que deploys em produção exijam homologação prévia e proteção contra lançamentos acidentais:

name: Production Delivery Pipeline

on:
  push:
    branches: [main]

jobs:
  audit-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Executar Auditoria Estática
        run: |
          python3 _scripts/validate_liquid.py
          pytest tests/

  deploy-production:
    needs: [audit-and-test] # Só executa se o job anterior passar com exit 0
    runs-on: ubuntu-latest
    environment:
      name: production # Ativa as regras de aprovação manual configuradas no GitHub
      url: https://portal.techcorp.io
    steps:
      - uses: actions/checkout@v4
      - name: Deploy em Cluster Kubernetes
        run: ./deploy.sh --env=prod