我想使用GitHub Actions缓存(actions/cache@v2
)来保存brew install
命令的缓存,而不是一遍又一遍地重新下载所有依赖项。
这将使我的构建速度更快,我该如何实现?
我想使用GitHub Actions缓存(actions/cache@v2
)来保存brew install
命令的缓存,而不是一遍又一遍地重新下载所有依赖项。
这将使我的构建速度更快,我该如何实现?
在你的工作流程任务配置中:
steps:
- name: Update Homebrew
run: |
brew update --preinstall
cat "$(brew --repository)/Library/Taps/homebrew/homebrew-core/Formula/foo.rb" > .github/brew-formulae
- name: Configure Homebrew cache
uses: actions/cache@v2
with:
path: |
~/Library/Caches/Homebrew/foo--*
~/Library/Caches/Homebrew/downloads/*--foo-*
key: brew-${{ hashFiles('.github/brew-formulae') }}
restore-keys: brew-
- name: Install Homebrew dependencies
run: |
env HOMEBREW_NO_AUTO_UPDATE=1 brew install foo
这里的~/Library/Caches/Homebrew
对应于brew --cache
的输出。
与将整个目录存储到GitHub Actions缓存不同,上述配置仅存储与“foo”软件包相关的文件。这是因为GitHub提供的macOS映像中的Homebrew缓存目录已经包含了基本的Homebrew安装文件(您不需要再次存储)。
请注意,此缓存不太可能加快您的工作流程。安装Homebrew Bottle(默认情况下)通常具有与从GitHub / Azure自己的存储缓存下载相似的性能,因为瓶装文件是在bintray的CDN上提供的。
这很棘手,因为actions/cache依赖于将库放置在特定文件夹中,然后可以进行缓存和检索。而系统文件具有许多依赖关系,这使得每个库在此过程中都是独特的。
以下是三个选项,可帮助您完成此操作:
路径1:
我们可以考虑将brew软件包安装到特定文件夹中,但我们不能为每个软件包执行此操作,而只能为整个操作系统执行此操作。但是根据homebrew https://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywhere的说法,这不是一个好主意,因为可能会出现软件包无法正确安装的问题。此外,这基本上是对所有内容进行缓存,最终我们不知道它是否比仅安装所需的最新软件包更快。
路径2:
使用brew正常安装软件包,然后复制二进制文件。这里的警告是,您需要针对每个库执行此操作,因为有时依赖关系会失控。以下是一个例子:在GitHub Actions工作流中缓存APT软件包,通过在Linux中使用apt-get进行此过程,但您可以按照相同的流程操作brew。
路径3:
找到或创建自己的Docker文件镜像,并保持最新软件包同步。这将允许您始终具有最新版本,从而使您能够在从docker映像构建的容器内初始化步骤。这将满足您的系统依赖性。
jobs:
ci:
runs-on: ubuntu-latest
container:
image: <your-personalized-docker-image>
brew reinstall --build-from-source
(参见https://stackoverflow.com/a/19086854/1876449)。因此,缓存将大获全胜!我只想知道在这里需要做哪些部分来缓存两个包。我在GitHub Actions方面相当无用。我会尝试弄清楚,但像您这样的大师可能更懂! - Fortranpath
列表和软件包到brew install
命令中。 - p00ya- name: 如果 MPI 没有缓存,则在 macOS 上修复 gmp 和 mpfr if: steps.cache-mpi.outputs.cache-hit != 'true' && matrix.os == 'macos-10.15' run: | brew reinstall --build-from-source gmp mpfr
- Fortrancache-hit
的例子:https://github.com/jawang35/dotfiles/blob/master/.github/workflows/ci.yml#L16 - Melroy van den Berggtkmm3 3.x.x 已经安装,只是没有链接。
所以我在 GH Actions 中也执行了brew link gtkmm3
。但是构建仍然失败了!-- 检查模块 'gtkmm-3.0' -- 包 'giomm-2.4',由 'gtkmm-3.0' 要求,未找到
:( - Melroy van den Berg