{"meta":{"title":"Compilación y prueba de Rust","intro":"Aprende a crear un flujo de trabajo de integración continua (CI) para compilar y probar tu proyecto de Rust.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/tutorials","title":"Tutoriales"},{"href":"/es/actions/tutorials/build-and-test-code","title":"Crea y prueba tu código"},{"href":"/es/actions/tutorials/build-and-test-code/rust","title":"Rust"}],"documentType":"article"},"body":"# Compilación y prueba de Rust\n\nAprende a crear un flujo de trabajo de integración continua (CI) para compilar y probar tu proyecto de Rust.\n\n## Introducción\n\nEsta guía te muestra cómo compilar, probar y publicar un paquete de Rust.\n\nLos ejecutores hospedados en GitHub tienen un caché de herramientas con software preinstalado, que incluye las dependencias para Rust. Para obtener una lista completa de software actualizado y las versiones preinstaladas de Rust, consulta [Ejecutores hospedados en GitHub](/es/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software).\n\n## Requisitos previos\n\nYa debes estar familiarizado con la sintaxis de YAML y con cómo se utiliza con GitHub Actions. Para más información, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions).\n\nTe recomendamos que tengas un entendimiento básico del lenguaje Rust. Para más información, consulta [Introducción a Rust](https://www.rust-lang.org/learn).\n\n## Uso de una plantilla de flujo de trabajo de Rust\n\nPara comenzar rápidamente, agregue una plantilla de flujo de trabajo al directorio `.github/workflows` del repositorio.\n\nGitHub proporciona una plantilla de flujo de trabajo de Rust que debería funcionar para la mayoría de los proyectos de Rust. En las secciones siguientes de esta guía se proporcionan ejemplos de cómo puede personalizar esta plantilla de flujo de trabajo.\n\n1. En GitHub, navegue hasta la página principal del repositorio.\n\n2. En el nombre del repositorio, haz clic en **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> Actions**.\n\n   ![Captura de pantalla de las pestañas del repositorio \"github/docs\". La pestaña \"Proyectos\" aparece resaltada con un contorno naranja.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Si ya tiene un flujo de trabajo en su repositorio, haga clic en **New workflow** (Nuevo flujo de trabajo).\n\n4. En la página \"Elegir un flujo de trabajo\" se muestra una selección de plantillas de flujo de trabajo recomendadas. Busca \"Rust\".\n\n5. Filtra la selección de flujos de trabajo con un clic en **Integración continua**.\n\n6. En el flujo de trabajo \"Rust - by GitHub Actions\", haz clic en **Configurar**.\n\n   ![Captura de pantalla de la página «Elegir un flujo de trabajo». El botón \"Configurar\" en el flujo de trabajo \"Rust\" está resaltado con un contorno naranja.](/assets/images/help/actions/starter-workflow-rust.png)\n\n7. Edita el flujo de trabajo según sea necesario. Por ejemplo, cambia la versión de Rust.\n\n8. Haga clic en **Commit changes** (Confirmar cambios).\n\nEl archivo de flujo de trabajo `rust.yml` se agrega al directorio `.github/workflows` de tu repositorio.\n\n## Especificación de una versión de Rust\n\nLos ejecutores hospedados en GitHub incluyen una versión reciente de la cadena de herramientas de Rust. Puedes usar rustup para notificar la versión instalada en un ejecutor, invalidar la versión e instalar cadenas de herramientas diferentes. Para más información, consulta [El libro de rustup](https://rust-lang.github.io/rustup/).\n\nEn este ejemplo se muestran los pasos que puedes usar para configurar el entorno del ejecutor a fin de usar la compilación nocturna de Rust y notificar la versión.\n\n```yaml copy\n      - name: Temporarily modify the rust toolchain version\n        run: rustup override set nightly\n      - name: Output rust version for educational purposes\n        run: rustup --version\n```\n\n### Almacenar dependencias en caché\n\nPuedes almacenar en caché las dependencias y restaurarlas mediante la acción Cache. En este ejemplo se supone que el repositorio contiene un archivo `Cargo.lock`.\n\n```yaml copy\n      - name: Cache\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.cargo/registry\n            ~/.cargo/git\n            target\n          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n```\n\nSi tienes requisitos personalizados o necesitas controles más precisos para el almacenamiento en caché, debes explorar otras opciones de configuración para la [acción `cache`](https://github.com/marketplace/actions/cache). Para más información, consulta [Referencia de almacenamiento en caché de dependencias](/es/actions/using-workflows/caching-dependencies-to-speed-up-workflows).\n\n## Construir y probar tu código\n\nPuedes usar los mismos comandos que usas de forma local para construir y probar tu código. En este flujo de trabajo de ejemplo se muestra cómo usar `cargo build` y `cargo test` en un trabajo:\n\n```yaml copy\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        BUILD_TARGET: [release] # refers to a cargo profile\n    outputs:\n      release_built: ${{ steps.set-output.outputs.release_built }}\n    steps:\n      - uses: actions/checkout@v6\n      - name: Build binaries in \"${{ matrix.BUILD_TARGET }}\" mode\n        run: cargo build --profile ${{ matrix.BUILD_TARGET }}\n      - name: Run tests in \"${{ matrix.BUILD_TARGET }}\" mode\n        run: cargo test --profile ${{ matrix.BUILD_TARGET }}\n```\n\nLa palabra clave `release` usada en este ejemplo corresponde a un perfil de carga. Puedes usar cualquier [perfil](https://doc.rust-lang.org/cargo/reference/profiles.html) que hayas definido en el archivo `Cargo.toml`.\n\n## Publicación del paquete o la biblioteca en crates.io\n\nUna vez que hayas configurado el flujo de trabajo para compilar y probar el código, puedes usar un secreto a fin de iniciar sesión en [crates.io](https://crates.io/) y publicar el paquete.\n\n```yaml copy\n      - name: Login into crates.io\n        run: cargo login ${{ secrets.CRATES_IO }}\n      - name: Build binaries in \"release\" mode\n        run: cargo build -r\n      - name: \"Package for crates.io\"\n        run: cargo package # publishes a package as a tarball\n      - name: \"Publish to crates.io\"\n        run: cargo publish # publishes your crate as a library that can be added as a dependency\n```\n\nSi hay algún error al compilar y empaquetar el paquete, comprueba los metadatos de tu manifiesto en el archivo `Cargo.toml` y consulta [El formato del manifiesto](https://doc.rust-lang.org/cargo/reference/manifest.html). También debes comprobar el archivo `Cargo.lock`; consulta [Diferencias entre Cargo.toml y Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html).\n\n## Empaquetar datos de flujo de trabajo como artefactos\n\nDespués de que se complete un flujo de trabajo, puedes cargar los artefactos que se den como resultado para su análisis o para usarlos en otro flujo de trabajo. Puedes agregar estos pasos de ejemplo al flujo de trabajo para cargar una aplicación a fin de que la use otro flujo de trabajo.\n\n```yaml copy\n      - name: Upload release artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: <my-app>\n          path: target/${{ matrix.BUILD_TARGET }}/<my-app>\n```\n\nA fin de usar el artefacto cargado en un trabajo diferente, asegúrate de que los flujos de trabajo tienen los permisos adecuados para el repositorio; consulta [Uso de GITHUB\\_TOKEN para la autenticación en flujos de trabajo](/es/actions/security-for-github-actions/security-guides/automatic-token-authentication). Puedes usar estos pasos de ejemplo para descargar la aplicación creada en el flujo de trabajo anterior y publicarla en GitHub.\n\n```yaml copy\n      - uses: actions/checkout@v6\n      - name: Download release artifact\n        uses: actions/download-artifact@v5\n        with:\n          name: <my-app>\n          path: ./<my-app>\n      - name: Publish built binary to GitHub releases\n      - run: |\n          gh release create --generate-notes ./<my-app>/<my-project>#<my-app>\n```"}