İçeriğe geç
pitonmert

Otomasyon · Servis

release-radar

Yazılım sürüm notlarını düzenli tarayan, Türkçe özetleyen ve Telegram üzerinden ileten kalıcı otomasyon servisi.

  • Python
  • SQLite
  • Gemini API
  • Telegram Bot API
  • Docker
Kaynak kod

Bağlam ve amaç

release-radar, takip edilen araçların sürüm notlarını farklı sitelerde aramak yerine tek bir bildirim akışında toplar. Sistem, yeni sürümü bulmakla yetinmez; uzun veya dağınık notları Türkçe özetler ve kaynağa geri dönülebilen bir Telegram bildirimi üretir.

Bu proje, zamanlanmış tek seferlik bir iş yerine kendi döngüsünü yöneten uzun ömürlü bir servis olarak tasarlandı. Böylece tarama sıklığı, bildirim geçmişi ve hata sonrası yeniden deneme davranışı uygulamanın kendisinde kalır.

Nasıl çalışır

Servis açıldığında kaynak yapılandırmasını okur ve ilk taramayı yapar. Bir kaynak ilk kez görülüyorsa mevcut girişler bildirim göndermeden başlangıç noktası olarak kaydedilir. Sonraki taramalarda yalnız daha önce görülmemiş girişler işlenir.

Yeni bir sürüm bulunduğunda kaynak türüne göre RSS veya Atom girdisi alınır; VS Code için ayrıntılı Markdown notlarını getiren özel yol da bulunur. Metin Gemini API ile Türkçe özetlenir, Telegram sınırını aşarsa parçalara bölünür ve gönderilir. Başarılı gönderimden sonra giriş kalıcı duruma yazılır.

Sistem tasarımı

Python uygulamasındaki ana tarama döngüsü; kaynak okuma, ağ isteği, özetleme ve bildirim işlerini bir araya getirir. SQLite veritabanı, kaynak adı ve giriş kimliğinden oluşan benzersiz anahtarla daha önce işlenen sürümleri saklar.

Yapılandırma dosyası izlenecek kaynakları ve kaynak türlerini tanımlar. Docker Compose, yapılandırmayı salt okunur bağlar; veritabanı ise container yeniden kurulsa da korunacak kalıcı bir dizinde tutulur. Böylece kaynak listesi değiştirilebilirken bildirim geçmişi çalışma zamanına ait kalır.

Öne çıkan teknik kararlar

İlk taramada sessiz baseline oluşturmak, eski sürümlerin bir anda bildirim olarak yağmasını önler. SQLite içindeki source ve guid birleşik anahtarı, container yeniden başlasa bile aynı kaydın tekrar gönderilmesini engeller.

Harici ağ, Gemini ve Telegram çağrıları geçici olarak başarısız olabilir. Bu nedenle istekler geri çekilmeli denemelerle yapılır; Telegram gönderimi başarılı olmadan bir giriş görüldü olarak işaretlenmez. Uzun mesajların parçalanması, bir sürüm notunun platform sınırları yüzünden tamamen kaybolmasını önler.

Servis kapanış sinyallerini ele alır ve bekleme döngüsünü kesintili uyku ile yürütür. Bu, Compose yeniden başlatmalarında bir sonraki döngünün daha öngörülebilir başlamasını sağlar.

Doğrulama ve sınırlar

Pytest testleri; SQLite şemasını, başlangıç baseline davranışını, tekrar bildirimi önlemeyi ve başarısız Telegram gönderiminde kaydın işaretlenmemesini kapsar. Ruff ve Docker build kontrolleri de sürekli entegrasyon akışında yer alır.

Özetin doğruluğu kaynak metne ve dil modelinin çıktısına bağlıdır. Telegram gönderimi ile SQLite güncellemesi tek atomik işlem değildir; iki adım arasında kesinti olursa sonraki taramada yinelenen bildirim oluşabilir. Kalıcı veri dizininin silinmesi de her kaynak için başlangıç noktasını yeniden kurar.