Les GitHub Actions permettent de déclencher des actions lorsque l’on pousse sur une branche, lorsque la documentation d’un package a changé, lorsqu’il ya une demande de Pull request. Par exemple, dans le cadre de l’intégration continue, on veut lancer un R CMD check systématiquement lorsque l’on pousse sur la branche de développement.
Une action se compose de jobs, chaque job se compose d’une suite de steps.
Il suffit d’aller dans le dépôt du projet et de cliquer sur Actions. Il est alors possible de choisir un workflow par défaut. Ceci consiste à créer un ficher .yml dans le répertoire .github/workflows.
Par défaut dans le repo d’un package, le fichier .yml créé ressemble à
: R
name
:
on push:
branches: [ master ]
:
pull_request branches: [ master ]
:
jobs build:
runs-on: macOS-latest
:
strategy matrix:
r-version: [3.5, 3.6]
:
steps - uses: actions/checkout@v2
- name: Set up R ${{ matrix.r-version }}
: r-lib/actions/setup-r@ffe45a39586f073cc2e9af79c4ba563b657dc6e3
uses:
with r-version: ${{ matrix.r-version }}
- name: Install dependencies
: |
run install.packages(c("remotes", "rcmdcheck"))
::install_deps(dependencies = TRUE)
remotes: Rscript {0}
shell- name: Check
: rcmdcheck::rcmdcheck(args = "--no-manual", error_on = "error")
run: Rscript {0} shell
Ce script signifie, à chaque push ou pull request sur la branche master, on va exécuter le job build sur la dernière plateforme macOS. Ce job est constitué des steps suivants.
uses: actions/checkout@v2
checkout du package du dernier commit.${{ matrix.r-version }}
il installe la version de R spécifiéeremotes
et cmdcheck
L’idée pour un package serait de lancer la vérification du package chaque fois que l’on pousse sur la branche dev
et déployer le site web chaque fois que l’on pousse sur la branche master.
Le package usethis
est là pour nous aider, on va définir deux worflows : le premier pour les check, le second pour déployer le site.
library(usethis)
::use_github_action_check_standard() usethis
Cette commande va créer le fichier R-CMD-check.yaml
que l’on peut éditer pour spécifier que l’on fait les check sur la branche développement plutôt que sur la branche master. Il suffit de remplacer
:
on push:
branches:
- master
:
pull_request branches:
- master
par
:
on push:
branches:
- dev
:
pull_request branches:
- dev
Dans l’exemple ci-dessus la matrice de check est la suivante:
-CMD-check:
R runs-on: ${{ matrix.config.os }}
: ${{ matrix.config.os }} (${{ matrix.config.r }})
name
:
strategy fail-fast: false
:
matrix config:
- {os: windows-latest, r: 'release'}
- {os: macOS-latest, r: 'release'}
- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
que l’on peut modifier à souhait.
Remarque: les dépendances autres que celles de CRAN seront bien installées si elles sont correctement décrites dans le fichier DESCRIPTION du package. Par exemple, les dépendances de Bioconductor doivent être spécifiées dans le champ biocViews:
du fichier DESCRIPTION.
use_github_action("pkgdown.yaml")
et c’est tout