Github Actions #5 Caching dependencies

Onur BOLATOĞLU
3 min readDec 26, 2022

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:

  1. “Get code” adımı: Bu adım, işlemler/checkout@v3 GitHub Action’ını kullanır ve proje kodunu çekerek çalışma dizinine kopyalar.
  2. “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.
Cache yok. Key bulunamadı.
Cache işlemi tamamlandı.
build görevinde bağımlılıkları cache’den çekti.

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.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response