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 dâun modĂšle de workflow Ruby
Pour démarrer rapidement, ajoutez un modÚle de workflow au répertoire .github/workflows
de votre référentiel.
GitHub fournit un modĂšle de workflow pour Ruby qui devrait fonctionner pour la plupart des projets Ruby. Les sections suivantes de ce guide donnent des exemples de la maniĂšre dont vous pouvez personnaliser ce modĂšle de workflow.
-
Sur GitHub, accédez à la page principale du référentiel.
-
Sous le nom de votre dépÎt, cliquez sur Actions.
-
Si vous disposez dĂ©jĂ dâun workflow dans votre dĂ©pĂŽt, cliquez sur Nouveau workflow.
-
La page « Choisir un workflow » présente une sélection de modÚles de workflow recommandés. Recherchez « ruby ».
-
Filtrez la sélection des flux de travail en cliquant sur Intégration continue.
-
Dans le flux de travail « Ruby », cliquez sur Configurer.
-
Modifiez le workflow en fonction des besoins. Par exemple, modifiez les versions de Ruby que vous voulez utiliser.
Remarque
- Ce modĂšle de workflow contient une action qui nâest pas certifiĂ©e par GitHub. Elles sont fournies par un tiers et sont rĂ©gies par des conditions dâutilisation du service, une politique de confidentialitĂ© et une documentation de support distinctes.
- Si vous utilisez des actions de tiers, vous devez utiliser une version spĂ©cifiĂ©e par un commit SHA. Si lâaction est rĂ©visĂ©e et que vous voulez utiliser la version la plus rĂ©cente, vous devez mettre Ă jour le SHA. Vous pouvez spĂ©cifier une version en faisant rĂ©fĂ©rence Ă une balise ou Ă une branche, mais lâaction peut changer sans avertissement. Pour plus dâinformations, consultez « Informations de rĂ©fĂ©rence sur lâutilisation sĂ©curisĂ©e ».
-
Cliquez sur Valider les changements.
Le fichier de workflow ruby.yml
est ajoutĂ© Ă lâannuaire .github/workflows
de votre référentiel.
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@v4
- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
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 « Workflow syntax for GitHub Actions » et « RĂ©fĂ©rence sur les contextes ».
Le workflow complet mis à jour avec une stratégie de matrice peut ressembler à ceci :
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions dâutilisation du service, une politique de confidentialitĂ© et un support distincts.
# documentation en ligne.
# GitHub recommande dâĂ©pingler les actions Ă un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# 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@v4
- name: Set up Ruby ${{ matrix.ruby-version }}
uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
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@v4
- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
with:
ruby-version: '3.1'
- run: bundle install
Mise en cache des dépendances
Les actions setup-ruby
fournissent une méthode pour gérer automatiquement la mise en cache de vos gemmes entre les exécutions.
Pour activer la mise en cache, définissez les éléments suivants.
steps:
- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
with:
bundler-cache: true
Cela configurera Bundler de maniĂšre Ă installer vos gems sur vendor/cache
. Pour chaque exécution réussie de votre workflow, ce dossier sera mis en cache par GitHub Actions, puis re-téléchargé pour les exécutions de workflows suivantes. Un hachage de votre gemfile.lock
et la version de Ruby sont utilisés comme clé de cache. Si vous installez de nouveaux gems ou modifiez une version, le cache ne sera plus valide et Bundler effectuera une nouvelle installation.
Mise en cache sans setup-ruby
Pour mieux contrĂŽler la mise en cache, vous pouvez utiliser lâaction actions/cache
directement. Pour plus dâinformations, consultez « RĂ©fĂ©rence sur la mise en cache des dĂ©pendances ».
steps:
- uses: actions/cache@v4
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
Si vous utilisez une build de matrice, vous devez inclure les variables de matrice dans votre clé de cache. Par exemple, si vous avez une stratégie de matrice pour différentes versions de Ruby (matrix.ruby-version
) et diffĂ©rents systĂšmes dâexploitation (matrix.os
), vos étapes de workflows peuvent ressembler à ceci :
steps:
- uses: actions/cache@v4
with:
path: vendor/bundle
key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby-version }}-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby-version }}-
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
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.
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions dâutilisation du service, une politique de confidentialitĂ© et un support distincts.
# documentation en ligne.
# GitHub recommande dâĂ©pingler les actions Ă un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# 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@v4
- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
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.
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions dâutilisation du service, une politique de confidentialitĂ© et un support distincts.
# documentation en ligne.
# GitHub recommande dâĂ©pingler les actions Ă un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# 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@v4
- uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
with:
ruby-version: '2.6'
- run: bundle install
- name: Rubocop
run: rubocop -f github
La spécification -f github
signifie que la sortie RuboCop sera dans le format dâannotation GitHub. Toutes les erreurs de linting seront affichĂ©es en ligne dans lâonglet Fichiers modifiĂ©s de la demande de traction qui les a introduites.
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
.
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions dâutilisation du service, une politique de confidentialitĂ© et un support distincts.
# documentation en ligne.
# GitHub recommande dâĂ©pingler les actions Ă un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# 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@v4
- name: Set up Ruby 2.6
uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
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}}"