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

Introducción: ¿Por qué CI/CD es críticamente importante para proyectos Rust?

\n

Desarrollar en Rust no solo se trata de seguridad de memoria y alto rendimiento, sino también de una disciplina estricta. El compilador de Rust detecta muchos errores en la etapa de compilación, pero esto no elimina la necesidad de pruebas de calidad, linting y verificación de compatibilidad de dependencias. Aquí es donde entra en juego el CI/CD (Integración Continua / Despliegue Continuo).

\n

GitHub Actions es un sistema de automatización integrado que es perfecto para proyectos Rust. Permite ejecutar pruebas automáticamente, formatear código, verificar vulnerabilidades e incluso publicar crates en el registro crates.io con cada push al repositorio. En este artículo, analizaremos el pipeline completo: desde cargo build básico hasta el despliegue en producción.

\n\n

1. Conceptos básicos: Configuración de un workflow básico para Rust

\n

Cualquier pipeline de CI/CD en GitHub Actions comienza con la creación de un archivo YAML en el directorio .github/workflows/. Vamos a crear un archivo ci.yml para la verificación básica de un proyecto Rust.

\n\n

1.1. Primer workflow: Compilación y pruebas

\n

Empecemos con un conjunto mínimo: clonar el repositorio, instalar Rust y ejecutar pruebas.

\n
name: Rust CI\n\non:\n  push:\n    branches: [ "main", "develop" ]\n  pull_request:\n    branches: [ "main" ]\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose
\n

¿Qué sucede aquí?

\n
    \n
  • actions/checkout@v4 — clona tu código.
  • \n
  • dtolnay/rust-toolchain@stable — la acción oficial para instalar Rust (admite nightly, beta y stable).
  • \n
  • cargo build y cargo test — los comandos principales para verificar el proyecto.
  • \n
\n

Este workflow se ejecutará con cada push a las ramas main y develop, así como al crear un Pull Request.

\n\n

1.2. Almacenamiento en caché de dependencias para acelerar la compilación

\n

Los proyectos Rust a menudo tienen muchas dependencias. Para no descargarlas cada vez, utiliza el almacenamiento en caché. Esto reducirá el tiempo de compilación de 5-10 minutos a 30-60 segundos.

\n
    - name: Cache Cargo registry\n      uses: actions/cache@v3\n      with:\n        path: |\n          ~/.cargo/registry\n          ~/.cargo/git\n          target/\n        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-cargo-
\n

Agrega este paso antes de ejecutar cargo build. El hash del archivo Cargo.lock garantiza que el caché solo se actualice cuando cambien las dependencias.

\n\n

2. Verificación avanzada de calidad de código

\n

Las pruebas por sí solas no son suficientes para mantener una alta calidad de código. Agreguemos linting, formateo y verificación de seguridad.

\n\n

2.1. Formateo (rustfmt) y linting (clippy)

\n

Rust tiene herramientas integradas para mantener un estilo de código uniforme. Agreguémoslas en un job separado:

\n
  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: dtolnay/rust-toolchain@stable\n      with:\n        components: clippy, rustfmt\n    - name: Check formatting\n      run: cargo fmt --check\n    - name: Run clippy\n      run: cargo clippy -- -D warnings
\n
    \n
  • cargo fmt --check — verifica que el código esté formateado según el estándar rustfmt.
  • \n
  • cargo clippy -- -D warnings — ejecuta el linter y convierte las advertencias en errores (bandera -D).
  • \n
\n

Esto ayudará a evitar código "sucio" en el repositorio.

\n\n

2.2. Verificación de seguridad de dependencias (car

Blogs

Book Recommendations