在brew安装中使用GitHub操作缓存



我想使用GitHub Actions缓存(actions/cache@v2(来保存brew install命令的缓存,而不是一遍又一遍地重新下载所有依赖项。

这将使我的构建更快,我如何实现它?

这很棘手,因为操作/缓存取决于您将库放在一个特定的文件夹中,然后可以对其进行缓存和检索。系统文件有很多依赖项,这使得每个库在这个过程中都是唯一的。

这里有三个选项,你可以采取来完成这个

路径1:

我们可以考虑将brew包安装到特定的文件夹中,但我们不能为每个包安装,而是为整个操作系统安装。但根据自制软件https://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-在任何地方,这都不是一个好主意,因为软件包安装不正确可能会出现问题。此外,这基本上是缓存所有的东西,最终我们不知道它是否会比安装您需要的最新软件包更快。

路径2:

像通常使用brew一样安装包,然后复制二进制文件。这里需要注意的是,您需要在每个库的基础上这样做,因为依赖关系有时可能会失控。以下是GitHub Actions工作流中缓存APT包的示例通过在linux中使用apt-get完成这个过程,但您可以在brew 中遵循相同的过程

路径3:

查找或创建您自己的docker文件映像,以便及时了解所需的最新软件包。这将允许您始终拥有最新的,并允许您从docker映像在容器构建中初始化步骤。这将满足您的系统依赖性。

jobs:
ci:
runs-on: ubuntu-latest
container:
image: <your-personalized-docker-image>

在您的工作流作业配置中:

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瓶子(默认(通常与从GitHub/AAzure自己的存储缓存下载具有类似的性能,因为瓶子文件是在bintray的CDN上提供的。

最新更新