Use o cache de ações do GitHub com o brew install

Aug 31 2020

Gostaria de usar o cache de ações do GitHub ( actions/cache@v2) para salvar o cache do meu brew installcomando, em vez de baixar novamente todas as dependências repetidamente.

Isso tornaria minhas compilações mais rápidas, como posso fazer isso?

Respostas

1 EdwardRomero Sep 01 2020 at 04:55

Isso é complicado porque as ações / cache dependem de você colocar as bibliotecas em uma pasta específica que pode ser armazenada em cache e recuperada. E os arquivos de sistema têm muitas dependências, o que torna cada biblioteca única quando se trata desse processo.

Aqui estão três opções que você pode tomar para fazer isso

Caminho 1:

Poderíamos tentar instalar os pacotes de cerveja em uma pasta específica, mas não podemos fazer isso por pacote, mas em todo o sistema operacional. Mas de acordo com a homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywherenão é uma boa ideia, pois pode haver problemas com a instalação incorreta dos pacotes. Além disso, basicamente seria armazenar em cache tudo o que, no final do dia, não sabemos se será mais rápido do que apenas instalar os pacotes mais recentes de que você precisa.

Caminho 2:

Instale o pacote como faria normalmente com o brew e copie os binários. A advertência aqui é que você precisará fazer isso por biblioteca, pois às vezes as dependências podem ficar fora de controle. Aqui está um exemplo de Cache de pacotes APT no fluxo de trabalho de Ações GitHub , passando por este processo com apt-get no linux, mas você pode seguir o mesmo processo com brew

Caminho 3:

Encontre ou crie sua própria imagem de arquivo docker, para a qual você se mantém atualizado com os pacotes mais recentes que deseja. Isso permitiria que você sempre tivesse o mais recente e inicializaria suas etapas dentro de uma compilação de contêiner a partir da imagem do docker. Isso irá satisfazer as dependências do seu sistema.

 jobs:
   ci:
     runs-on: ubuntu-latest
     container:
       image: <your-personalized-docker-image>
p00ya Nov 29 2020 at 01:48

Em sua configuração de trabalho de fluxo de trabalho:

    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

Aqui ~/Library/Caches/Homebrewcorresponde à saída de brew --cache.

Em vez de armazenar todo o diretório no cache de Ações do GitHub, a configuração acima armazenará apenas os arquivos relacionados ao pacote "foo". Isso ocorre porque o diretório de cache do Homebrew nas imagens do macOS fornecidas pelo GitHub já contém arquivos para a instalação do Homebrew base (que você não precisa armazenar novamente).

Você deve observar que é improvável que esse cache acelere seu fluxo de trabalho. A instalação de garrafas Homebrew (o padrão) geralmente terá desempenho semelhante ao download do cache de armazenamento do próprio GitHub / Azure, uma vez que os arquivos de garrafas são servidos no CDN da bandeja do compartimento.