Gunakan cache tindakan GitHub dengan brew install

Aug 31 2020

Saya ingin menggunakan GitHub Actions cache ( actions/cache@v2) untuk menyimpan cache dari brew installperintah saya , daripada mengunduh ulang semua dependensi berulang kali.

Ini akan membuat bangunan saya lebih cepat, bagaimana saya bisa mencapainya?

Jawaban

1 EdwardRomero Sep 01 2020 at 04:55

Ini rumit karena tindakan / cache bergantung pada Anda meletakkan perpustakaan di folder tertentu yang kemudian dapat di-cache dan diambil. Dan file sistem memiliki banyak dependensi yang membuat setiap pustaka unik saat berhubungan dengan proses ini.

Berikut tiga opsi yang dapat Anda ambil untuk melakukannya

Jalur 1:

Kami dapat melihat ke dalam menginstal paket brew ke folder tertentu tetapi kami tidak dapat melakukannya per paket tetapi untuk seluruh OS. Tapi menurut homebrewhttps://github.com/Homebrew/brew/blob/664d0c67d5947605c914c4c56ebcfaa80cb6eca0/docs/Installation.md#untar-anywhereitu bukan ide yang baik karena mungkin ada masalah dengan paket yang tidak terpasang dengan benar. Juga ini pada dasarnya akan menyimpan semua yang pada akhirnya kita tidak tahu apakah itu akan lebih cepat daripada hanya menginstal paket terbaru yang Anda butuhkan.

Jalur 2:

Instal paketnya seperti biasa dengan brew lalu salin binari. Peringatan di sini adalah bahwa Anda perlu melakukan ini per pustaka karena dependensi terkadang tidak terkendali. Berikut adalah contoh Caching paket APT di alur kerja Tindakan GitHub dengan melalui proses ini dengan apt-get di linux, tetapi Anda dapat mengikuti proses yang sama dengan brew

Jalur 3:

Temukan atau buat gambar file buruh pelabuhan Anda sendiri yang selalu Anda perbarui dengan paket terbaru yang Anda inginkan. Ini akan memungkinkan Anda untuk selalu mendapatkan yang terbaru dan ini akan memungkinkan Anda untuk menginisialisasi langkah-langkah Anda di dalam container build dari image buruh pelabuhan Anda. Ini kemudian akan memenuhi dependensi sistem Anda.

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

Dalam konfigurasi pekerjaan alur kerja Anda:

    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

Berikut ini ~/Library/Caches/Homebrewsesuai dengan output dari brew --cache.

Daripada menyimpan seluruh direktori ke cache Tindakan GitHub, konfigurasi di atas hanya akan menyimpan file yang terkait dengan paket "foo". Ini karena direktori cache Homebrew pada gambar macOS yang disediakan oleh GitHub sudah berisi file untuk pemasangan Homebrew dasar (yang tidak perlu Anda simpan lagi).

Anda harus mencatat bahwa cache ini tidak mungkin mempercepat alur kerja Anda. Menginstal botol Homebrew (default) biasanya akan memiliki kinerja yang mirip dengan mengunduh dari cache penyimpanan GitHub / Azure sendiri karena file botol disajikan di CDN bintray.