Usa la cache delle azioni di GitHub con brew install

Aug 31 2020

Vorrei utilizzare la cache delle azioni di GitHub ( actions/cache@v2) per salvare la cache del mio brew installcomando, invece di scaricare nuovamente tutte le dipendenze più e più volte.

Questo renderebbe le mie build più veloci, come posso ottenerlo?

Risposte

1 EdwardRomero Sep 01 2020 at 04:55

Questo è complicato perché le azioni / cache dipendono dal fatto che metti le librerie in una cartella specifica che può essere memorizzata nella cache e recuperata. E i file di sistema hanno molte dipendenze che rendono ogni libreria unica quando si tratta di questo processo.

Ecco tre opzioni che puoi adottare per ottenere questo risultato

Percorso 1:

Potremmo esaminare l'installazione dei pacchetti di infusione in una cartella specifica, ma non possiamo farlo per pacchetto ma per l'intero sistema operativo. Ma secondo homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywherenon è una buona idea in quanto potrebbero esserci problemi con i pacchetti che non vengono installati correttamente. Anche questo sarebbe fondamentalmente il caching di tutto ciò che alla fine della giornata non sappiamo se sarà più veloce dell'installazione degli ultimi pacchetti di cui hai bisogno.

Percorso 2:

Installa il pacchetto come faresti normalmente con brew e poi copia i binari. L'avvertenza qui è che dovrai farlo in base alla libreria poiché alcune volte le dipendenze possono sfuggire di mano. Ecco un esempio di memorizzazione nella cache dei pacchetti APT nel flusso di lavoro delle azioni di GitHub eseguendo questo processo con apt-get in linux, ma puoi seguire lo stesso processo con brew

Percorso 3:

Trova o crea la tua immagine del file Docker per la quale ti mantieni aggiornato con gli ultimi pacchetti che desideri. Ciò ti consentirebbe di avere sempre le ultime novità e ti consentirà di inizializzare i tuoi passaggi all'interno di un container compilato dalla tua immagine docker. Questo soddisferà quindi le tue dipendenze di sistema.

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

Nella configurazione del lavoro del flusso di lavoro:

    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

Qui ~/Library/Caches/Homebrewcorrisponde all'output di brew --cache.

Piuttosto che memorizzare l'intera directory nella cache delle azioni di GitHub, la configurazione sopra memorizzerà solo i file relativi al pacchetto "foo". Questo perché la directory della cache di Homebrew sulle immagini macOS fornite da GitHub contiene già file per l'installazione Homebrew di base (che non è necessario memorizzare di nuovo).

Tieni presente che è improbabile che questa cache acceleri il tuo flusso di lavoro. L'installazione di bottiglie Homebrew (impostazione predefinita) di solito avrà prestazioni simili al download dalla cache di archiviazione di GitHub / Azure poiché i file delle bottiglie vengono serviti sulla CDN di bintray.