iToverDose/Yazılım· 5 MAYIS 2026 · 04:02

GitHub Issue’lere Gizli PR’leri Nasıl Tespit Ederim? GitTrek’in Arkasındaki Mantık

GitHub’da yeni bir issue’ye başlarken, başkaları tarafından sessizce çalışıldığını fark ediyor musunuz? Bu durumu önlemek için geliştirilen GitTrek aracı, gerçek zamanlı olarak PR durumlarını takip ediyor ve geliştiricilere yol gösteriyor.

DEV Community4 dk okuma0 Yorumlar

Geliştiricilerin sıkça yaşadığı bir sorun var: Başladıkları bir GitHub issue’nin aslında başka biri tarafından sessizce çalışıldığını sonradan öğrenmek. Bu durum, saatlerce harcanan emeğin boşa gitmesine neden oluyor. Peki, böyle bir problemi nasıl çözebilirsiniz?

Kullanıcılar genellikle beginner-friendly etiketli issue’lere odaklanırken, karşılarına aniden birinin "Bu issue üzerinde çalışıyorum, yakında PR göndereceğim" şeklinde bir yorumuyla karşılaşabiliyorlar. Bu tür durumlar, hem zaman kaybına hem de gereksiz çabaya yol açıyor. Üstelik mevcut araçlar — goodfirstissue.dev, up-for-grabs.net ya da codetriage — genellikle statik listeler veya periyodik tarama yöntemleriyle çalışıyor. Bu araçlar issue’ları gösteriyor, ancak gerçek zamanlı olarak kimin üzerinde çalıştığını belirtmiyor.

İşte tam da bu sorunu çözmek için GitTrek geliştirildi.

Başkaları Sessizce Çalışırken Nasıl Anlarız?

Bir geliştirici issue üzerinde çalışmaya başladığında, genellikle yorum bırakmıyor veya atama talep etmiyor. Bunun yerine, arkalarında dijital izler bırakıyorlar:

  • PR Bahsetmeleri: PR açıklamasında ya da commit mesajında issue numarasını referans göstermek (örneğin Fixes #847).
  • Bağlı Branşlar: GitHub arayüzünde "Bu issue için branş oluştur" seçeneğini kullanıp, ardından bu branştan bir PR açmak.

Bu iki durum, GitHub’ın GraphQL API’si üzerindeki olay kayıtlarında tespit edilebiliyor. Ancak çoğu keşif aracı, bu olayları kontrol etmeyi ihmal ediyor.

GraphQL’in İki Önemli Olayı: CROSS_REFERENCED_EVENT ve CONNECTED_EVENT

GitHub’ın issue sayfasındaki timelineItems alanı, bir issue’nun geçmişindeki tüm olayları listeliyor. İşte bu iki olay türü, sessiz çalışmaları tespit etmemizi sağlıyor:

  • `CROSS_REFERENCED_EVENT`: Birisi PR ya da commit içinde issue numarasını (#847) bahsettiğinde tetikleniyor. PR, bu olayın `source` (kaynak) olarak kaydediliyor.
  • `CONNECTED_EVENT`: Bir branş issue’ya bağlandığında ve bu branştan bir PR açıldığında ortaya çıkıyor. Bu olayda PR, `subject` (konu) olarak kaydediliyor.
İpucu: Bu, sık yapılan bir GraphQL hatasıdır. source ve subject alanlarını karıştırmamak önemlidir. Aksi takdirde, sonuçlar null dönebilir ve hiçbir hata mesajı almadan boş sonuçlarla karşılaşabilirsiniz.

Kullanılan GraphQL Sorgusu

issue(number: $issueNumber) {
  timelineItems(
    first: 25,
    itemTypes: [CROSS_REFERENCED_EVENT, CONNECTED_EVENT]
  ) {
    nodes {
      ... on CrossReferencedEvent {
        source {
          ... on PullRequest {
            number
            state  # AÇIK | KAPALI | BİRLEŞTİRİLDİ
            isDraft
          }
        }
      }
      ... on ConnectedEvent {
        subject {
          ... on PullRequest {
            number
            state
            isDraft
          }
        }
      }
    }
  }
  linkedBranches(first: 3) {
    totalCount
  }
}

Sonuçların Renkli Kodlaması: Hangi Issue’ye Başlayabilirsiniz?

GitTrek, issue’ları aşağıdaki gibi sınıflandırarak kullanıcılarına anında geri bildirim sunuyor:

| Durum | Koşul | Açıklama | |-------|-------|----------| | 🔴 Aktif PR Var | Açık olan ve taslak olmayan PR bulunması | Rekabet yüksek; dikkatli olun | | 🟡 Çalışılmaya Başlandı | Taslak PR bağlı olması | Erken aşama; yolunuzu dikkatli seçin | | 🟡 Branş Var, PR Yok | linkedBranches > 0 ancak PR bulunmaması | Erken sinyal; izlemeye devam edin | | ✅ Güvenle Başlayabilirsiniz | Hiç PR ya da bağlı branş bulunmaması | Kimse çalışmıyor |

Yüksek Performans: Paralel Kontroller

20 issue’yi kontrol etmek, toplamda 21 API çağrısı anlamına geliyor (1 arama + 20 durum kontrolü). GitTrek, kullanıcı arayüzünün gecikmemesi için bu kontrolleri paralel olarak gerçekleştiriyor. İlk sonuçlar anında görüntülenirken, rekabet durumunun simgeleri arka planda yükleniyor.

// Arka planda API'lerden yeni veriler çekin
// Bir simge yüklemesi başarısız olsa bile dashboard'un çalışmaya devam etmesini sağlayın
const results = await Promise.allSettled([
  fetch(`/api/github/badges/pull-shark?username=${user}`).then(r => r.json()),
  fetch(`/api/github/badges/starstruck?username=${user}`).then(r => r.json()),
  // Diğer simge kontrolleri
]);

// Başarısız olanlar için varsayılan değerler kullanın
const [pullShark, starstruck] = results.map(r => 
  r.status === "fulfilled" ? r.value : { count: 0 }
);

Burada Promise.allSettled kullanılması önemlidir. Eğer bir kontrol başarısız olursa (örneğin, repo izinleri nedeniyle ya da tekil öğe hız sınırının aşılması), diğer dashboard öğeleri çalışmaya devam eder.

GitTrek’in Sunduğu Diğer Özellikler

GitTrek, yalnızca "Hayalet PR" tespitiyle sınırlı değil. Aynı zamanda açık kaynak büyümesi için kapsamlı bir yardımcı araç olarak da hizmet veriyor:

  • Depo Kalite Kontrolleri: Yıldız sayısına, forklara ve repo içerisinde CONTRIBUTING.md dosyasının olup olmadığına göre filtreleme.
  • Canlı Başarı Takibi: GraphQL üzerinden gerçek zamanlı hesaplanan Pull Shark, Galaxy Brain ve YOLO rozetlerinin ilerlemesini izleme.

En ilginç özelliklerinden biri ise Odak Görevi önerisi. Örneğin, Pull Shark rozetine ulaşmak için sadece 2 PR’ye ihtiyacınız varsa, GitTrek size bu hedefe ulaşmanız için gereken issue’ları bulmanızda yardımcı olacak özel bir arama sorgusu oluşturuyor.

GitTrek’i Nasıl Kullanabilirsiniz?

GitTrek, tamamen ücretsiz ve açık kaynaklıdır. Tarama yapabilmek için herhangi bir kurulum gerektirmez. Yalnızca kişisel rozet ilerlemenizi takip etmek istiyorsanız, GitHub hesabınızı bağlamanız yeterli.

GitTrek’in sunduğu avantajlardan faydalanmak için:

  • Canlı Uygulama: Kullanıma hazır olarak erişebilirsiniz.
  • Açık Kaynak Kodu: Projeyi inceleyebilir ve katkıda bulunabilirsiniz.

Geliştiricilerin yaşadığı bu sorunu çözmek için atılan adımlardan biri olan GitTrek, açık kaynak topluluğunun daha verimli ve etkili çalışmasına katkı sağlıyor. Gelecekte, bu tür araçların daha da yaygınlaşması ve geliştiricilerin karşılaştığı sorunlara pratik çözümler sunması bekleniyor.

Siz de daha önce bir issue üzerinde çalışırken başkalarının sessizce çalıştığını fark ettiniz mi? Bu durumla nasıl başa çıktınız? Deneyimlerinizi paylaşarak topluluğa katkıda bulunabilirsiniz.

Yapay zeka özeti

GitHub issue’lerine başlarken sessizce çalışılan PR’leri tespit eden GitTrek aracı nasıl çalışıyor? GraphQL sorguları ve paralel kontrollerle nasıl hızlı sonuçlar üretiyor?

Yorumlar

00
YORUM BIRAK
ID #CEU3Q4

0 / 1200 KARAKTER

İnsan doğrulaması

6 + 8 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

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