Github 操作/缓存在什么范围内工作?

问题描述

我不太明白 Github actions/cache 在多大程度上起作用,我的意思是:

如果我提出拉取请求,然后在同一个拉取请求中再添加 1 个提交,则缓存工作正常,但是如果我在同一分支中创建新的拉取请求 - 缓存将重置并重新开始,但为什么呢?

有没有办法将文件缓存扩展到所有 yml 文件,以便每个拉取请求使用现有缓存?

因为事实证明,为了加快工作速度 - 开发人员总是需要将他们的工作投入到一个分支中,这在某种程度上听起来像是无稽之谈。

信息

我的缓存key是这样形成的

- uses: actions/cache@v2
  id: composer-cache
  with:
     path: .github/docker/development/PHP-cli/composer/cache
     key: ${{ runner.os }}-develop-composer-${{ hashFiles('src/composer.lock') }}
     restore-keys: |
        ${{ runner.os }}-develop-composer-

解决方法

是的,GitHub 的缓存操作跨分支具有不直观的行为。拉取请求工作流不共享,标签工作流永远不会获得缓存命中。

the docs(有用的部分加粗):

工作流可以访问和恢复在当前分支、基本分支(包括分叉存储库的基本分支)或默认分支(通常为 main)中创建的缓存。 例如,可以从任何拉取请求访问在默认分支上创建的缓存。此外,如果分支 feature-b 具有基本分支 feature-a,则在 { {1}} 将有权访问在默认分支 (feature-b)、mainfeature-a 中创建的缓存。

因此,解决方案是通过推送到 feature-b 以及您喜欢的任何基础分支来创建一个单独的工作流,以便为拉取请求和标签保留一个新的缓存。