Github Actions #5 Caching dependencies
Github actions ‘da projemizde kullandığımız bağlılıkları cache ‘de tutabilir ve başka bir görevde, cache de tuttuğumuz bu bağlılıkları kullanabiliriz. Böylelikle zamandan tasarruf eder, projemizi hızlıca deploy edebiliriz.
name: Deploy website
on:
push:
branches:
- master
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Get code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm # Cache directory
key: deps-node-modules-${{ hashFiles('**/package-lock.json') }} # check file, dependencies
- name: Install dependencies
run: npm ci
- name: Lint code
run: npm run lint
- name: Test code
run: npm run test
build:
needs: test
runs-on: ubuntu-latest
steps:
- name: Get code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: deps-node-modules-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Build website
run: npm run build
Test görevinde, GitHub Action’ın çalışacağı sırada yapılacak adımları belirtiyoruz. iki adım tanımlanmıştır:
- “Get code” adımı: Bu adım, işlemler/checkout@v3 GitHub Action’ını kullanır ve proje kodunu çekerek çalışma dizinine kopyalar.
- “Cache dependencies” adımı: Bu adım, actions/cache@v3 GitHub Action’ını kullanır ve projenin npm bağımlılıklarını önbelleğe alır. Bu, projenin daha hızlı derlenmesine yardımcı olur ve aynı bağımlılıkları tekrar indirmek zorunda kalmamak için projeyi oluşturmak daha hızlı hale getirir.
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
Yukarıdaki adım, “actions/cache@v3” adlı bir GitHub Action’ı çalıştırır ve projenin npm bağımlılıklarını önbelleğe almak için kullanırız. “path” özelliği “~/.npm” değerini alır ve bu, projenin npm bağımlılıklarının saklanacağı önbellekteki dizinin yolunu belirtir.
key: deps-node-modules-${{ hashFiles('**/package-lock.json') }}
Yukarıdaki komut, “key” özelliğini ayarlar ve npm bağımlılıklarını önbelleğe almak için kullanılan önbellek anahtarını oluşturur. Bu önbellek anahtarı, projenin “package-lock.json” dosyasındaki değişiklikleri izler ve ve bu dosya da değişiklik yapılırsa önbellek anahtarı da değişir. Bu sayede, proje “package-lock.json” dosyasında bir değişiklik yapıldığında, önbellekteki npm bağımlılıkları da güncellenir ve proje yeniden derlenir.
Yukarıdaki komutta, “hashFiles(‘**/package-lock.json’)” kısmı, “package-lock.json” dosyasının içeriğini hashleyen bir fonksiyon çağırır. Bu hash değeri, önbellek anahtarının sonuna eklenir ve böylece önbellek anahtarı projenin “package-lock.json” dosyasındaki değişiklikleri izleyebilir.
Örneğin, eğer projenin “package-lock.json” dosyasında bir değişiklik yapılırsa, bu değişiklik hash değerini değiştirecek ve önbellek anahtarı da değişecektir. Bu sayede, önbellekteki npm bağımlılıkları güncellenir ve proje yeniden derlenir.
uses: actions/cache@v3
# actions/cache@v3 komutu, GitHub Actions çalıştırmaları sırasında bir önbellek oluşturmayı ve bu önbelleği kullanmayı sağlayan bir modüldür.
with:
path: ~/.npm
# Önbelleğin saklanacağı dizindir.
key: deps-node-modules-${{ hashFiles('**/package-lock.json') }}
# Mevcut önbelleğin geçerli olup/olmadığını package-lock.json dosyasının hashine bakarak kontrol etmesini söylüyoruz.
# Hash (cache) mevcut değilse, deps-node-module adında bir anahtar oluşturularak, hash numarası anahtarın sonuna eklenir.



Eğer, proje dosyalarımız içerisinde bulunan “package-lock.json” dosyasında bir değişiklik yaparsak, cache yeniden alınacak.
Özetle,
“actions/cache@v3” modülü, projelerin daha hızlı derlenmesine yardımcı olmak için kullanılır. Bu modül, projenin bağımlılıklarını önbelleğe alır ve projenin daha sonraki derlemelerinde bu bağımlılıkları indirme işlemini atlar. Bu sayede, proje daha hızlı oluşturulur ve daha az kaynak tasarrufu sağlar.