Günlük Pull Request Kontrolü ve Otomatizasyonu

Onur Uysal
Tapu.com Bakış Açısı
4 min readMar 1, 2022
Photo by Gustavo Sánchez on Unsplash

Geride hiçbir PR’ı bırakmayalım!

Nedir Bu Pull Request?

Yazılım dünyasının olmazsa olmazlarından olan versiyon kontrol sistemleri (Git, Mercury) ve bu sistemleri kullanarak depolama yapan web servisleri (Github, Bitbucket), geliştirilen projelerde yapılan değişiklikleri adım adım kaydederek tüm versiyonları saklamayı ve yönetmeyi sağlar.

Yapılan değişiklikler depoda (repository) saklanır, projede ve depoda güncelleme yapmak ve versiyon atlatmak için değişikliklerin olduğu dosyalar “pull request, (PR)” ile versiyon kontrol sistemine gönderilir. Güvenli adımlarla ilerlemek için çoğu projede gelen değişiklik isteklerinin projeye dahil edilmeden önce yöneticiler tarafından onaylanması beklenir.

Kontrol Süreci

Bir “PR”’ın koda dahil edilmeden önce onaylanması gerektiğinden bahsettik. Normal şartlar altında projenin sahibi gelen kodu inceleyerek onay veya red verir. Ancak; büyük bir şirkette veya projede çalışıyorsanız bir projeye bir günde onlarca PR geliyor olabilir. Böyle bir durumda kodu inceleyip onay vermesi gereken kişiler yeni gelen PR’ları ya da PR’lara yapılan değişiklikleri gözden kaçırabilir. Bu durum işleyişin yavaşlamasına ya da yeni problemler ortaya çıkmasına sebep olabilir. Bugün PR’ların daha fazla beklememesini ve unutulmamasını sağlayacağız.

Photo by charlesdeluvio on Unsplash

Peki Nasıl?

Bunun için öncelikle PR’ları kontrol etmemiz, bunların içersinden uzun süre bekleyenleri (ör. 24 saat) ayıklamamız ve sonrasında bekleyen PR’ları bir şekilde ilgili kişilere iletmemiz gerekiyor. Eğer kodumuz başarılı bir şekilde çalışıyorsa, istediğimiz kontrol mekanizmalarını sistemimize kolayca entegre edebiliriz. Mesela ben, “Change Request (Değişiklik İsteği)”ten sonra bir PR’a güncelleme geldiyse bunu da ekibe bildirmeyi tercih ettim.

Başlangıç

Öncelikle Pull Request’leri kontrol etmek için kodunuzun bulunduğu ağ depolama servisinin API’sini kullanarak çekmemiz gerekiyor. Biz Tapu.com’da Bitbucket kullandığımız için buradan ilerleyeceğim. Bitbucket API’sini kullanmak için bir token oluşturmanız ve bu token’a Pull Request okuma ve Repository okuma yetkileri vermeniz gerekmektedir.

Token’ımız da hazırsa, önümüzde bir engel kalmıyor. Pull requestleri okumak için token kullanarak Bitbucket API’sinde sunulan /2.0/repositories/{workspace}/{repo_slug}/pullrequests adresine istek atıyoruz.

Gelen cevapta bizim için değerli bilgiler bulunuyor. Örneğin updated_on bize Pull Request’in en son ne zaman güncelleme aldığını gösteriyor. Ya da cevap içerisinde gelen links objesinde bulunan activities Pull Requestte yapılan onaylama, red ya da değişiklik isteklerini kronolojik olarak bize sunuyor. Yine links altındakidiffstat ile hangi dosyanın ve hatta hangi satırın değiştiğini öğrenebiliriz ve projede bu bilgileri kullanabiliriz.

Kontrol Mekanizmaları

Her Bir PR için

  • Master Branch’a açılan Pull Request var mı kontrol et.
  • Değişen dosyaları Backend ya da Frontend olarak ayır.
  • Change Request var mı, varsa sonradan onaylanmış mı kontrol et
  • En son güncelleme tarihini kontrol et

Bu kontrolleri sağladıktan sonra şöyle bir mantık kurabiliriz

  1. Eğer bir PR master’a açıldıysa buna öncelik ver ve mesaj objesi oluştur.
  2. Değilse FE ve BE ile ilgili bekleyen değişiklikler için mesaj objesi oluştur.
  3. Eğer PR’da Change Request varsa ve onaylanmamışsa, bunun sonradan update edilmesine bak. Edildiyse mesaj objesi oluştur.
  4. Hiçbir filtreye uymayanların son güncellenme tarihine bak. 24 saati aşmışsa mesaj objesi oluştur.

Örnek Mesaj Objesi

Biz Tapu.com ailesi olarak iletişim kurmak için Slack tercih ediyoruz. Bütün ekibimiz gün içinde Slack’e rahatça ulaşabildiği için, bildirimleri buraya göndermeye karar verdim.

Slack’e bildirim gönderebilmek için, Slack üzerinde bir Slack App oluşturmanız ve gerekli yetkileri verdikten sonra bir Webhook tanımlamanız gerekiyor.

Yukarıda görebileceğiniz gibi basit bir mesaj objesini axios ya da benzeri bir yapı ile kolayca gönderebiliriz.

axios.post(WebhookURL, {blocks: message });

Slack Kanalına Gelen Mesaj:

Bütün kodun çıktısı:

Buraya kadar başarı ile gelebildiysek ekibimiz artık hangi PR’ın ne kadar beklediğini, kimin onaylamasını gerektiğini, master’a açılan PR’ları ve hatta change request isteğinden sonra güncellenmiş olan PR’ları görebiliyor demektir.

Otomatizasyon

Bundan sonraki tek aşama yaptığımız projenin düzenli olarak çalışmasını sağlamak. Bunun sağlama yolunda sunucu ile uğraşmamak için Bitbucket Pipeline tercih ettim. Bitbucket Pipeline ile ister bir olay sonucu tetiklenen isterseniz de düzenli olarak tekrar eden kod blokları çalıştırabiliyorsunuz.

Pipeline çalıştırmak için projemizi Bitbucket’a yüklememiz gerekiyor. Daha sonra projeye bitbucket-pipelines.yml adında bir dosya ile gerekli konfigürasyonları yapıyoruz. Bu pipeline NodeJS kurup sonra da notifyWaitingPRs.js scriptini çalıştıracaktır.

bitbucket-pipelines.yml

Son olarak da Pipelines sekmesinden Schedule seçerek günün, haftanın ya da ayın hangi zamanlarında çalışmasını istediğinizi seçebilirsiniz.

Voila!

Böylece düzenli olarak PR’larınız kontrol edilip Slack kanalınıza mesaj olarak düşecektir. Geride hiçbir PR’ı bırakmayalım!

--

--