iToverDose/Yazılım· 10 MAYIS 2026 · 20:02

GitLab için Özel Kod İnceleme Botu Nasıl Geliştirilir: Açık Kaynaklı Yaklaşım

GitLab Duo Code Review'un yüksek maliyetleriyle karşılaşan geliştiriciler, ChatGPT aboneliklerini kullanarak kendi otomatik kod inceleme botunu oluşturdu. Üç günde tamamlanan proje, OpenShift kümesinde nasıl güvenle çalışacağını ve inline yorumlarla etkileşimi nasıl yöneteceğini gösteriyor.

DEV Community4 dk okuma0 Yorumlar

Geliştiriciler için kod inceleme süreci, hem zaman alıcı hem de maliyetli olabiliyor. Özellikle küçük ekipler, GitLab Duo Code Review gibi hizmetleri kullanırken her bir birleştirme isteği (MR) için yaklaşık 0,20 dolar ödüyor. Bu da beş inceleme için günlük 1 dolara denk geliyor ve bütçeyi hızla tüketebiliyor. Var olan bir ChatGPT aboneliğini kod inceleme otomasyonunda kullanmak mantıklı görünse de, GitLab Duo'nun sunduğu sınırlamalar nedeniyle bu mümkün olmuyordu.

Çözüm, kendi özel kod inceleme botunu geliştirmekti. Üç günde tamamlanan bu proje, sadece maliyetleri düşürmekle kalmadı, aynı zamanda ekibin ihtiyaçlarına özel bir yapı oluşturdu. Peki, bu bot nasıl çalışıyor ve hangi güvenlik önlemleriyle donatıldı?

ChatGPT Aboneliğini Koda Dönüştürmek

OpenAI’nin @openai/codex-sdk kütüphanesi, otomatik kod inceleme botunun temelini oluşturdu. Bu SDK, ChatGPT OAuth kimlik doğrulamasıyla çalışıyor ve auth.json dosyasına yenileme token’ı yazıyor. Ardından, Rust tabanlı codex ikili dosyasını sürece dahil ederek, verilen bir istemi işliyor ve yapılandırılmış çıktıları akış halinde geri döndürüyor. Bu yaklaşım, hem maliyetleri kontrol altında tutmayı hem de özel gereksinimlere uygun bir çözüm sunmayı mümkün kıldı.

Ancak, ChatGPT aboneliğini sürekli çalışan bir botta kullanmak, OpenAI’nin kullanım koşullarına aykırı olabilir. Bu riski minimize etmek için, bazı önlemler alındı:

  • Her dağıtım için ayrı bir hesap kullanıldı.
  • Eşzamanlılık 1’e sabitlendi.
  • Yeniden deneme mekanizması, hız sınırlarına uygun olarak tasarlandı.
  • Paralel oturum genişletmesi yapılmadı.

İlk Olarak Düşünülen Alternatifler

İki farklı OpenAI reçetesi, başlangıçta dikkat çekse de, projenin gereksinimlerini karşılamadı:

  • `secure_quality_gitlab`: CI iş akışında çalışan, statik ve paralel güvenli bir yapı sunuyor. Ancak, API anahtarı faturalandırmasına dayanıyor ve her yeniden denemede token ücreti ödenmesini gerektiriyor.
  • `build_code_review_with_codex_sdk`: Benzer şekilde, tek seferlik inceleme sunuyor ve token tabanlı faturalandırma yapıyor.

Her iki seçenek de, inline yorumlara yanıt verme veya devam eden sohbetleri sürdürme yeteneğinden yoksundu. Bu nedenle, proje için özel bir çözüm geliştirmek kaçınılmaz hale geldi.

Webhook’tan İnline Yoruma: Sürecin İşleyişi

Oluşturulan botun iş akışı oldukça basit ancak etkili bir şekilde tasarlandı:

GitLab’dan gelen webhook, Fastify tarafından işleniyor. Ardından, X-Gitlab-Token doğrulaması gerçekleştirilerek, olay sınıflandırılıyor ve BullMQ kuyruğuna gönderiliyor. Buradan, tek bir worker tarafından ele alınan işlemler şu adımları izliyor:

  • Bare-clone önbelleğinden bir çalışma ağacı hazırlanır.
  • Codex, bu ağaç üzerinde çalıştırılır ve sonuçlar GitLab’a hem özet yorum hem de inline tartışmalar olarak gönderilir.

Bu yapıda, eşzamanlılık sadece 1’e ayarlanmış durumda. Bu sayede, OpenAI’nin hesap koruma mekanizmalarından kaçınılırken, tek bir Codex hesabının sürekli kullanımı sağlanıyor.

Durum Yönetimi ve Güvenlik Stratejileri

Botun durumunu üç farklı yerde saklamak, güvenlik ve performansı dengelemek açısından kritik önem taşıyor:

  • Redis: BullMQ kuyruğunu yönetir. İş kimlikleri (review--- ve note--- formatında) deterministik olduğundan, yeniden gönderilen webhook’lar işlem yapılmadan atlanır.
  • MariaDB: Sadece reviews ve threads tablolarını içerir. reviews tablosu, proje ve MR kimlikleriyle birlikte baş SHA değerlerini saklarken, threads tablosu bot tarafından oluşturulan tartışmaların kimliklerini tutar. Hiçbir hassas veri veritabanında yer almaz.
  • Codex oturumları: JSONL dosyaları olarak $CODEX_HOME/sessions/ dizininde saklanır. Bot, sadece oturum kimliğini tutarken, asıl geçmiş konuşmalar kalıcı hacimde (PVC) yer alır.

Bu ayrımın en önemli avantajı, en hassas verilerin (tüm dosyalar, farklar ve araç çağrıları) hiçbir zaman veritabanına kaydedilmemesi. Tüm veriler, ad alanlarına özel RBAC ile korunmuş bir hacimde yer alıyor.

Takip Yorumları ve Bot Etkileşimi

Bot tarafından oluşturulan bir yoruma @mr-codex yanıtı geldiğinde, webhook tetiklenir ve discussion_id araştırılır. Eğer bu ID bot tarafından oluşturulmuş bir tartışmaya aitse, worker ilgili codex_thread_id’yi çekerek codex.resumeThread(id).run(prompt) fonksiyonunu çalıştırır. Bu sayede, model önceki tüm bağlamı koruyarak yeni yanıtı oluşturabilir.

Ancak, bot tarafından oluşturulmayan tartışmalara yapılan yanıtlar dikkate alınmaz. Bu kural, botlar arasında oluşan sonsuz döngüleri ve yanlışlıkla yapılan müdahaleleri engeller.

Buna ek olarak, @mr-codex dışındaki bahisler yeni bir Codex oturumu başlatır. Bu durumda, oluşan discussion_id yine threads tablosuna kaydedilir, böylece ardından gelen yanıtlar da doğru şekilde devam ettirilir.

En Kritik Kısım: danger-full-access Modunu Güvenli Hale Getirmek

Codex’in sunduğu üç sandbox modu bulunuyor:

  • read-only (salt okunur)
  • workspace-write (çalışma alanına yazma)
  • danger-full-access (tam erişim, sandbox yok)

İdeal olarak bwrap tabanlı sandbox kullanmak istense de, OpenShift kümesinde bu mümkün olmadı. OpenShift’in restricted-v2 Güvenlik İçerik Profili (SCC), seccompProfile: Unconfined kullanımını engelliyor. Normal bir Linux sisteminde bu ayar yapılabilirken, OpenShift’te özel izinler gerekiyor.

Bu nedenle, tam erişim moduna geçildi. Botun çalıştığı OpenShift kümesinde, gerekli RBAC politikaları ve hacim izinleri sıkı bir şekilde yapılandırıldı. Bu sayede, hem güvenlik sağlandı hem de botun tüm ihtiyaçları karşılandı.

Sonuç ve Geleceğe Bakış

Özel bir kod inceleme botu geliştirmek, başlangıçta maliyetleri düşürmek amacıyla başlasa da, ortaya çıkan çözüm hem teknik hem de güvenlik açısından oldukça sağlam bir temele oturdu. Üç günde tamamlanan proje, sadece GitLab entegrasyonunu değil, aynı zamanda OpenAI’nin ChatGPT aboneliklerini verimli bir şekilde kullanmayı da mümkün kıldı.

Gelecekte, bu botun daha da geliştirilmesi ve farklı platformlara uyarlanması mümkün. Özellikle, farklı LLM modellerinin entegre edilmesi ve çoklu dil desteklerinin eklenmesi, projenin değerini artırabilir. Ayrıca, kod inceleme süreçlerini daha da otomatikleştirerek geliştiricilerin odaklanması gereken daha stratejik görevlere zaman ayırmalarını sağlayabilir.

Yapay zeka özeti

GitLab Duo Code Review maliyetlerinden kurtulun! ChatGPT aboneliğiyle kendi otomatik kod inceleme botunuzu nasıl oluşturacağınızı adım adım öğrenin.

Yorumlar

00
YORUM BIRAK
ID #YEPFI7

0 / 1200 KARAKTER

İnsan doğrulaması

2 + 6 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.