This chapter summarizes our guidelines about continuous integration after explaining what continuous integration is.
Along with last chapter, it forms our guidelines for Software Peer Review.
All rOpenSci packages must use one form of continuous integration. This ensures that all commits, pull requests and new branches are run through
R CMD check. rOpenSci packages’ continuous integration must also be linked to a code coverage service, indicating how many lines are covered by unit tests.
Both test status and code coverage should be reported via badges in your package README.
usethis package offers a few functions for continuous integration setup, see the documentation.
Details will be provided below for different services.
Different continuous integration services will support builds on different operating systems.
R packages should have CI for all platforms when they contain:
Dependencies on other languages
Packages with system calls
Text munging such as getting people’s names (in order to find encoding issues).
Anything with file system / path calls
In case of any doubt regarding the applicability of these criteria to your package, it’s better to add CI for all platforms, and most often not too much hassle.
We require that rOpenSci packages are tested against the latest, previous and development versions of R to ensure both backwards and forwards compatibility with base R.
Details of how to run tests/checks using different versions of R locally can be found in the R-hub vignette on running Local Linux checks with Docker.
You can fine tune the deployment of tests with each versions by using a testing matrix.
If you develop a package depending on or intended for Bioconductor, you might find biocthis relevant.
You can use these tips to minimize build time on CI:
- Cache installation of packages. The default r-lib/actions do this.
We recommend moving away from Travis.
For continuous integration on Windows, see R + AppVeyor. Set it up using
Here are tips to minimize AppVeyor build time:
Cache installation of packages. Example in a config file. It’ll already be in the config file if you set AppVeyor CI up using
Enable rolling builds.
We no longer transfer AppVeyor projects to ropensci AppVeyor account so after transfer of your repo to rOpenSci’s “ropensci” GitHub organization the badge will be
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/ropensci/pkgname?branch=master&svg=true)](https://ci.appveyor.com/project/individualaccount/pkgname).
Continuous integration should also include reporting of test coverage via a testing service such as Codecov or Coveralls. See the README for the covr package for instructions, as well
If you run coverage on several CI services the results will be merged.
After transfer to rOpenSci’s “ropensci” GitHub organization, each push to the repo will be built on OpenCPU and the person committing will receive a notification email. This is an additional CI service for package authors that allows for R functions in packages to be called remotely via https://ropensci.ocpu.io/ using the opencpu API. For more details about this service, consult the OpenCPU help page that also indicates where to ask questions.
After transfer to rOpenSci’s “ropensci” GitHub organization, a pkgdown website will be built for your package after each push to the GitHub repo. You can find the status of these builds at
https://dev.ropensci.org/job/package_name, e.g. for
magick; and the website at
https://docs.ropensci.org/package_name, e.g. for
magick. The website build will use your pkgdown config file if you have one, except for the styling that will use the
rotemplate package. Please report bugs, questions and feature requests about the central builds at https://github.com/ropensci/docs/ and about the template at https://github.com/ropensci-org/rotemplate/.