Usar la caché de acciones de GitHub con brew install

Aug 31 2020

Me gustaría usar la caché de Acciones de GitHub ( actions/cache@v2) para guardar la caché de mi brew installcomando, en lugar de volver a descargar todas las dependencias una y otra vez.

Esto haría que mis compilaciones fueran más rápidas, ¿cómo puedo lograrlo?

Respuestas

1 EdwardRomero Sep 01 2020 at 11:55

Esto es complicado porque las acciones / caché dependen de que coloques las bibliotecas en una carpeta específica que luego se puede almacenar en caché y recuperar. Y los archivos del sistema tienen muchas dependencias, lo que hace que cada biblioteca sea única cuando se trata de este proceso.

Aquí hay tres opciones que puede tomar para lograr esto

Ruta 1:

Podríamos considerar instalar los paquetes de preparación en una carpeta específica, pero no podemos hacerlo por paquete sino para todo el sistema operativo. Pero según Homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywhereno es una buena idea ya que podría haber problemas con los paquetes que no se instalen correctamente. Además, esto básicamente sería almacenar en caché todo lo que, al final del día, no sabemos si será más rápido que simplemente instalar los últimos paquetes que necesita.

Ruta 2:

Instale el paquete como lo haría normalmente con brew y luego copie los binarios. La advertencia aquí es que deberá hacer esto por biblioteca, ya que algunas veces las dependencias pueden salirse de control. Aquí hay un ejemplo de almacenamiento en caché de paquetes APT en el flujo de trabajo de acciones de GitHub al pasar por este proceso con apt-get en linux, pero puede seguir el mismo proceso con brew

Ruta 3:

Busque o cree su propia imagen de archivo de ventana acoplable para la que se mantenga actualizado con los paquetes más recientes que desee. Esto le permitiría tener siempre lo último y esto le permitirá inicializar sus pasos dentro de una compilación de contenedor a partir de su imagen de Docker. Esto entonces satisfará las dependencias de su sistema.

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

En la configuración de su trabajo de flujo de trabajo:

    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

Aquí ~/Library/Caches/Homebrewcorresponde a la salida de brew --cache.

En lugar de almacenar todo el directorio en la caché de Acciones de GitHub, la configuración anterior solo almacenará los archivos relacionados con el paquete "foo". Esto se debe a que el directorio de caché de Homebrew en las imágenes de macOS proporcionadas por GitHub ya contiene archivos para la instalación básica de Homebrew (que no es necesario que vuelva a almacenar).

Debe tener en cuenta que es poco probable que este caché acelere su flujo de trabajo. La instalación de botellas Homebrew (el valor predeterminado) generalmente tendrá un rendimiento similar al de la descarga desde la propia caché de almacenamiento de GitHub / Azure, ya que los archivos de la botella se sirven en el CDN de bintray.