Takip et

Tek Bir YAML Dosyasıyla GitHub Yıldız Monitörü Oluşturmak: Sıfır Bağımlılık, Sıfır Konfigürasyon

Tek Bir YAML Dosyasıyla GitHub Yıldız Monitörü Oluşturmak: Sıfır Bağımlılık, Sıfır Konfigürasyon Açık kaynak dünyasında bir projenin baş…

Tek Bir YAML Dosyasıyla GitHub Yıldız Monitörü Oluşturmak: Sıfır Bağımlılık, Sıfır Konfigürasyon

Açık kaynak dünyasında bir projenin başarısını ve etkisini ölçmenin en yaygın yollarından biri, GitHub yıldız sayısıdır. Yıldızlar, projenizin popülaritesini, topluluk tarafından benimsenme oranını ve genel sağlığını gösteren önemli bir metriktir. Ancak bu metrikleri düzenli olarak takip etmek, hele ki birden fazla projeniz varsa, manuel olarak yorucu ve zaman alıcı olabilir. İşte tam da bu noktada, tek bir YAML dosyasıyla, sıfır bağımlılık ve sıfır ek konfigürasyon gerektiren otomatik bir GitHub yıldız monitörü devreye giriyor. Bu makalede, bu güçlü ve basit çözümü adım adım nasıl kuracağınızı keşfedeceğiz.

Neden GitHub Yıldızlarını İzlemeliyiz?

GitHub yıldızları, sadece bir beğeni tuşu olmanın ötesinde, açık kaynak projeleri için birçok anlam taşır. Bu metrikleri düzenli olarak takip etmek, projenizin gidişatı hakkında değerli bilgiler edinmenizi sağlar.

Proje Sağlığı ve Popülaritesi

Yıldız sayısı, projenizin topluluk içindeki genel popülaritesini ve benimsenme düzeyini gösterir. Sürekli artan bir yıldız sayısı, projenizin ilgi çekici ve faydalı olduğunu işaret ederken, durağan veya düşen bir sayı, potansiyel sorunlara veya ilgi kaybına işaret edebilir. Bu veriler, projenizin genel sağlığını anlamak için kritik öneme sahiptir.

Geliştirici Motivasyonu ve Geri Bildirim

Bir projeye yıldız vermek, geliştiricilere ve katkıda bulunanlara doğrudan bir geri bildirimdir. Emeklerinin takdir edildiğini görmek, motivasyonu artırır ve projenin gelişimine daha fazla katkıda bulunma isteğini pekiştirir. Yıldız sayısındaki artışları izlemek, ekibin moralini yüksek tutmak için somut bir gösterge sunar.

Pazarlama ve Topluluk Etkileşimi

Yüksek yıldız sayısına sahip projeler, potansiyel kullanıcılara ve katkıda bulunanlara daha güvenilir ve kaliteli görünür. Bu durum, projenizin daha geniş kitlelere ulaşmasına yardımcı olur ve pazarlama çabalarınızı destekler. Ayrıca, yıldız sayısındaki önemli dönüm noktalarını (örneğin, 1000 yıldıza ulaşmak) kutlamak, toplulukla etkileşim kurmak ve projenizi daha fazla tanıtmak için harika fırsatlar sunar.

Geleneksel Yöntemlere Veda: Neden YAML?

GitHub yıldızlarını izlemek için geleneksel yöntemler genellikle ek altyapı, sunucu maliyetleri ve bağımlılık yönetimi gibi zorlukları beraberinde getirir. Tek bir YAML dosyasıyla otomasyon, bu sorunları ortadan kaldırarak modern, verimli ve bakımı kolay bir çözüm sunar.

Sunucu ve Altyapı Maliyetleri

Geleneksel olarak, bir monitör kurmak için bir sunucuya (VPS, EC2 vb.) ihtiyacınız olurdu. Bu sunucuya bir betik kurar, zamanlayıcı (cron job) ile çalıştırır ve sonuçları bir yere kaydederdiniz. Bu yaklaşım, sunucu kiralama, bakım ve güvenlik gibi ek maliyetler ve operasyonel yükler getirir. YAML tabanlı çözümler, bu altyapı ihtiyacını ortadan kaldırarak sıfır sunucu maliyeti sunar.

Bağımlılık Cehennemi

Geleneksel betikler genellikle çeşitli programlama dillerine (Python, Node.js vb.) ve kütüphanelerine (requests, beautifulsoup vb.) bağımlıdır. Bu bağımlılıkları yönetmek, güncel tutmak ve farklı ortamlarda çalışmasını sağlamak, “bağımlılık cehennemi” olarak bilinen bir soruna yol açabilir. Tek bir YAML dosyasıyla, genellikle platformun sağladığı temel araçları kullanarak bu bağımlılıkları minimuma indiririz.

GitHub Actions ile Tanışma

Bu makalede odaklanacağımız “tek YAML dosyası” çözümü, GitHub’ın kendi otomasyon platformu olan GitHub Actions üzerine kuruludur. GitHub Actions, depolarınızda çeşitli görevleri otomatikleştirmek için kullanabileceğiniz güçlü, esnek ve ücretsiz (belirli limitler dahilinde) bir CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) aracıdır. İş akışlarınızı (workflows) YAML dosyalarıyla tanımlar, bu sayede kodunuzla birlikte sürüm kontrolü altında tutabilirsiniz. GitHub Actions, sunucusuz bir ortamda çalıştığı için yukarıda bahsedilen altyapı ve bağımlılık sorunlarının çoğunu çözmüş olur.

GitHub Actions ile Yıldız Monitörünün Temelleri

GitHub Actions, projelerinizde otomasyonu sağlamak için belirli bir yapı ve kavramlar kullanır. Yıldız monitörümüzü oluşturmadan önce bu temel kavramları anlamak önemlidir.

.github/workflows Dizini

GitHub Actions iş akışları, deponuzun kök dizininde bulunan .github/workflows/ dizini altında yer alan YAML dosyalarında tanımlanır. Her bir YAML dosyası, bir iş akışını temsil eder. Bu dizin, GitHub’a bu dosyanın bir otomasyon betiği olduğunu ve belirli olaylar veya zamanlamalar karşısında çalıştırılması gerektiğini bildirir.

Workflow Tetikleyicileri (Cron Job)

Bir iş akışının ne zaman çalışacağını belirleyen şey, tetikleyicilerdir (on: anahtarı). GitHub Actions, çeşitli tetikleyicileri destekler: kod gönderimi (push), çekme isteği (pull_request), manuel çalıştırma (workflow_dispatch) ve belirli bir zaman çizelgesinde çalışma (schedule). Yıldız monitörümüz için, schedule tetikleyicisini kullanacağız. Bu, Unix tabanlı sistemlerdeki cron işlerine benzer şekilde, belirli aralıklarla (örneğin, her gün gece yarısı) iş akışımızı otomatik olarak çalıştırmamızı sağlar.

Adımlar (Steps) ve İşler (Jobs)

Bir iş akışı, bir veya daha fazla “iş” (jobs) içerir. Her iş, bağımsız bir sanal ortamda (runner) çalışır ve bir dizi “adım” (steps) içerir. Adımlar, işin içinde sırayla yürütülen komutları veya eylemleri temsil eder. Örneğin, bir adım depoyu klonlayabilir, bir diğeri bir komut çalıştırabilir veya bir başkası bir GitHub Action’ı kullanabilir. Yıldız monitörümüzde, yıldız sayısını çeken, bir dosyayı güncelleyen ve değişiklikleri geri gönderen adımlarımız olacak.

YAML Dosyasını Adım Adım Oluşturma

Şimdi sıra geldi, yıldız monitörümüzü tanımlayacak YAML dosyasını oluşturmaya. Bu dosya, projenizin .github/workflows/ dizinine yerleştirilecek.

Workflow Tanımı ve İsimlendirme

Her iş akışı, name anahtarıyla başlayan bir isimle tanımlanır. Bu isim, GitHub Actions arayüzünde iş akışınızı kolayca tanımanızı sağlar.

name: GitHub Yıldız Monitörü

Periyodik Çalışma Zamanlaması (Schedule)

İş akışımızın otomatik olarak çalışması için on: anahtarı altında schedule tetikleyicisini kullanırız. cron ifadesi, iş akışının ne zaman çalışacağını belirler. 0 0 * * * ifadesi, her gün gece yarısı (UTC) çalışacağı anlamına gelir. Ayrıca, manuel çalıştırma imkanı sunan workflow_dispatch tetikleyicisini de eklemek faydalı olacaktır.

on:
  schedule:
    - cron: '0 0 * * *' # Her gün gece yarısı (UTC) çalışır
  workflow_dispatch: # GitHub arayüzünden manuel çalıştırma imkanı

GitHub API ile Yıldız Sayısını Çekme

Yıldız sayısını almak için GitHub'ın herkese açık API'sini kullanacağız. curl komutu ile API'ye istek gönderip, jq aracı ile JSON çıktısını ayrıştırarak stargazers_count alanını çekeceğiz. Bu işlem, bir run adımında gerçekleştirilir.

- name: GitHub API'den Yıldız Sayısını Çek
            id: get_stars
            run: |
              REPO_PATH="${{ github.repository }}" # Örn: octocat/Spoon-Knife
              STAR_COUNT=$(curl -s "https://api.github.com/repos/$REPO_PATH" | jq -r '.stargazers_count')
              echo "STAR_COUNT=$STAR_COUNT" >> "$GITHUB_OUTPUT"
              echo "Mevcut yıldız sayısı: $STAR_COUNT"


Burada github.repository değişkeni, otomatik olarak projenizin sahibini ve adını (kullanıcıadı/depo_adı) sağlar. jq aracı, çoğu GitHub Actions runner'ında varsayılan olarak yüklüdür. Çekilen yıldız sayısı, bir sonraki adımlarda kullanabilmek için GITHUB_OUTPUT aracılığıyla bir çıktı değişkeni olarak kaydedilir.

Veriyi Saklama veya Bildirme Stratejileri

Çekilen yıldız sayısını nasıl kullanacağınız tamamen size bağlıdır. En basit ve "sıfır konfigürasyon" yaklaşımı, bu sayıyı deponuzdaki bir dosyaya (örneğin, star_status.md veya README.md'nin bir bölümü) yazmak ve bu değişikliği geri göndermektir. Bu sayede, deponuzu ziyaret eden herkes güncel yıldız sayısını görebilir.

- name: Yıldız Durumu Dosyasını Oluştur/Güncelle
            run: |
              STAR_COUNT="${{ steps.get_stars.outputs.STAR_COUNT }}"
              echo "# GitHub Yıldız Durumu" > star_status.md
              echo "" >> star_status.md
              echo "Bu proje şu anda $STAR_COUNT yıldıza sahip. 🌟" >> star_status.md
              echo "" >> star_status.md
              echo "Son güncelleme: $(date '+%Y-%m-%d %H:%M:%S %Z')" >> star_status.md
              echo "" >> star_status.md
              echo "Bu dosya otomatik olarak GitHub Actions tarafından güncellenmektedir." >> star_status.md


Bu adım, star_status.md adında yeni bir dosya oluşturur veya mevcut dosyayı güncelleyerek içine yıldız sayısını ve son güncelleme zamanını yazar.

Pratik Uygulama: Örnek Bir YAML Dosyası

Yukarıdaki adımları birleştirerek tam bir GitHub Actions iş akışı YAML dosyası oluşturalım. Bu dosyayı deponuzun .github/workflows/star-monitor.yml yoluna kaydedebilirsiniz.

name: GitHub Yıldız Monitörü

on:
  schedule:
    - cron: '0 0 * * *' # Her gün gece yarısı (UTC) çalışır
  workflow_dispatch: # GitHub arayüzünden manuel çalıştırma imkanı

jobs:
  monitor-stars:
    runs-on: ubuntu-latest

    steps:
      - name: Depoyu Klonla
        uses: actions/checkout@v3

      - name: GitHub API'den Yıldız Sayısını Çek
        id: get_stars
        run: |
          # Mevcut deponun sahibini ve adını al (örn: octocat/Spoon-Knife)
          REPO_PATH="${{ github.repository }}" 
          
          # GitHub API'den yıldız sayısını çek ve jq ile ayrıştır
          STAR_COUNT=$(curl -s "https://api.github.com/repos/$REPO_PATH" | jq -r '.stargazers_count')
          
          # Yıldız sayısını sonraki adımlarda kullanmak üzere çıktı olarak kaydet
          echo "STAR_COUNT=$STAR_COUNT" >> "$GITHUB_OUTPUT"
          echo "Mevcut yıldız sayısı: $STAR_COUNT"

      - name: Yıldız Durumu Dosyasını Oluştur/Güncelle
        run: |
          # Önceki adımdan yıldız sayısını al
          STAR_COUNT="${{ steps.get_stars.outputs.STAR_COUNT }}"
          
          # star_status.md dosyasının içeriğini oluştur
          echo "# GitHub Yıldız Durumu" > star_status.md
          echo "" >> star_status.md
          echo "Bu proje şu anda $STAR_COUNT yıldıza sahip. 🌟" >> star_status.md
          echo "" >> star_status.md
          echo "Son güncelleme: $(date '+%Y-%m-%d %H:%M:%S %Z')" >> star_status.md
          echo "" >> star_status.md
          echo "Bu dosya otomatik olarak GitHub Actions tarafından güncellenmektedir." >> star_status.md

      - name: Değişiklikleri Kaydet ve Gönder
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: 'Otomatik: GitHub yıldız sayısı güncellendi'
          branch: ${{ github.ref_name }} # Mevcut dalı kullan (genellikle main veya master)
          file_pattern: 'star_status.md' # Sadece bu dosyayı commit et

Kodu Açıklama

  • name: İş akışının adı. GitHub Actions panelinde bu isimle görünür.
  • on: İş akışının ne zaman tetikleneceğini belirtir.
    • schedule: cron formatında bir zamanlama belirtir. '0 0 * * *' her gün gece yarısı (UTC) çalışır.
    • workflow_dispatch: GitHub arayüzünden manuel olarak tetikleme imkanı sunar.
  • jobs: İş akışının çalıştıracağı işleri tanımlar. Burada tek bir işimiz var: monitor-stars.
    • runs-on: ubuntu-latest: İşin çalışacağı sanal ortamı belirtir. ubuntu-latest genel amaçlı Linux ortamıdır.
    • steps: İşin içinde sırayla çalışacak adımları listeler.
      • Depoyu Klonla: actions/checkout@v3 eylemi, iş akışının deponun koduna erişebilmesi için depoyu sanal ortama klonlar.
      • GitHub API'den Yıldız Sayısını Çek:
        • REPO_PATH değişkeni, GitHub tarafından sağlanan github.repository bağlam değişkeninden deponun tam adını (örn. kullanıcıadı/depo_adı) alır.
        • curl -s "https://api.github.com/repos/$REPO_PATH" komutu, GitHub API'sine HTTP GET isteği gönderir. -s sessiz mod içindir.
        • jq -r '.stargazers_count' komutu, curl'dan gelen JSON çıktısını ayrıştırır ve stargazers_count alanının değerini ham (raw) metin olarak döndürür.
        • echo "STAR_COUNT=$STAR_COUNT" >> "$GITHUB_OUTPUT" komutu, çekilen yıldız sayısını get_stars adımının bir çıktısı olarak kaydeder. Bu, sonraki adımların bu değere erişmesini sağlar.
      • Yıldız Durumu Dosyasını Oluştur/Güncelle:
        • STAR_COUNT="${{ steps.get_stars.outputs.STAR_COUNT }}" ifadesiyle bir önceki adımdan yıldız sayısı alınır.
        • echo komutları kullanılarak star_status.md adında yeni bir dosya oluşturulur veya mevcut dosyanın içeriği üzerine yazılır. Bu dosya, yıldız sayısını ve son güncelleme zamanını içerir.
      • Değişiklikleri Kaydet ve Gönder:
        • stefanzweifel/git-auto-commit-action@v4 adlı üçüncü taraf bir eylem kullanılır. Bu eylem, deponuzdaki değişiklikleri otomatik olarak commit eder ve geri gönderir.
        • commit_message: Yapılacak commit'in mesajı.
        • branch: Değişikliklerin hangi dala gönderileceğini belirtir. github.ref_name mevcut dalı otomatik olarak kullanır (genellikle main veya master).
        • file_pattern: Sadece star_status.md dosyasındaki değişikliklerin commit edilmesini sağlar.

Sonuçların Görselleştirilmesi

İş akışı başarıyla çalıştıktan sonra, deponuzda star_status.md adında yeni bir dosya göreceksiniz. Bu dosya, projenizin güncel yıldız sayısını ve en son ne zaman güncellendiğini içerecektir.
Örneğin:

# GitHub Yıldız Durumu

Bu proje şu anda 1234 yıldıza sahip. 🌟

Son güncelleme: 2023-10-27 10:30:00 UTC

Bu dosya otomatik olarak GitHub Actions tarafından güncellenmektedir.


Dilerseniz, README.md dosyanızda bu star_status.md dosyasını bir iframe veya benzeri bir yöntemle gösterebilir, ya da README.md dosyasının belirli bir bölümünü güncelleyecek daha karmaşık bir betik yazabilirsiniz. Ancak "sıfır konfigürasyon" felsefesiyle star_status.md oluşturmak en basit yaklaşımdır.

Avantajlar, Sınırlamalar ve Geliştirme Fırsatları

Bu YAML tabanlı GitHub yıldız monitörü çözümü, birçok avantaj sunarken, bazı sınırlamaları ve geliştirme potansiyellerini de barındırır.

Sıfır Maliyet ve Kolay Bakım

Bu çözümün en büyük avantajı, GitHub Actions'ın ücretsiz katmanı sayesinde neredeyse sıfır maliyetle çalışmasıdır. Ayrıca, tüm konfigürasyon tek bir YAML dosyasında olduğu için bakımı son derece kolaydır. Herhangi bir sunucu veya ek bağımlılık yönetimi gerektirmez. Dosya deponuzla birlikte sürüm kontrolünde olduğu için değişiklikleri takip etmek ve geri almak da kolaydır.

Öğrenme Eğrisi ve Debugging

GitHub Actions'a yeni başlayanlar için YAML sözdizimi ve iş akışı mantığı başlangıçta biraz öğrenme eğrisi gerektirebilir. İş akışında bir hata oluştuğunda, GitHub Actions arayüzündeki günlükleri (logs) inceleyerek sorunları tespit etmek gerekebilir. Ancak platformun sağladığı detaylı günlükler, hata ayıklama sürecini oldukça kolaylaştırır.

Gelişmiş Bildirimler ve Veri Saklama

Mevcut çözüm, yıldız sayısını deponuzdaki bir dosyaya kaydeder. Ancak daha gelişmiş senaryolar için bu veriyi farklı yerlere gönderebilirsiniz:

  • Bildirimler: Slack, Discord, E-posta veya diğer iletişim platformlarına bildirim göndermek için ek adımlar ekleyebilirsiniz. Örneğin, yıldız sayısında önemli bir artış olduğunda bir mesaj gönderebilirsiniz.
  • Veritabanı Entegrasyonu: Yıldız sayısını bir zaman serisi veritabanına (örn. InfluxDB) veya basit bir CSV dosyasına kaydederek geçmiş verileri tutabilir ve daha sonra grafikler oluşturmak için kullanabilirsiniz.
  • Grafik Oluşturma: Çekilen verilerle basit bir grafik oluşturup bunu deponuza SVG olarak commit edebilir, böylece README.md dosyanızda dinamik bir grafik gösterebilirsiniz.

Bu geliştirmeler, "sıfır bağımlılık" prensibinden biraz uzaklaşabilir, ancak projenizin ihtiyaçlarına göre esneklik sunar.

Sıkça Sorulan Sorular (SSS)

Bu tür bir otomasyon çözümüyle ilgili akla gelebilecek bazı soruları yanıtlayalım.

Bu yöntem ne kadar güvenli?

GitHub Actions, deponuzun bağlamında çalışır ve varsayılan olarak depoya yazma iznine sahiptir (eğer contents: write izni verilmişse veya git-auto-commit-action gibi eylemler kullanılıyorsa). Bu, betiğin deponuzda değişiklik yapabileceği anlamına gelir. Ancak, kullandığınız eylemler (örneğin checkout, git-auto-commit-action) GitHub tarafından doğrulanmış ve geniş çapta kullanılan eylemlerdir. Kendi betiğinizde hassas bilgiler kullanmadığınız sürece güvenlik riski düşüktür. GitHub API'si herkese açık olduğu için herhangi bir kişisel erişim belirteci (PAT) gerektirmez.

Birden fazla repo için kullanılabilir mi?

Evet, her depo için ayrı ayrı .github/workflows/star-monitor.yml dosyasını oluşturarak birden fazla repoda yıldız monitörü kurabilirsiniz. Her dosya kendi deposunda bağımsız olarak çalışacaktır. Eğer tüm repolarınız için merkezi bir monitör istiyorsanız, bu çözüm yeterli olmayabilir ve harici bir sunucu veya daha karmaşık bir GitHub Actions iş akışı (farklı repoların API'lerini sorgulayan) gerektirebilir.

Başka metrikler de izleyebilir miyim?

Kesinlikle! GitHub API'si, yıldız sayısının yanı sıra çatallanma (fork) sayısı, izleyici (watcher) sayısı, açık sorunlar (issues), çekme istekleri (pull requests) gibi birçok başka metrik sunar. curl ve jq komutlarını değiştirerek istediğiniz diğer metrikleri çekebilir ve aynı yöntemle deponuza kaydedebilirsiniz.

Veriyi bir veritabanına kaydedebilir miyim?

Evet, GitHub Actions içinde çalışan bir adımda harici bir veritabanına (örneğin, bir bulut veritabanı hizmeti veya kendi barındırdığınız bir veritabanı) bağlanıp veriyi kaydedebilirsiniz. Bu, genellikle ek bağımlılıklar (örneğin, veritabanı sürücüleri) ve konfigürasyon (veritabanı bağlantı bilgileri) gerektirecektir. Bu bilgileri GitHub Actions sırları (secrets) olarak saklayarak güvenliği sağlayabilirsiniz. Bu, "sıfır bağımlılık" ve "sıfır konfigürasyon" felsefesinden biraz uzaklaşsa da, daha güçlü veri analizi ve görselleştirme imkanları sunar.

Sonuç

GitHub yıldız monitörü oluşturmak, projenizin gelişimini takip etmek ve toplulukla etkileşim kurmak için değerli bir adımdır. Geleneksel yöntemlerin aksine, GitHub Actions'ın gücünü kullanarak tek bir YAML dosyasıyla, sıfır bağımlılık ve sıfır ek konfigürasyonla bu otomasyonu kurmak artık çok

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.