Projelerimizde bağımlılık güncellemelerini manuel takip etmek, zaman kaybettiren ve güvenlik açıklarına davetiye çıkaran bir süreç. Bu yazıda size Dependabot ile paket güncelleme süreçlerini nasıl otomatikleştireceğinizi göstereceğim. Her iki aracın kurulumundan konfigürasyonuna, karşılaştırmasından best practice’lere kadar her şeyi bulacaksınız.
🧩 Bağımlılık Güncelleme Problemi: Neyi Otomatikleştiriyoruz?
Projelerimizde onlarca, belki yüzlerce bağımlılık var. Her biri sürekli güncelleniyor. Güvenlik yamaları çıkıyor, yeni özellikler ekleniyor, bug’lar düzeltiliyor.
Manuel takip etmeye çalıştığımızda:
- Kritik güvenlik yamalarını kaçırabiliriz
- Büyük versiyon sıçramalarıyla karşılaşıp zaman kaydebebiliriz
Otomasyon araçları ise bizim için:
- Her gün bağımlılıkları kontrol eder
- Otomatik pull request açar
- Güvenlik açıklarını highlight eder
- Semantic versioning kurallarına göre günceller
- CI/CD pipeline’ınızı tetikler
Bu noktada iki güçlü oyuncu var:
- Dependabot — GitHub’ın native dependency update bot’u; repo içinde tanımladığımız kurallara göre otomatik PR açıyor.
- Renovate — Çok daha esnek kurallarla çalışan, çok geniş ekosistem desteği olan dependency automation aracı. (Bu makalede değinmedim belki daha sonraki içeriklerde değinirim 😁)
🤖 Dependabot Nedir?
GitHub’ın kendi geliştirdiği ve GitHub’a entegre bir bağımlılık güncelleme aracı. 2019'da GitHub tarafından satın alındı ve platform içine native olarak entegre edildi.
Temel özellikleri:
- GitHub ile tam entegrasyon (sıfır kurulum)
- Güvenlik güncellemeleri için otomatik PR’lar
- Versiyon güncellemeleri için zamanlanmış PR’lar
- Çoklu ekosistem desteği (npm, pip, maven, composer, cargo vb.)
⚙️ Dependabot Kurulumu ve Konfigürasyonu
GitHub Üzerinden Aktivasyon
Dependabot artık her GitHub reposu için otomatik olarak aktif. Sadece güvenlik güncellemeleri için çalışır. Versiyon güncellemeleri için konfigürasyon dosyası eklememiz gerekiyor.
Repository’nizin Settings > Security > Code security and analysis bölümünden şu ayarları aktif edelim:
★ Dependabot alerts — Güvenlik açıkları için uyarı
★ Dependabot security updates — Güvenlik yamaları için otomatik PR
★ Dependabot version updates — Tüm bağımlılıklar için otomatik PR (konfigürasyon gerektirir)
Konfigürasyon Dosyası Oluşturma
Projenizin kök dizininde .github klasörü içinde dependabot.yml dosyası oluşturalım:
version: 2
updates:
# npm bağımlılıkları için
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Europe/Istanbul"
open-pull-requests-limit: 10
reviewers:
- "yasinatesim"
assignees:
- "yasinatesim"
labels:
- "dependencies"
- "automated"
commit-message:
prefix: "chore"
include: "scope"
groups:
production-deps:
dependency-type: "production"
update-types:
- "minor"
- "patch"
dev-deps:
dependency-type: "development"
update-types:
- "minor"
- "patch"
ignore:
- dependency-name: "webpack"
update-types: ["version-update:semver-major"]
# GitHub Actions için
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly" ★ package-ecosystem — Hangi paket yöneticisi (npm, pip, maven vb.)
★ directory — Hangi klasördeki bağımlılıklar (monorepo için önemli)
★ schedule.interval — Ne sıklıkla kontrol edilsin (daily, weekly, monthly)
★ open-pull-requests-limit — Aynı anda en fazla kaç PR açılsın
★ reviewers/assignees — PR’ları kime atansın
★ commit-message.prefix — Conventional Commits formatı için
★ groups — patch ve minor güncellemeleri tek PR altında toplamak için
★ ignore — major update’leri bilerek dışarıda bırakmak için
Güvenlik Güncellemelerini Önceliklendirme
Dependabot güvenlik açıklarını tespit ettiğinde otomatik olarak yüksek öncelikli PR açar. Bu PR’lar security label'ı ile işaretlenir.
Eğer sadece critical ve high seviyesindeki güvenlik açıklarını otomatik güncellemek istiyorsanız:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
# Sadece güvenlik güncellemeleri
open-pull-requests-limit: 5
# Versiyon kısıtlamaları
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"] Sonuç olarak, Dependabot belirlediğimiz gün ve saatte repo’yu tarar ve uygun güncellemeler için PR açar. PR’ların içinde versiyon değişimi ve ilgili release notlarına yönlendirmeler olur.
Buradan sonra en iyi verimi, bu PR’ları CI ve branch protection kurallarıyla “merge edilebilir” hale getirerek alıyoruz.
Önemli olan bir diğer konu ise kullandığımız paketlerin proje ile uyumları, örneğin bir Node projesinde package.json’da paketlerin sürümlerinde şapka (^) veya tilda (~) varsa, paketleri güncellerken dikkatli olmamız gerekiyor. Şimdi buna biraz değinelim
💫 SemVer (Semantic Versioning) ve Lockfile
Dependency update botu ilk kez devreye girince genelde iki uç oluyor: Ya hiç PR gelmiyor, ya da her gün 20 PR geliyor. Bu dengeyi kurmak için SemVer ve lockfile mantığını net anlamak gerekiyor.
SemVer (Semantic Versioning) çoğu ekosistemde versiyonun ne ifade ettiğini anlatan standart. Genel yaklaşım MAJOR.MINOR.PATCH şeklinde ilerler.
- PATCH - Bug fix, genelde düşük risk
- MINOR - Yeni özellik, genelde geriye uyumlu
- MAJOR - Breaking change ihtimali yüksek
Bir de lockfile tarafı var:
- package-lock.json / yarn.lock / pnpm-lock.yaml — Kurulan gerçek dependency tree’yi sabitleyen dosyalar
- Lockfile güncel değilse “local” ile “CI” farklı dependency’ler çekebilir
Buradaki kritik konu şu: Otomasyonun amacı sadece “latest”e koşmak değil, risk yönetmek.
Bu noktada ben genellikle, PR’ları merge etmeden önce agentic olarak kullandığım yapay zeka modelinden (Claude Opus 4.8), gh CLI üzerinden PR’ları gözden geçirmesini istiyorum. Modelden, major sürüm değişikliği içeren veya projede sorun oluşturabilecek PR’lar dışındaki güncellemeleri tek bir branch üzerinde birleştirmesini, ardından Dependabot issue’larını kapatmasını sağlıyorum.
Böylece hem paketler güncel kalıyor hem de benim çok fazla uğraşmadan projeyi güncel tutmam mümkün oluyor. Son oluşan branch’in merge kontrolü bende olduğu için bu yöntem bana daha güvenli geliyor.
Eğer GitHub Actions kullanmadan, kendi yapılandırma dosyası üzerinden çalışan ve yerleşik automerge özelliği sunan bir alternatif arıyorsanız, Renovate’i araştırabilirsiniz. Araştırmanızı kolaylaştırması için bazı başlıkları aşağıya bırakıyorum.
Sıradaki Adımlar 🗺️
Bu makalede Dependabot ile proje bağımlılıklarını güncellerken Dependabot’u nasıl yöneteceğimizi temel olarak ele aldım. Eğer isterseniz bir sonraki adımda şu konu başlıklarına bakabilirsiniz:
- Renovate Kurulum ve Config
- Renovate ve Dependabot Arasındaki Farklar
- Renovate Monorepo İlişkisi
📬 Geri Bildirim
Makaleyi yazarken, kaynakları belirleme ve yazım denetimi için Claude Sonnet 4.6, GPT 5.2 High modellerini kullandım. Resimleri üretmek için ise Gemini 2.5 Flash Image (Nano Banana) ve Flux 2 Pro modellerini kullandım.
Yazı ile ilgili tavsiye, öneri, eleştirileri dikkate alıyorum. İletişime geçmek isterseniz bana websitemdeki sosyal medya adreslerimden veya Linkedin üzerinden ulaşabilirsiniz.
Sevgiyle kalın, Yasin 🤗
📚 Makaleyi Yazarken Kullandığım Kaynaklar
- Dependabot Resmi Dokümantasyonu — Dependabot konfigürasyonu ve özellikleri
- Dependabot Configuration File Reference — YAML konfigürasyon detayları
- Semantic Versioning — Versiyon yönetimi kuralları
- GitHub Security Best Practices — Güvenlik önlemleri