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 à
name: R
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 }}
uses: r-lib/actions/setup-r@ffe45a39586f073cc2e9af79c4ba563b657dc6e3
with:
r-version: ${{ matrix.r-version }}
- name: Install dependencies
run: |
install.packages(c("remotes", "rcmdcheck"))
remotes::install_deps(dependencies = TRUE)
shell: Rscript {0}
- name: Check
run: rcmdcheck::rcmdcheck(args = "--no-manual", error_on = "error")
shell: Rscript {0}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 cmdcheckL’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)
usethis::use_github_action_check_standard()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:
- masterpar
on:
push:
branches:
- dev
pull_request:
branches:
- devDans l’exemple ci-dessus la matrice de check est la suivante:
R-CMD-check:
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.config.os }} (${{ matrix.config.r }})
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