在 Travis-CI 的 packrat(而不是 CRAN)中使用 R 包源文件

Using R package source files in packrat (rather than CRAN) with Travis-CI

我正在使用 R package that is an RStudio project,我正在使用 packrat 保留我的项目所依赖的包源的本地副本。

我每次提交时都会得到 Travis-CI checking my R package,但每次 Travis 构建我的包时,它都会获得最新版本的依赖包,而不是我在 [=] 中得到的版本12=] 目录。

我可以在 richfitz/wood 中看到他似乎已经在他的 .travis.yml 文件中实现了这个目标:

env:
 USE_PACKRAT=1

和一个相当复杂的 make/packrat.mk 文件,这使得它一切正常。

我的问题是配置我的项目(例如我的 .travis.yml 文件)以告诉 Travis 机器从我在 github 的 packrat/ 目录中获取包的最简单方法是什么,而不是来自 CRAN?

经过反复试验和进一步阅读后,似乎可以使用 .travis.yml 文件,如下所示:

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r

language: R
sudo: false
cache: packages
install:
  - R -e "0" --args --bootstrap-packrat
warnings_are_errors: false

以上文件中的关键行是:

install:
  - R -e "0" --args --bootstrap-packrat

这将启动 R,并在本地 packrat 目录中构建 R 包,以便它们在 Travis 机器中可用。

在那之后,travis 将继续并尝试构建包,并且不需要联系 CRAN 来获取依赖项,因为它们已经可用(假设 packrat 按预期工作)。

我在这里发现了这个技巧:https://travis-ci.org/ChowHub/paper-pattern-similarity/builds/127262823 and at https://github.com/rstudio/packrat/issues/158. I've got it working here: https://travis-ci.org/benmarwick/mjbtramp/builds/157747326

优点 是我们可以在 travis 上构建我们在本地使用的完全相同的包。当我们在 travis 上构建时,我们不必从 CRAN 获取最新的包,现在我们可以更好地控制 travis 在我们的项目中构建的包版本。

缺点 是大大增加了 travis 上的构建时间。我的一个项目在切换到 packrat 后从 2-3 分钟缩短到 13-15 分钟。


更新 在下面的 Noam 问题和 Jim's comment 之后,我们似乎可以像这样使用 cache: 缓存 packrat 包:

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r

language: R
sudo: false
cache:
  directories: $TRAVIS_BUILD_DIR/packrat/
  packages: true
install:
  - R -e "0" --args --bootstrap-packrat
warnings_are_errors: false

在我的用例中,这大大减少了时间,回到 1-2 分钟。