CI/CD para proyectos C++: GitHub Actions de la A a la Z

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

Introducción: ¿Por qué los proyectos C++ necesitan CI/CD?

El desarrollo en C++ tradicionalmente se asocia con compilación manual, ejecución de pruebas y un meticuloso control de versiones. Sin embargo, en el desarrollo moderno, especialmente cuando se trabaja en equipo, este enfoque se convierte en un cuello de botella. CI/CD (Continuous Integration / Continuous Deployment) es una práctica que automatiza los procesos de compilación, prueba e implementación de código. Para proyectos C++, donde los errores de compilación o enlace pueden manifestarse solo en ciertas plataformas, CI/CD es críticamente importante.

GitHub Actions es una herramienta potente y flexible, integrada en GitHub, que permite crear pipelines directamente en el repositorio. En este artículo, analizaremos cómo configurar CI/CD para un proyecto C++ desde cero, usando GitHub Actions. Aprenderá a automatizar la compilación con CMake, ejecutar pruebas unitarias, verificar la calidad del código e incluso publicar lanzamientos.

Al final del artículo, podrá configurar de forma independiente un pipeline que ahorrará horas de trabajo manual y aumentará la confiabilidad de su proyecto.



Parte principal: Guía paso a paso de GitHub Actions para C++



1. Fundamentos de GitHub Actions: Workflow, Jobs y Steps

Antes de escribir código, comprendamos la terminología. GitHub Actions se basa en workflow (flujos de trabajo), que se describen en archivos YAML dentro del directorio .github/workflows/. Cada workflow consta de uno o más jobs (tareas), que se ejecutan en paralelo o secuencialmente. Cada job consta de steps (pasos): comandos o acciones individuales.

Para un proyecto C++, un workflow típico incluye:

  • Compilación (Build): compilación del proyecto con CMake y Make/Ninja.
  • Pruebas (Test): ejecución de pruebas unitarias (por ejemplo, con Google Test o Catch2).
  • Linting (Lint): verificación del código con analizadores estáticos (Clang-Tidy, Cppcheck).
  • Despliegue (Deploy): publicación de artefactos o lanzamientos.

El primer workflow generalmente se crea para la compilación básica en Ubuntu, pero C++ requiere verificación en diferentes SO (Linux, macOS, Windows). GitHub Actions admite las tres plataformas.



2. Creación del primer workflow: compilación y pruebas

Cree el archivo .github/workflows/ci.yml en la raíz de su repositorio. A continuación se muestra un ejemplo para un proyecto que usa CMake y Google Test.

name: C++ CI/CD Pipeline

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

jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] build_type: [Debug, Release] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y cmake g++ ninja-build - name: Install dependencies (macOS) if: runner.os == 'macOS' run: brew install cmake ninja - name: Install dependencies (Windows) if: runner.os == 'Windows' run: choco install cmake ninja -y - name: Configure CMake run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - name: Build run: cmake --build build --config ${{ matrix.build_type }} - name: Run tests working-directory: build run: ctest --output-on-failure -C ${{ matrix.build_type }}

Este workflow:

  • Se ejecuta al hacer push a main o develop, así como al crear un Pull Request.
  • Utiliza una matriz de estrategias para compilar en tres SO y en dos configuraciones (Debug/Release).
  • Instala dependencias (CMake, Ninja) según el SO.

Blogs

Book Recommendations