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.

Une première GitHub Action créée depuis Github

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.

Utiliser des actions classiques pour R grâce à usethis

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.

Pour les check sur la branche de développement

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:
      - master

par

on:
  push:
    branches:
      - dev
  pull_request:
    branches:
      - dev

Dans 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.

Pour le déploiement du site web

use_github_action("pkgdown.yaml")

et c’est tout

Ressources