CI/CD para projetos C++: Guia completo de configuração do GitHub Actions
No desenvolvimento moderno de software, a automação dos processos de compilação, teste e implantação tornou-se não apenas uma conveniência, mas uma necessidade. Para projetos C++, que frequentemente possuem sistemas de compilação complexos e dependências, a implementação de CI/CD (Continuous Integration / Continuous Deployment) é especialmente relevante. Neste artigo, vamos detalhar como configurar um pipeline CI/CD para projetos C++ usando GitHub Actions — uma ferramenta de automação poderosa e integrada.
O que é GitHub Actions e por que é adequado para C++?
GitHub Actions é uma plataforma para automatizar fluxos de trabalho (workflows) que permite criar pipelines CI/CD diretamente no seu repositório no GitHub. Para desenvolvedores C++, esta é uma solução ideal por várias razões:
- Minutos de compilação gratuitos para repositórios públicos.
- Suporte para Linux, macOS e Windows — você pode testar compilações multiplataforma.
- Configuração flexível através de arquivos YAML.
- Ecossistema enorme de ações prontas (actions) para instalar compiladores, dependências e ferramentas.
O elemento principal é o workflow, que é descrito no arquivo .github/workflows/*.yml. Cada workflow consiste em uma ou mais jobs (tarefas) que são executadas em máquinas virtuais (runners).
Configuração do pipeline básico: compilação e teste
Vamos começar com o mais simples — criar um workflow que irá compilar seu projeto C++ com CMake e executar testes toda vez que você enviar alterações para o branch main ou criar um Pull Request.
Crie o arquivo .github/workflows/build.yml na raiz do seu repositório e adicione o seguinte código:
name: C++ CI Build
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libgtest-dev
- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build run: cmake --build build --config Release
- name: Run tests working-directory: ./build run: ctest --output-on-failureVamos analisar este código passo a passo:
- name — nome do workflow que será exibido na interface do GitHub.
- on — gatilhos que iniciam o workflow (push e pull_request no main).
- runs-on — sistema operacional do runner (ubuntu-latest, windows-latest, macos-latest).
- actions/checkout — ação padrão que clona seu repositório.
- Install dependencies — instalamos CMake, compilador GCC e a biblioteca Google Test para testes unitários.
- Configure, Build, Run tests — comandos padrão do CMake para compilar e executar testes.
Otimização: cache e compilação matricial
O pipeline básico funciona, mas pode ser significativamente melhorado. Duas técnicas principais são cache de dependências e compilação matricial.
Cache para acelerar a compilação
Toda vez que o workflow é executado, o runner baixa todas as dependências novamente. Isso leva tempo. Use actions/cache para armazenar em cache o CMake build e os pacotes instalados:
- name: Cache CMake build uses: actions/cache@v3 with: path: | build /usr/l