Auteur de la discussion #1
pre-commit ile Kod Kontrolleri

Giriş ve değerli amacı
Bir geliştirici olarak projelerde kendinizi kod kalitesiyle güvenceye almak istediğinizde, pre-commit araçları sizi otomatik olarak uyarır ve hataları erken aşamada yakalar. Bu sayede kod tabanı temiz kalır, ortak hatalar azalır ve CI sürecindeki incelemeler için güvenilir bir temel oluşur. Bu yazı, temel fikirleri, hangi alanlarda işe yaradığını ve nasıl yapılandırılacağını somut örneklerle netleştirmeyi hedefler.

Nedir bu pre-commit?
pre-commit, commit işlemi gerçekleştirilmeden önce yerel olarak çalıştırılan bir araç zinciridir. Farklı aracları zincir halinde çalıştırarak şu tür kontrolleri otomatikleştirebilirsiniz:
  • Kod biçimi ve stil denetimleri (linting)
  • Stil hataları ve uyumsuzlukların hızlı tespiti
  • Basit güvenlik testleri ve potansiyel güvenlik açıklarının erken yakalanması
  • Dosya içi arızalı yapılar veya sert kodlama hatalarının tespiti
  • Testlerin hızlı bir ön koşu olarak çalıştırılması (örnek olarak hafif testler)

    Genel yapı ve mantık
    pre-commit, .pre-commit-config.yaml adlı konfigürasyon dosyasıyla hangi araçların hangi sırayla çalışacağını belirler. Her araç genellikle kendi bağımlılıklarını yönetir ve çalıştırılabilirliği için çeşitli ortam gereksinimlerini yerine getirir. En sık kullanılan araçlar şunlar olabilir:
  • linting araçları: flake8, pylint, golangci-lint
  • biçimlendirme araçları: black (Python), prettier (JavaScript/TypeScript), gofmt
  • güvenlik ve hatalardan kaçınma: bandit, safety
  • test ön katmanı: pytest -q, unit testler için seçici çalıştırma
    Bu araçlar, pre-commit tarafından her commit öncesinde tetiklenir ve hatalı bir durum olması halinde commit iptal edilir. Böylece hatalar yerel olarak yakalanır ve ekip bütünlüğü korunur.

    Pratik bir kurulum akışı (örnekler üzerinden)
    1) Ortam hazırlanması
    • Python odaklı bir projede çalışıyorsanız önce sanal ortam kurun ve gerekli paketleri yükleyin.
    • Pre-commit’i küresel olarak veya proje bazında kurabilirsiniz.


    2) .pre-commit-config.yaml örneği
    CODE
    1234567891011121314151617181920212223242526272829303132333435repos:
    [list]
    [*]repo: https://github.com/pre-commit/pre-commit Hooks
    [/list]
      rev: v3.8.0
      hooks:
    [list]
    [*]id: trailing-whitespace
    [*]id: end-of-file-fixer
    [*]id: check-added-large-files
    [*]repo: https://github.com/psf/black
    [/list]
      rev: 23.3.0
      hooks:
    [list]
    [*]id: black
    [*]repo: https://github.com/pycqa/flake8
    [/list]
      rev: 6.0.0
      hooks:
    [list]
    [*]id: flake8
    [*]repo: https://github.com/pycqa/bandit
    [/list]
      rev: 1.7.4
      hooks:
    [list]
    [*]id: bandit
    [*]repo: https://github.com/pre-commit/mirrors-speaks
    [/list]
      rev: v1.0.0
      hooks:
    [list]
    [*]id: repository
    [/list]
    


    3) Kurulum ve aktivasyon
    • python ortamında: pip install pre-commit
    • proje köküne geçin ve: pre-commit install

    Bu adımlar, her git commit aşamasında belirtilen kural setlerini çalıştırır.

    4) Güncelleme ve bakım
    • Yeni araçlar eklenecekse .pre-commit-config.yaml dosyasına yeni girişler eklenir.
    • Araç versiyonlarını proje gereksinimlerine uygun olarak sabitleyin; güncellemelerden doğabilecek kırılmalara karşı dikkatli olun.


    Yol gösterici ipuçları
    • Çok büyük dosyalar veya medya içerikleri için check-added-large-files gibi kurallar, gereksiz commit bozulmalarını önler.
    • Projede Python varsa flake8 ile kod stilini, black ile otomatik biçimlendirmeyi eşitleyin; takımın ortak bir stil üzerinde kalması kolaylaşır.
    • CI/CD'nin güvenilirliği için local pre-commit’in yanı sıra CI’de de aynı araçları çalıştırmayı unutmayın; bu, yerelde yakalanan hataların CI’da da görünmesini sağlar.


    Sonuç ve dikkat edilmesi gerekenler
    pre-commit, kod kalitesini yerel seviyede sağlamanın etkili bir yoludur. Ancak araçlar tek başına her şeyi çözmez; proje kültürü, kod inceleme süreçleri ve akıllı test kapsamı ile birleştiğinde en yüksek verimi sağlar. Bu yaklaşımı kendi projelerinizde uygularken hangi araç zincirinin sizin için en değerli olduğunu deneyimlerle belirlemek faydalı olur. Bu konudaki deneyimlerinizi ve kullandığınız araç zincirini ayrıntılı olarak paylaşabilirsiniz.
  • Vous devez être connecté pour répondre.

    Utilisateurs qui consultent cette discussion (Total: 3, Membres: 3, Invités: 0)
    Total: 3 (membres: 3, invités: 0)
    0 citations sélectionnées