CI/CD para projetos C++: GitHub Actions do início ao fim

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que projetos C++ precisam de CI/CD?

O desenvolvimento em C++ tradicionalmente é associado à compilação manual, execução de testes e controle de versão meticuloso. No entanto, no desenvolvimento moderno, especialmente ao trabalhar em equipe, essa abordagem se torna um gargalo. CI/CD (Continuous Integration / Continuous Deployment) é uma prática que automatiza os processos de compilação, teste e implantação de código. Para projetos C++, onde erros de compilação ou linkagem podem se manifestar apenas em plataformas específicas, o CI/CD é criticamente importante.

GitHub Actions é uma ferramenta poderosa e flexível, integrada ao GitHub, que permite criar pipelines diretamente no repositório. Neste artigo, vamos detalhar como configurar CI/CD para um projeto C++ do zero, usando GitHub Actions. Você aprenderá como automatizar a compilação com CMake, executar testes unitários, verificar a qualidade do código e até publicar releases.

Ao final do artigo, você será capaz de configurar de forma independente um pipeline que economizará horas de trabalho manual e aumentará a confiabilidade do seu projeto.

Parte Principal: Guia passo a passo do GitHub Actions para C++

1. Fundamentos do GitHub Actions: Workflow, Jobs e Steps

Antes de escrever código, vamos entender a terminologia. GitHub Actions é baseado em workflows (fluxos de trabalho), que são descritos em arquivos YAML dentro do diretório .github/workflows/. Cada workflow consiste em um ou mais jobs (tarefas), que são executados em paralelo ou sequencialmente. Cada job consiste em steps (etapas) — comandos ou ações individuais.

Para um projeto C++, um workflow típico inclui:

  • Build (Compilação): compilação do projeto usando CMake e Make/Ninja.
  • Test (Teste): execução de testes unitários (por exemplo, com Google Test ou Catch2).
  • Lint (Análise Estática): verificação do código com analisadores estáticos (Clang-Tidy, Cppcheck).
  • Deploy (Implantação): publicação de artefatos ou releases.

O primeiro workflow geralmente é criado para a compilação básica no Ubuntu, mas C++ exige verificação em diferentes SOs (Linux, macOS, Windows). GitHub Actions suporta todas as três plataformas.

2. Criando o primeiro workflow: compilação e teste

Crie o arquivo .github/workflows/ci.yml na raiz do seu repositório. Abaixo está um exemplo para um projeto que usa CMake e Google Test.

name: C++ CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        build_type: [Debug, Release]
    runs-on: ${{ matrix.os }}
    
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      
    - name: Install dependencies (Linux)
      if: runner.os == 'Linux'
      run: sudo apt-get update && sudo apt-get install -y cmake g++ ninja-build
      
    - name: Install dependencies (macOS)
      if: runner.os == 'macOS'
      run: brew install cmake ninja
      
    - name: Install dependencies (Windows)
      if: runner.os == 'Windows'
      run: choco install cmake ninja -y
      
    - name: Configure CMake
      run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
      
    - name: Build
      run: cmake --build build --config ${{ matrix.build_type }}
      
    - name: Run tests
      working-directory: build
      run: ctest --output-on-failure -C ${{ matrix.build_type }}

Este workflow:

  • É acionado ao fazer push para main ou develop, bem como ao criar um Pull Request.
  • Usa uma matriz de estratégias para compilar em três SOs e em duas configurações (Debug/Release).
  • Instala as dependências (CMake, Ninja) dependendo do SO.

Blogs

Book Recommendations