knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
When building, deploying, or testing an renv-using project with continuous integration (CI) systems (e.g. GitHub Actions, GitLab CI, and others) you need some way to tell the CI system to use renv to restore the same packages that you're using locally.
The general idea is:
Call renv::snapshot()
on your local machine to generate renv.lock
.
Call renv::restore()
on your CI service to restore the project library
from renv.lock
.
Cache the project library and global renv cache on the CI service.
Note that this workflow is not generally a good fit for CRAN packages, because
CRAN itself runs R CMD check
using the latest version of all dependencies.
Here, we describe two common approaches for integrating renv with a GitHub Actions workflow:
r-lib/setup-renv
action.The r-lib organization offers some actions for R users, and among them a setup-renv
action is provided for projects using renv. To use this action, you can add the following steps to your workflow:
steps: - uses: actions/checkout@v3 - uses: r-lib/actions/setup-r@v2 - uses: r-lib/actions/setup-renv@v2
Using these steps will automatically perform the following actions:
install.packages("renv")
,with: profile:
key, that renv profile will be activated,renv::restore()
.After this, any steps using R will use the active renv project by default.
When using renv in your own custom GitHub action workflow, there are two main requirements:
renv::restore()
to restore packages using this cache to speed up installationAs an example, these steps might look like:
env: RENV_PATHS_ROOT: ~/.local/share/renv steps: - name: Cache packages uses: actions/cache@v1 with: path: ${{ env.RENV_PATHS_ROOT }} key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} restore-keys: | ${{ runner.os }}-renv- - name: Restore packages shell: Rscript {0} run: | if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") renv::restore()
See also the example on GitHub actions.
The following template can be used as a base when using renv with GitLab CI:
variables: RENV_CONFIG_REPOS_OVERRIDE: "http://cran.r-project.org" RENV_PATHS_CACHE: ${CI_PROJECT_DIR}/cache RENV_PATHS_LIBRARY: ${CI_PROJECT_DIR}/renv/library cache: key: ${CI_JOB_NAME} paths: - ${RENV_PATHS_CACHE} - ${RENV_PATHS_LIBRARY} before_script: - < ... other pre-deploy steps ... > - Rscript -e "if (!requireNamespace('renv', quietly = TRUE)) install.packages('renv')" - Rscript -e "renv::restore()"
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.