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++: configurando GitHub Actions



O desenvolvimento moderno em C++ requer não apenas escrever código de qualidade, mas também configurar processos de compilação, teste e implantação. CI/CD (Continuous Integration / Continuous Deployment) é uma prática que permite automatizar esses processos, reduzindo o tempo entre a escrita do código e sua entrega aos usuários. Neste artigo, veremos como configurar CI/CD para projetos C++ usando GitHub Actions — uma ferramenta poderosa e gratuita integrada ao GitHub.



GitHub Actions permite criar workflows automatizados que são acionados por eventos específicos: push no repositório, criação de pull request, release e outros. Para projetos C++, isso é especialmente útil, pois permite garantir que o código compile em diferentes plataformas e não contenha regressões.



Fundamentos do GitHub Actions para C++



GitHub Actions usa arquivos YAML para descrever workflows. Cada workflow consiste em um ou mais jobs, que são executados em máquinas virtuais (runners). Para projetos C++, normalmente são usados runners Ubuntu, Windows e macOS. Vamos analisar a estrutura básica de um arquivo de workflow.



name: C++ CI

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4

- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libboost-all-dev

- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: cd build && ctest --output-on-failure


Este workflow é acionado ao fazer push nos branches main e develop, bem como ao criar um pull request para main. Ele instala dependências (CMake, g++, Boost), configura o projeto, compila e executa os testes.



Compilação multiplataforma de projetos C++



Uma das principais vantagens do CI/CD para C++ é a capacidade de verificar automaticamente a compilação em várias plataformas. Isso é crítico, pois o código C++ pode se comportar de forma diferente em diferentes SOs e compiladores. GitHub Actions permite organizar facilmente uma matriz de compilação.



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]        compiler: [g++, clang++]        include:          - os: ubuntu-latest            compiler: g++            cmake_flags: -DCMAKE_CXX_COMPILER=g++-11          - os: ubuntu-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++-14          - os: windows-latest            compiler: msvc            cmake_flags: -DCMAKE_CXX_COMPILER=cl          - os: macos-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++

runs-on: ${{ matrix.os }}

steps: - uses: actions/checkout@v4

- name: Install dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y cmake g++-11 clang-14 libboost-all-dev

- name: Install dependencies (macOS) if: matrix.os == 'macos-latest' run: | brew update brew install cmake boost

- name: Install dependencies (Windows) if: matrix.os == 'windows-latest' run: | choco install cmake boost-msvc-14.3

- name: Configure CMake run: cmake -B build ${{ matrix.cmake_flags }} -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: | if [ "${{ runner.os }}" == "Windows" ]; then cd build && ctest -C Release --output-on-failure else cd build && ctest --output-on-failure fi


Neste exemplo

Blogs

Book Recommendations