CI/CD para proyectos Rust: 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
```html

Introducción: Por qué CI/CD es crítico para proyectos Rust



Rust es un lenguaje de programación de sistemas conocido por su rendimiento y seguridad de memoria. Sin embargo, incluso el código más confiable requiere verificación constante. Las pruebas y compilaciones manuales consumen tiempo y son propensas a errores. CI/CD (Integración Continua/Despliegue Continuo) automatiza estos procesos, garantizando que cada cambio en el código pase por la verificación del compilador, pruebas y linters antes de llegar a la rama principal.



GitHub Actions es una plataforma integrada para automatizar flujos de trabajo en GitHub. Es ideal para proyectos Rust gracias a su flexibilidad, límite gratuito de minutos para repositorios públicos y un enorme ecosistema de acciones listas para usar. En este artículo, analizaremos el ciclo completo de configuración de CI/CD para Rust: desde la compilación básica hasta la optimización mediante almacenamiento en caché y despliegue.



1. Fundamentos: Primer workflow para compilación y pruebas



Comencemos creando un flujo de trabajo mínimo. En la raíz de tu repositorio, crea la carpeta .github/workflows y el archivo ci.yml.



Archivo ci.yml básico



name: Rust CI

on: push: branches: [ "main" ] pull_request: branches: [ "main" ]

env: CARGO_TERM_COLOR: always

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose


Desglose de elementos clave:

  • on: Disparadores: se ejecuta al hacer push a main y al crear un Pull Request.
  • env: La variable CARGO_TERM_COLOR habilita la salida de logs en color.
  • actions/checkout: Acción estándar para clonar el repositorio.
  • dtolnay/rust-toolchain: La acción más popular para instalar Rust. Usa stable, nightly o una versión específica.


Este workflow ya es útil: garantiza que el código compile y que todas las pruebas pasen. Pero para un proyecto real, esto no es suficiente.



2. Optimización: Caché de dependencias y compilación multiplataforma



Cada ejecución de CI descarga todas las dependencias de nuevo. Para proyectos Rust con muchos crates, esto puede llevar minutos. La solución es almacenar en caché las carpetas ~/.cargo y target.



Añadiendo caché



jobs:  build:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable    - name: Cache dependencies      uses: actions/cache@v3      with:        path: |          ~/.cargo/bin/          ~/.cargo/registry/index/          ~/.cargo/registry/cache/          target/        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}    - name: Build      run: cargo build --verbose    - name: Run tests      run: cargo test --verbose


Puntos clave:

  • hashFiles('**/Cargo.lock'): La caché se invalida solo cuando cambia Cargo.lock.
  • path: Almacenamos en caché los binarios, el índice del registro y la carpeta target.
  • Restauración: Si la clave coincide, la caché se restaura y cargo omite la descarga.


Compilación multiplataforma



Rust soporta múltiples plataformas. Para asegurarte de que tu código funciona en todas partes, usa una matriz de compilación:



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]    runs-on: ${{ matrix.os }}    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable```                

Blogs

Book Recommendations