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 ao CI/CD para C++ com GitHub Actions

\n

O desenvolvimento moderno em C++ é impensável sem a automação dos processos de compilação e teste. CI/CD (Integração Contínua / Implantação Contínua) permite que as equipes identifiquem rapidamente erros, compilem automaticamente arquivos binários e implantem aplicações. GitHub Actions é uma ferramenta poderosa, integrada ao GitHub, que é ideal para projetos C++. Neste artigo, vamos detalhar como configurar um pipeline completo de CI/CD para C++: desde a compilação com CMake até a implantação de artefatos prontos.

\n

Abordaremos exemplos reais de código, erros típicos e melhores práticas. Após a leitura, você será capaz de implementar CI/CD em seu próprio projeto C++.

\n\n

Fundamentos do GitHub Actions para C++

\n

Estrutura do arquivo de workflow

\n

O workflow no GitHub Actions é definido por um arquivo YAML no diretório .github/workflows/. Vejamos um exemplo básico para um projeto C++:

\n
name: C++ CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y cmake g++ libboost-all-dev\n\n    - name: Configure with CMake\n      run: mkdir build && cd build && cmake ..\n\n    - name: Build project\n      run: cd build && make -j$(nproc)\n\n    - name: Run tests\n      run: cd build && ctest --output-on-failure
\n

Este workflow é acionado em pushes para main e develop, bem como na criação de pull requests. Ele instala dependências, configura a compilação via CMake, compila o projeto e executa os testes.

\n\n

Escolha do sistema operacional e compilador

\n

O GitHub Actions suporta Linux (ubuntu), macOS e Windows. Para projetos multiplataforma, você pode usar uma matriz de compilações:

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        compiler: [g++, clang++]\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - name: Set compiler\n      run: |\n        if [ "${{ matrix.os }}" == "windows-latest" ]; then\n          echo "CXX=cl.exe" >> $GITHUB_ENV\n        else\n          echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV\n        fi\n      shell: bash
\n

Isso permite verificar a compatibilidade do código com diferentes compiladores e sistemas operacionais.

\n\n

Configuração avançada: teste, cache e artefatos

\n

Cache de dependências

\n

Cada compilação no GitHub Actions começa com um ambiente limpo. Para acelerar o processo, armazene em cache os pacotes e bibliotecas baixados:

\n
- name: Cache CMake build directory\n  uses: actions/cache@v3\n  with:\n    path: build\n    key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}\n    restore-keys: |\n      ${{ runner.os }}-cmake-\n\n- name: Configure CMake\n  run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
\n

O cache é restaurado se os arquivos CMakeLists.txt não forem alterados, economizando tempo em compilações repetidas.

\n\n

Execução de testes unitários com Google Test

\n

Para C++, o Google Test é frequentemente usado. Vamos adicionar uma etapa de teste com geração de relatório no formato JUnit:

\n
- name: Build and run tests\n  run: |\n    cmake --build build --target all_tests\n    cd build && ctest --output-junit test-results.xml\n\n- name: Upload test results\n  if: always()\n  uses: actions/upload-artifact@v4\n  with:\n    name: test-results-${{ runner.os }}\n    path: build/test-results.xml
\n

A flag if: always() garante o upload do relatório mesmo se os testes falharem.

\n\n

Criação e publicação de artefatos

\n

Após uma compilação bem-sucedida, você pode salvar os arquivos binários:

\n
- name: Build release binary\n  run: cmake --build build --config Release\n\n- name: Upload build artifacts\n  uses: ac                

Blogs

Book Recommendations