r - 缓存 GitHub Actions R 包或以其他方式加速安装?
问题描述
我整理了一个 Github Actions Workflow,它将 R 和 R 包安装到运行器,然后在 Github 存储库上运行单元测试。
该过程目前有效,但相对较慢,工作流程需要 4 到 8 分钟,其中大部分时间用于安装 R 包。我想知道我是否正在使用我的 Github Action 做一些次优的事情,可以改进以加快整个工作流程。特别是,我想知道我是否可以缓存 R 或 R 包安装以加快进程,但我还没有看到很多关于它如何工作的信息——大多数关于使用 Github Actions 进行缓存的讨论都与其他语言,例如 npm。
有没有人有任何想法?
name: Run R Tests
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: r-lib/actions/setup-r@v1
with:
r-version: '3.5.3' # The R version to download (if necessary) and use.
- name: Install Packages
run: Rscript -e 'install.packages(c("readr", "magrittr", "testthat", "here"))'
- name: Get current directory
run: pwd
- name: Run testthat
run: Rscript './run_tests.R'
解决方案
“这一切都取决于”你想做什么,但我在这篇文章下面的几篇文章中描述了我的设置(你可能需要稍微滚动一下旧文章)。最近的一个给出了很好的概述和介绍,并有一个视频。
下面的更多帖子详细说明了 RSPM 和 BSPM(我的默认设置)。我满足于主要只在 Linux 上运行(有时在 macOS 上),但我的最小测试时间是每个包不到两分钟,因为我严重依赖于快速可靠安装的预制.deb
二进制文件。在简单的情况下,它也可以使用 macOS 的默认操作(但是当源代码需要 Fortran 编译器等时,我看到 macOS 失败;我只是跳过了那里的 macOS 构建)。
我使用的东西(并在r-ci 网站上提供)的一个附带好处是,如果一个人选择(或被迫)再次迁移,就像我们中的许多人从 Travis 到 GitHub Actions 所做的那样,它在其他 CI 提供商的工作方式相同.
推荐阅读
- android - 如何使用 OnNavigationItemSelectedListener 关闭片段以查看下面的活动
- javascript - 如何在身份验证期间更改 this.state 状态?Firebase + 反应路由器
- javascript - React MUI:持久+响应式抽屉
- spring-security - 缺少 Id_Token Spring Oauth2 身份验证服务器和 mod_auth_openidc
- amazon-web-services - Neo4j:服务不可用:Websocket 连接失败
- angular - 在 Angular 7 中检测到循环依赖
- python - 如何使用 Python 多进程 apply_async 获得精确的超时?
- javascript - 如何从异步 Lambda 处理程序中的迭代器调用 DynamoDB
- c# - 作为 List 属性的 XML 数组反序列化失败
- firebase - 没有为该类定义方法“allowInterop”...尝试使用 Firestore 时出现 Dart 控制台应用程序错误