CI/CD para proyectos C++: configuración de GitHub Actions

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

CI/CD para proyectos C++: configuración de GitHub Actions



El desarrollo moderno en C++ requiere no solo escribir código de calidad, sino también configurar procesos de compilación, prueba e implementación. CI/CD (Integración Continua / Despliegue Continuo) es una práctica que permite automatizar estos procesos, reduciendo el tiempo entre la escritura del código y su entrega a los usuarios. En este artículo, veremos cómo configurar CI/CD para proyectos C++ usando GitHub Actions, una herramienta potente y gratuita integrada en GitHub.



GitHub Actions permite crear flujos de trabajo (workflows) automáticos que se ejecutan ante ciertos eventos: push al repositorio, creación de pull request, lanzamiento, entre otros. Para proyectos C++, esto es especialmente útil, ya que permite garantizar que el código se compile en diferentes plataformas y no contenga regresiones.



Fundamentos de GitHub Actions para C++



GitHub Actions utiliza archivos YAML para describir los workflows. Cada workflow consta de uno o varios jobs que se ejecutan en máquinas virtuales (runners). Para proyectos C++, normalmente se usan runners de Ubuntu, Windows y macOS. Veamos la estructura básica de un archivo 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 se ejecuta al hacer push a las ramas main y develop, y también al crear un pull request hacia main. Instala las dependencias (CMake, g++, Boost), configura el proyecto, lo compila y ejecuta las pruebas.



Compilación multiplataforma de proyectos C++



Una de las principales ventajas de CI/CD para C++ es la posibilidad de verificar automáticamente la compilación en múltiples plataformas. Esto es crítico, ya que el código C++ puede comportarse de manera diferente en distintos sistemas operativos y compiladores. GitHub Actions permite organizar fácilmente una matriz de compilación.



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


En este ejemplo

Blogs

Book Recommendations