Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Création et test de code Ruby

Vous pouvez créer un workflow d’intégration continue (CI) pour générer et tester votre projet Ruby.

Remarque : Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server. Vous pouvez voir plus d’informations sur le support futur planifié dans la GitHub public roadmap.

Introduction

Ce guide explique comment créer un workflow d’intégration continue (CI) qui génère et teste une application Ruby. Si vos tests CI réussissent, vous pouvez déployer votre code ou publier un gem.

Prérequis

Il est recommandé d’avoir une compréhension de base de Ruby, du YAML, des options de configuration de workflows et de la création de fichiers de workflow. Pour plus d'informations, consultez les pages suivantes :

Utilisation du workflow de démarrage Ruby

GitHub fournit un workflow de démarrage Ruby qui fonctionnera pour la plupart des projets Ruby. Pour plus d’informations, consultez Workflow de démarrage Ruby.

Pour commencer rapidement, ajoutez le workflow de démarrage au répertoire .github/workflows de votre dépôt. Le workflow indiqué ci-dessous suppose que la branche par défaut de votre dépôt est main.

# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Ruby

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

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby
        uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
        with:
          ruby-version: '3.1'
      - name: Install dependencies
        run: bundle install
      - name: Run tests
        run: bundle exec rake

Spécification de la version Ruby

Le moyen le plus simple de spécifier une version Ruby consiste à utiliser l’action ruby/setup-ruby fournie par Ruby sur GitHub. L’action ajoute toute version Ruby prise en charge à PATH pour chaque exécution de travail d’un workflow. Pour plus d’informations et pour connaître les versions Ruby disponibles, consultez ruby/setup-ruby.

L’action ruby/setup-ruby de Ruby est recommandée pour utiliser Ruby avec GitHub Actions, car elle garantit un comportement cohérent entre les différents exécuteurs et les différentes versions de Ruby.

L’action setup-ruby prend une version Ruby en tant qu’entrée et configure cette version sur l’exécuteur.

steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
  with:
    ruby-version: '3.1' # Not needed with a .ruby-version file
- run: bundle install
- run: bundle exec rake

Vous pouvez également effectuer le check-in d’un fichier .ruby-version à la racine de votre dépôt pour que setup-ruby utilise la version définie dans ce fichier.

Effectuer des tests avec plusieurs versions de Ruby

Vous pouvez ajouter une stratégie de matrice pour exécuter votre workflow avec plusieurs versions de Ruby. Par exemple, vous pouvez tester votre code par rapport aux dernières versions correctives des versions 3.1, 3.0 et 2.7.

strategy:
  matrix:
    ruby-version: ['3.1', '3.0', '2.7']

Chaque version de Ruby spécifiée dans le tableau ruby-version crée un travail qui exécute les mêmes étapes. Le contexte ${{ matrix.ruby-version }} est utilisé pour accéder à la version du travail actuel. Pour plus d’informations sur les stratégies de matrice et les contextes, consultez « Syntaxe des workflows pour GitHub Actions » et « Contextes ».

Le workflow complet mis à jour avec une stratégie de matrice peut ressembler à ceci :

# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Ruby CI

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

jobs:
  test:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        ruby-version: ['3.1', '3.0', '2.7']

    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby ${{ matrix.ruby-version }}
        uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
        with:
          ruby-version: ${{ matrix.ruby-version }}
      - name: Install dependencies
        run: bundle install
      - name: Run tests
        run: bundle exec rake

Installation de dépendances avec Bundler

L’action setup-ruby installe automatiquement Bundler. La version est déterminée par votre fichier gemfile.lock. Si aucune version n’est présente dans votre lockfile, la dernière version compatible sera installée.

steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
  with:
    ruby-version: '3.1'
- run: bundle install

Tester votre code avec la matrice

L’exemple de matrice suivant teste toutes les versions stables et versions principales de MRI, JRuby et TruffleRuby sur Ubuntu et macOS.

# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Matrix Testing

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

jobs:
  test:
    runs-on: ${{ matrix.os }}-latest
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu, macos]
        ruby: [2.5, 2.6, 2.7, head, debug, jruby, jruby-head, truffleruby, truffleruby-head]
    continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
    steps:
      - uses: actions/checkout@v2
      - uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
        with:
          ruby-version: ${{ matrix.ruby }}
      - run: bundle install
      - run: bundle exec rake

Linting de votre code

L’exemple suivant installe rubocop, et l’utilise pour effectuer le linting de tous les fichiers. Pour plus d’informations, consultez RuboCop. Vous pouvez configurer Rubocop pour décider des règles de linting.

# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Linting

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
        with:
          ruby-version: 2.6
      - run: bundle install
      - name: Rubocop
        run: rubocop

Publication de gems

Vous pouvez configurer votre workflow pour publier votre package Ruby dans n’importe quel registre de packages lorsque vos tests d’intégration continue réussissent.

Vous pouvez stocker tous les jetons d’accès ou informations d’identification nécessaires pour publier votre package à l’aide de secrets de dépôt. L’exemple suivant crée et publie un package sur GitHub Package Registry et RubyGems.

# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Ruby Gem

on:
  # Manually publish
  workflow_dispatch:
  # Alternatively, publish whenever changes are merged to the `main` branch.
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    name: Build + Publish
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read

    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.6
        uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
        with:
          ruby-version: 2.6
      - run: bundle install

      - name: Publish to GPR
        run: |
          mkdir -p $HOME/.gem
          touch $HOME/.gem/credentials
          chmod 0600 $HOME/.gem/credentials
          printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
          gem build *.gemspec
          gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
        env:
          GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
          OWNER: ${{ github.repository_owner }}

      - name: Publish to RubyGems
        run: |
          mkdir -p $HOME/.gem
          touch $HOME/.gem/credentials
          chmod 0600 $HOME/.gem/credentials
          printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
          gem build *.gemspec
          gem push *.gem
        env:
          GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"