Cuma günü saat dörtte bir düzeltme gönderiyorsunuz. Cumartesi sabahı uyarılar çalmaya başlıyor. Olayı, on sekiz saat önce birleştirilmiş bir pull request'e kadar takip ediyorsunuz. Branch derlendi, testler geçti ancak PR açıklaması boş. Hiçbir iş öğesi (work item) buna bağlı değil. Onay geçmişinde hiçbir şey görünmüyor. Bir hayalet birleştirmeye (ghost merge) bakıyorsunuz ve şimdi ana dala (main) dokunmadan önce yakalanması gereken bir karmaşayı temizlemek için hafta sonunuzu harcıyorsunuz.
Küçük ekipler bu riskle her gün yaşıyor. Her birleştirme işleminin başında bekleyen bir sürüm yöneticiniz (release manager) yok. Özel politika motorları inşa eden bir platform ekibiniz de yok. Elinizde olan şey Azure DevOps ve onun yerleşik branch politikaları oldukça kaba bir araç. Ya kapıyı sertçe kapatıyor ya da ardına kadar açıyor. İki incelemeci (reviewer) şartı koşarsanız acil hotfix'leri engellersiniz. Kuralları gevşetirseniz, boş açıklamalar biletlenmemiş değişikliklerle birlikte prodüksiyona uçar. Nadiren orta bir yol bulunur.
İşte bu boşluk, tam olarak Gatekeeper'ı neden inşa ettiğimizin sebebi. Gatekeeper, özellikle Azure DevOps için tasarlanmış, yapay zeka destekli bir PR inceleme masasıdır; ancak modern geliştirici araçları hakkında varsaydığınız her şeyi unutun. Docker konteyneri yok, abonelik planı yok ve bulut dağıtım hattı (cloud deployment pipeline) yok. Gatekeeper tek bir HTML dosyasıdır. Tarayıcınızda açarsınız, dört değer girersiniz ve bir düğmeye basarsınız. Araç daha sonra üç basit soruyu yanıtlar: Bu PR bir biletle (ticket) bağlantılı mı? Bir insan bunu gerçekten inceledi mi? Ve kod kalitesi nasıl?
Her şeyi tek bir bağımsız dosyada paketleme kararı bir numara değildi. Gerçek operasyonel baş ağrılarını çözüyor. İlk olarak, barındırmak veya ödemek için sıfır altyapı var. Bir App Service kurmakla veya veri çıkış maliyetleri (egress costs) ile uğraşmıyorsunuz. İkinci olarak, kimlik bilgileri asla makinenizden ayrılmaz. Azure DevOps kişisel erişim token'ınız (personal access token) yalnızca tarayıcı belleğinde durur ve sayfayı yenilediğiniz anda yok olur. Sızdırılacak bir gizli bilgiler veritabanı veya güvenilecek bir OAuth sunucusu yoktur. Üçüncü olarak, adaptasyon sürtünmesiz hale gelir. Kimseyi bir wiki üzerinden sisteme dahil etmeniz (onboard) gerekmez. Dosyayı bir e-postaya ekleyebilir veya bir Slack kanalına bırakabilirsiniz. Alıcı dosyayı açar ve hemen incelemeye başlar.
Olgu Katmanı: Önce Belirlenimcilik
Gatekeeper incelemesini iki farklı katmana ayırır ve bu ayrım, güvenilirliğinin bel kemiğidir.
İlk katman, doğrudan Azure DevOps REST API ile konuşan saf JavaScript'tir. Değişmeyen olguları kontrol eder. Bir pull request bir iş öğesine (work item) bağlıdır ya da değildir. Bir incelemeci bir onay oyu vermiş midir, vermemiş midir? Açıklama ya boştur ya da gerçek cümleler içerir. Aktif tartışmalar ya çözülmüştür ya da hala açık duruyordur.
Spesifik olarak, Olgu Katmanı dört şeye bakar:
- Bilet eşlemesi (Ticket mapping): PR en az bir iş öğesine bağlı mı?
- İncelemeci onayı (Reviewer sign-off): Birisi onay için oy kullandı mı, yoksa sayı hala sıfır mı?
- **Açıkl
