CI/CD para projetos C++: Configuração do GitHub Actions

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

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-failure


Vamos 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

Blogs

Book Recommendations