{"meta":{"title":"Crear y probar en Ruby","intro":"Puedes crear un flujo de trabajo de integración continua (CI) para crear y probar tu proyecto de Ruby.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/es/enterprise-cloud@latest/actions/tutorials","title":"Tutoriales"},{"href":"/es/enterprise-cloud@latest/actions/tutorials/build-and-test-code","title":"Crea y prueba tu código"},{"href":"/es/enterprise-cloud@latest/actions/tutorials/build-and-test-code/ruby","title":"Ruby"}],"documentType":"article"},"body":"# Crear y probar en Ruby\n\nPuedes crear un flujo de trabajo de integración continua (CI) para crear y probar tu proyecto de Ruby.\n\n## Introducción\n\nEsta guía te muestra cómo crear un flujo de trabajo de integración contínua (IC) que cree y pruebe una aplicación de Ruby. Si tus pruebas de IC pasan, podrías querer desplegar tu código o publicar una gema.\n\n## Prerrequisitos\n\nTe recomendamos que tengas una comprensión básica de Ruby, YAML, las opciones de configuración de flujo de trabajo y de cómo crear un archivo de flujo de trabajo. Para más información, consulte:\n\n* [Más información sobre GitHub Actions](/es/enterprise-cloud@latest/actions/learn-github-actions)\n* [Ruby en 20 minutos](https://www.ruby-lang.org/en/documentation/quickstart/)\n\n## Uso de una plantilla de flujo de trabajo de Ruby\n\nPara comenzar rápidamente, agregue una plantilla de flujo de trabajo al directorio `.github/workflows` del repositorio.\n\nGitHub proporciona una la plantilla de flujo de trabajo para Ruby que debería funcionar para la mayoría de los proyectos de Ruby. 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 \"Ruby\".\n\n5. Filtra la selección de flujos de trabajo con un clic en **Integración continua**.\n\n6. En el flujo de trabajo «Ruby», haz clic en **Configurar**.\n\n7. Edita el flujo de trabajo según sea necesario. Por ejemplo, cambia las versiones de Ruby que desea usar.\n\n   > \\[!NOTE]\n   >\n   > * Esta la plantilla de flujo de trabajo contiene una acción que no está certificada por GitHub. Las acciones que proporciona un tercero se rigen por términos de servicio, directivas de privacidad y documentación externos.\n   > * Si usas acciones de terceros, debes usar una versión especificada por un SHA de confirmación. Si se revisa la acción y deseas usar la versión más reciente, deberás actualizar el SHA. También puedes especificar a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia. Para más información, consulta [Referencia de uso seguro](/es/enterprise-cloud@latest/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions).\n\n8. Haga clic en **Commit changes** (Confirmar cambios).\n\nEl archivo de flujo de trabajo `ruby.yml` se agrega al directorio `.github/workflows` de tu repositorio.\n\n## Especificar la versión de Ruby\n\nLa manera más fácil de especificar una versión de Ruby es mediante la acción `ruby/setup-ruby` proporcionada por la organización de Ruby en GitHub. La acción agrega cualquier versión de Ruby que sea compatible a `PATH` para cada ejecución de trabajo dentro de un flujo de trabajo. Para más información y obtener las versiones de Ruby disponibles, vea [`ruby/setup-ruby`](https://github.com/ruby/setup-ruby).\n\nEl uso de la acción `ruby/setup-ruby` de Ruby es la forma recomendada de usar Ruby con GitHub Actions, ya que garantiza un comportamiento coherente en diferentes ejecutores y versiones diferentes de Ruby.\n\nLa acción `setup-ruby` toma una versión de Ruby como entrada y la configura en el ejecutor.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\nsteps:\n- uses: actions/checkout@v6\n- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n  with:\n    ruby-version: '3.1' # Not needed with a .ruby-version file\n- run: bundle install\n- run: bundle exec rake\n```\n\nComo alternativa, puede insertar un archivo `.ruby-version` en la raíz del repositorio y `setup-ruby` usará la versión definida en ese archivo.\n\n## Hacer pruebas con varias versiones de Ruby\n\nPuedes agregar una estrategia de matriz para ejecutar tu flujo de trabajo con más de una versión de Ruby. Pro ejemplo, puedes probar tu código contra los últimos lanzamientos de parche de las versiones 3.1, 3.0 y 2.7.\n\n```yaml\nstrategy:\n  matrix:\n    ruby-version: ['3.1', '3.0', '2.7']\n```\n\nCada versión de Ruby que se especifica en la matriz `ruby-version` crea un trabajo que ejecuta los mismos pasos. El contexto `${{ matrix.ruby-version }}` se usa para acceder a la versión del trabajo actual. Para más información sobre las estrategias y contextos de matriz, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/enterprise-cloud@latest/actions/using-workflows/workflow-syntax-for-github-actions) y [Contextos de referencia](/es/enterprise-cloud@latest/actions/learn-github-actions/contexts).\n\nEl flujo de trabajo ya actualizado en su totalidad con una estrategia de matriz podría verse así:\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\n\n# GitHub recomienda anclar acciones a un SHA de confirmación.\n# Para obtener una versión más reciente, debes actualizar el SHA.\n# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.\n\nname: Ruby CI\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  test:\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        ruby-version: ['3.1', '3.0', '2.7']\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby ${{ matrix.ruby-version }}\n        uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n        with:\n          ruby-version: ${{ matrix.ruby-version }}\n      - name: Install dependencies\n        run: bundle install\n      - name: Run tests\n        run: bundle exec rake\n```\n\n## Instalar dependencias con Bundler\n\nLa acción `setup-ruby` instalará automáticamente el empaquetador. La versión viene determinada por el archivo `gemfile.lock`. Si no hay alguna versión presente en tu archivo de bloqueo, entonces se instalará la última versión compatible.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\nsteps:\n- uses: actions/checkout@v6\n- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n  with:\n    ruby-version: '3.1'\n- run: bundle install\n```\n\n### Almacenar dependencias en caché\n\nLas acciones `setup-ruby` proporcionan un método para controlar automáticamente el almacenamiento en caché de las gemas entre ejecuciones.\n\nPara habilitar el guardado en caché, configura lo siguiente.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\nsteps:\n- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n  with:\n    bundler-cache: true\n```\n\nEsto configurará el empaquetador para instalar las gemas en `vendor/cache`. Para cada ejecución correcta de tu flujo de trabajo, GitHub Actions almacenará esta carpeta en caché y volverá a descargarse para cualquier ejecución de flujo de trabajo posterior. Se utiliza un hash de su `gemfile.lock` y de la versión de Ruby como clave de caché. Si instalas cualquier gema nueva o cambias una versión, el caché se invalidará y bundler realizará una instalación desde cero.\n\n```\n          **Cacheo sin Setup-Ruby**\n```\n\nPara tener mayor control sobre el almacenamiento en caché, puedes usar la acción `actions/cache` directamente. Para más información, consulta [Referencia de almacenamiento en caché de dependencias](/es/enterprise-cloud@latest/actions/using-workflows/caching-dependencies-to-speed-up-workflows).\n\n```yaml\nsteps:\n- uses: actions/cache@v4\n  with:\n    path: vendor/bundle\n    key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}\n    restore-keys: |\n      ${{ runner.os }}-gems-\n- name: Bundle install\n  run: |\n    bundle config path vendor/bundle\n    bundle install --jobs 4 --retry 3\n```\n\nSi estás utilizando una compilación de matriz, deberás incluir las variables de dicha matriz en tu clave de caché. Por ejemplo, si tiene una estrategia de matriz para diferentes versiones de Ruby (`matrix.ruby-version`) y sistemas operativos (`matrix.os`), los pasos de flujo de trabajo podrían tener este aspecto:\n\n```yaml\nsteps:\n- uses: actions/cache@v4\n  with:\n    path: vendor/bundle\n    key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby-version }}-${{ hashFiles('**/Gemfile.lock') }}\n    restore-keys: |\n      bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby-version }}-\n- name: Bundle install\n  run: |\n    bundle config path vendor/bundle\n    bundle install --jobs 4 --retry 3\n```\n\n## Probar tu código en matrices\n\nLa siguiente matriz de ejemplo prueba todos los lanzamientos estables y versiones principales de MRI, JRuby y TruffleRuby en Ubuntu y macOS.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\n\n# GitHub recomienda anclar acciones a un SHA de confirmación.\n# Para obtener una versión más reciente, debes actualizar el SHA.\n# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.\n\nname: Matrix Testing\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  test:\n    runs-on: ${{ matrix.os }}-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu, macos]\n        ruby: [2.5, 2.6, 2.7, head, debug, jruby, jruby-head, truffleruby, truffleruby-head]\n    continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}\n    steps:\n      - uses: actions/checkout@v6\n      - uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n        with:\n          ruby-version: ${{ matrix.ruby }}\n      - run: bundle install\n      - run: bundle exec rake\n```\n\n## Limpiar tu código\n\nEn el ejemplo siguiente se instala `rubocop` y se usa para el lint de todos los archivos. Para más información, vea [RuboCop](https://github.com/rubocop-hq/rubocop). Puede [configurar Rubocop](https://docs.rubocop.org/rubocop/configuration.html) para decidir las reglas de linting específicas.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\n\n# GitHub recomienda anclar acciones a un SHA de confirmación.\n# Para obtener una versión más reciente, debes actualizar el SHA.\n# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.\n\nname: Linting\n\non: [push]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n        with:\n          ruby-version: '2.6'\n      - run: bundle install\n      - name: Rubocop\n        run: rubocop -f github\n```\n\nEspecificar `-f github` significa que la salida de RuboCop estará en el formato de anotación de GitHub. Los errores de linting se mostrarán en línea en la pestaña **Archivos modificados** de la solicitud de incorporación de cambios que los introduce.\n\n## Publicar gemas\n\nPuedes configurar tu flujo de trabajo para publicar tu paquete de Ruby en cualquier registro de paquetes que quieras cuando pasen tus pruebas de IC.\n\nPuedes almacenar todos los tokens de acceso o credenciales necesarios para publicar tu paquete utilizando secretos del repositorio. En el ejemplo siguiente se crea y publica un paquete en `GitHub Package Registry` y `RubyGems`.\n\n```yaml\n# Este flujo de trabajo usa acciones que no GitHub no certifica.\n# Estas las proporcionan entidades terceras y las gobiernan\n# condiciones de servicio, políticas de privacidad y documentación de soporte\n# en línea.\n\n# GitHub recomienda anclar acciones a un SHA de confirmación.\n# Para obtener una versión más reciente, debes actualizar el SHA.\n# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.\n\nname: Ruby Gem\n\non:\n  # Manually publish\n  workflow_dispatch:\n  # Alternatively, publish whenever changes are merged to the `main` branch.\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    name: Build + Publish\n    runs-on: ubuntu-latest\n    permissions:\n      packages: write\n      contents: read\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby 2.6\n        uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1\n        with:\n          ruby-version: '2.6'\n      - run: bundle install\n\n      - name: Publish to GPR\n        run: |\n          mkdir -p $HOME/.gem\n          touch $HOME/.gem/credentials\n          chmod 0600 $HOME/.gem/credentials\n          printf -- \"---\\n:github: ${GEM_HOST_API_KEY}\\n\" > $HOME/.gem/credentials\n          gem build *.gemspec\n          gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem\n        env:\n          GEM_HOST_API_KEY: \"Bearer ${{secrets.GITHUB_TOKEN}}\"\n          OWNER: ${{ github.repository_owner }}\n\n      - name: Publish to RubyGems\n        run: |\n          mkdir -p $HOME/.gem\n          touch $HOME/.gem/credentials\n          chmod 0600 $HOME/.gem/credentials\n          printf -- \"---\\n:rubygems_api_key: ${GEM_HOST_API_KEY}\\n\" > $HOME/.gem/credentials\n          gem build *.gemspec\n          gem push *.gem\n        env:\n          GEM_HOST_API_KEY: \"${{secrets.RUBYGEMS_AUTH_TOKEN}}\"\n```"}