在Brew安装中使用GitHub Actions缓存

时间:2020-08-31 13:57:15

标签: macos homebrew github-actions

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

这会使我的构建速度更快,如何实现?

2 个答案:

答案 0 :(得分:1)

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

您可以通过以下三种方式完成此操作

路径1:

我们可以考虑将brew软件包安装到特定的文件夹中,但是我们不能针对每个软件包执行此操作,而是针对整个OS。但是根据自制软件https://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywhere的说法,这不是一个好主意,因为可能会出现软件包安装不正确的问题。同样,这基本上是缓存所有内容,直到一天结束,我们都不知道它是否会比仅安装所需的最新软件包快。

路径2:

像通常用brew安装软件包一样,然后复制二进制文件。需要注意的是,由于某些时候依赖关系可能会失控,因此您将需要针对每个库执行此操作。 这是一个示例Caching APT packages in GitHub Actions workflow 通过在Linux中使用apt-get来完成此过程,但是您可以对brew执行相同的过程

路径3:

查找或创建自己的docker文件映像,以使其与所需的最新软件包保持最新。这将使您始终拥有最新的信息,并允许您从Docker映像初始化容器构建中的步骤。这样就可以满足您的系统依赖性。

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

答案 1 :(得分:0)

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

    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 / Azure自己的存储缓存下载类似,因为瓶子文件是在Bintray的CDN上提供的。