我正在研究R包,并将GitHub Action(GHA)用作持续集成(CI)提供程序。我使用actions/cache
缓存R程序包(依赖项)。现在,我想清除所有缓存。我该怎么办?
on: push
name: R-CMD-check
jobs:
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: 'devel'}
- {os: macOS-latest, r: 'release'}
env:
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
RSPM: ${{ matrix.config.rspm }}
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v2
- uses: r-lib/actions/setup-r@master
- name: Query dependencies
run: |
repos <- c("https://r-hyperspec.github.io/hySpc.pkgs/", getOption("repos"))
saveRDS("remotes::dev_package_deps(dependencies = TRUE)", ".github/depends.Rds", version = 2)
writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version")
shell: Rscript {0}
- name: Cache R packages
if: runner.os != 'Windows'
uses: actions/cache@v1
with:
path: ${{ env.R_LIBS_USER }}
key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }}
restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-
- name: Install dependencies
run: remotes::install_deps(dependencies = TRUE)
shell: Rscript {0}
- name: Session info
run: |
options(width = 100)
pkgs <- installed.packages()[, "Package"]
sessioninfo::session_info(pkgs, include_base = TRUE)
shell: Rscript {0}
答案 0 :(得分:3)
您目前无法强制清除缓存,并且在https://github.com/actions/cache/issues/2时似乎有开放功能请求。如果我是您,我也会在此处发布请求,以便他们知道更多的人希望实现该功能。
有关此操作的一些注意事项:
操作中没有参数,甚至没有基于此操作的工具包中的参数。
深入了解工具包代码后,他们使用缓存API url来完成所有出色的工作。这意味着我们甚至不知道该api是否支持它,并假设我们尝试对其进行测试并通过直接点击它来查看它还提供了什么。这是api调用的行,其基本网址来自env ACTIONS_CACHE_URL
npm软件包作为参考https://www.npmjs.com/package/@actions/cache
如果我们退后一步,现在回到github文档,我们已经深入研究了动作/缓存代码及其工作方式,
有两件事要注意,
Once you create a cache, you cannot change the contents of an existing
cache but you can create a new cache with a new key.
GitHub will remove any cache entries that have not been accessed in over 7 days.
答案 1 :(得分:3)
正如corresponding issue中指出的那样,目前尚无清除缓存的本地解决方案。
但是,有两种使用新缓存的实际解决方法。这与清除当前缓存并不完全相同,但是可以完成工作。
为此,您必须更改缓存key
(和任何restore-keys
)。因为如果密钥不同,则认为这是高速缓存未命中,因此您将从新密钥开始。
您可以通过修改工作流程文件(例如,添加版本号)来更改缓存键:
key: ${{ runner.os }}-mycache-v1
或者,如果您更喜欢使用UI,则可以滥用secrets:
key: ${{ runner.os }}-mycache-${{ secrets.CACHE_VERSION }}
答案 2 :(得分:1)
@GegznaV,您可以使用tmate之类的东西,并通过切入赛跑者来手动清除缓存。