Verwenden Sie den GitHub-Aktionscache bei der Brew-Installation

Aug 31 2020

Ich möchte den GitHub Actions-Cache ( actions/cache@v2) verwenden, um den Cache meines brew installBefehls zu speichern , anstatt alle Abhängigkeiten immer wieder neu herunterzuladen.

Dies würde meine Builds beschleunigen. Wie kann ich das erreichen?

Antworten

1 EdwardRomero Sep 01 2020 at 04:55

Dies ist schwierig, da Aktionen / Cache davon abhängen, dass Sie die Bibliotheken in einem bestimmten Ordner ablegen, der dann zwischengespeichert und abgerufen werden kann. Und Systemdateien weisen viele Abhängigkeiten auf, die jede Bibliothek in Bezug auf diesen Prozess einzigartig machen.

Hier sind drei Optionen, mit denen Sie dies erreichen können

Pfad 1:

Wir könnten versuchen, die Brühpakete in einem bestimmten Ordner zu installieren, aber wir können dies nicht pro Paket tun, sondern für das gesamte Betriebssystem. Aber laut Homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywhereDies ist keine gute Idee, da Probleme mit nicht ordnungsgemäß installierten Paketen auftreten können. Außerdem würde dies im Grunde alles zwischenspeichern, was wir am Ende des Tages nicht wissen, ob es schneller sein wird, als nur die neuesten Pakete zu installieren, die Sie benötigen.

Pfad 2:

Installieren Sie das Paket wie gewohnt mit Brew und kopieren Sie dann die Binärdateien. Die Einschränkung hier ist, dass Sie dies pro Bibliothek tun müssen, da Abhängigkeiten manchmal außer Kontrolle geraten können. Hier ist ein Beispiel für das Zwischenspeichern von APT-Paketen im GitHub Actions-Workflow, indem Sie diesen Prozess mit apt-get unter Linux durchlaufen. Sie können jedoch denselben Prozess auch mit Brew ausführen

Pfad 3:

Suchen oder erstellen Sie Ihr eigenes Docker-Dateibild, für das Sie mit den neuesten gewünschten Paketen auf dem neuesten Stand sind. Auf diese Weise können Sie immer über die neuesten Informationen verfügen und Ihre Schritte in einem Container-Build aus Ihrem Docker-Image initialisieren. Dies wird dann Ihre Systemabhängigkeiten erfüllen.

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

In Ihrer Workflow-Jobkonfiguration:

    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

Hier ~/Library/Caches/Homebrewentspricht die Ausgabe von brew --cache.

Anstatt das gesamte Verzeichnis im GitHub Actions-Cache zu speichern, werden in der obigen Konfiguration nur die Dateien gespeichert, die sich auf das "foo" -Paket beziehen. Dies liegt daran, dass das Homebrew-Cache-Verzeichnis auf den von GitHub bereitgestellten MacOS-Images bereits Dateien für die Homebrew-Basisinstallation enthält (die Sie nicht erneut speichern müssen).

Sie sollten beachten, dass dieser Cache Ihren Workflow wahrscheinlich nicht beschleunigt. Das Installieren von Homebrew-Flaschen (Standardeinstellung) hat normalerweise eine ähnliche Leistung wie das Herunterladen aus dem GitHub / Azure-eigenen Speichercache, da die Flaschendateien auf dem CDN von bintray bereitgestellt werden.