Utiliser le cache d'actions GitHub avec l'installation de brew

Aug 31 2020

Je voudrais utiliser le cache GitHub Actions ( actions/cache@v2) afin de sauvegarder le cache de ma brew installcommande, au lieu de re-télécharger toutes les dépendances encore et encore.

Cela rendrait mes builds plus rapides, comment puis-je y parvenir?

Réponses

1 EdwardRomero Sep 01 2020 at 04:55

Ceci est délicat car les actions / cache dépendent de la mise en place des bibliothèques dans un dossier spécifique qui peut ensuite être mis en cache et récupéré. Et les fichiers système ont de nombreuses dépendances, ce qui rend chaque bibliothèque unique en ce qui concerne ce processus.

Voici trois options que vous pouvez prendre pour y parvenir

Chemin 1:

Nous pourrions envisager d'installer les packages de brassage dans un dossier spécifique, mais nous ne pouvons pas le faire par package mais à la place pour l'ensemble du système d'exploitation. Mais selon l'homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywherece n'est pas une bonne idée car il pourrait y avoir des problèmes avec les paquets qui ne s'installent pas correctement. De plus, cela consisterait essentiellement à mettre en cache tout ce qui, à la fin de la journée, nous ne savons pas si ce sera plus rapide que d'installer simplement les derniers packages dont vous avez besoin.

Chemin 2:

Installez le paquet comme vous le feriez normalement avec brew, puis copiez les binaires. La mise en garde ici est que vous devrez le faire par bibliothèque car les dépendances peuvent parfois devenir incontrôlables. Voici un exemple de mise en cache des packages APT dans le flux de travail GitHub Actions en passant par ce processus avec apt-get sous linux, mais vous pouvez suivre le même processus avec brew

Chemin 3:

Trouvez ou créez votre propre image de fichier docker pour laquelle vous vous tenez à jour avec les derniers packages que vous souhaitez. Cela vous permettrait d'avoir toujours la dernière version et cela vous permettra d'initialiser vos étapes dans une construction de conteneur à partir de votre image docker. Cela satisfera alors vos dépendances système.

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

Dans la configuration de votre travail de workflow:

    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

Ici ~/Library/Caches/Homebrewcorrespond à la sortie de brew --cache.

Plutôt que de stocker le répertoire entier dans le cache des actions GitHub, la configuration ci-dessus ne stockera que les fichiers liés au package "foo". En effet, le répertoire de cache Homebrew sur les images macOS fournies par GitHub contient déjà des fichiers pour l'installation de base de Homebrew (que vous n'avez pas besoin de stocker à nouveau).

Vous devez noter que ce cache est peu susceptible d'accélérer votre flux de travail. L'installation de bouteilles Homebrew (par défaut) aura généralement des performances similaires au téléchargement à partir du propre cache de stockage de GitHub / Azure puisque les fichiers de bouteille sont servis sur le CDN de bintray.