CI/CD para proyectos C++: Guía completa para configurar GitHub Actions
En el desarrollo de software moderno, la automatización de los procesos de compilación, prueba e implementación se ha convertido no solo en una conveniencia, sino en una necesidad. Para proyectos C++, que a menudo se caracterizan por sistemas de compilación complejos y dependencias, la implementación de CI/CD (Integración Continua / Despliegue Continuo) es especialmente relevante. En este artículo, analizaremos en detalle cómo configurar un pipeline de CI/CD para proyectos C++ utilizando GitHub Actions, una herramienta de automatización potente e integrada.
¿Qué es GitHub Actions y por qué es adecuado para C++?
GitHub Actions es una plataforma para automatizar flujos de trabajo (workflows) que le permite crear pipelines de CI/CD directamente en su repositorio de GitHub. Para los desarrolladores de C++, esta es una solución ideal por varias razones:
- Minutos de compilación gratuitos para repositorios públicos.
- Soporte para Linux, macOS y Windows — puede probar la compilación multiplataforma.
- Configuración flexible a través de archivos YAML.
- Enorme ecosistema de acciones listas (actions) para instalar compiladores, dependencias y herramientas.
El elemento principal es un workflow, que se describe en el archivo .github/workflows/*.yml. Cada workflow consta de uno o varios jobs (tareas) que se ejecutan en máquinas virtuales (runners).
Configuración de un pipeline básico: compilación y pruebas
Empecemos con lo más simple: crearemos un workflow que compile su proyecto C++ con CMake y ejecute pruebas cada vez que envíe cambios a la rama main o cree un Pull Request.
Cree un archivo .github/workflows/build.yml en la raíz de su repositorio y agregue el siguiente 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-failureAnalicemos este código paso a paso:
- name — nombre del workflow que se mostrará en la interfaz de GitHub.
- on — disparadores que inician el workflow (push y pull_request en main).
- runs-on — sistema operativo del runner (ubuntu-latest, windows-latest, macos-latest).
- actions/checkout — acción estándar que clona su repositorio.
- Install dependencies — instalamos CMake, el compilador GCC y la biblioteca Google Test para pruebas unitarias.
- Configure, Build, Run tests — comandos estándar de CMake para compilar y ejecutar pruebas.
Optimización: almacenamiento en caché y compilación matricial
El pipeline básico funciona, pero se puede mejorar significativamente. Dos técnicas clave son el almacenamiento en caché de dependencias y la compilación matricial.
Almacenamiento en caché para acelerar la compilación
Cada vez que se ejecuta el workflow, el runner descarga todas las dependencias de nuevo. Esto lleva tiempo. Use actions/cache para guardar en caché la compilación de CMake y los paquetes instalados:
- name: Cache CMake build uses: actions/cache@v3 with: path: | build /usr/l