Geçen hafta Cuma, tam da deployment'a hazırlanıyorduk. CI/CD pipeline'ımız tıkır tıkır işliyor, her şey yolunda. Sonra birden... KIRMIZI. Build failed. "Ne olabilir ki?" diye baktım, meğerse bizim sürekli çalışan dependency license checker bot'umuz patlatmış alarmı. Log'a baktım, gözlerime inanamadım. Projede temel taşlardan biri olan, yıllardır kullandığımız bir HTTP istemci kütüphanesinin lisansı, yeni yayınlanan bir minor versiyonda, MIT'den daha kısıtlayıcı bir lisansa geçmiş! Bot da otomatik olarak "Bu lisans şirket politikamıza uymuyor, build'i kırıyorum" moduna girmiş. Kafayı yiyecektim.
İlk iş, "Acaba bot yanlış mı okuyor?" dedim. Manuel olarak kütüphanenin GitHub'ına, PyPI sayfasına baktım. Lisans dosyası gerçekten değişmişti. Şaka gibi ama, bir minor update'te (örn: 4.2.1 -> 4.2.2) lisans değişimi yapmışlardı. Hemen dependency tree'i kontrol ettim. Neyse ki sadece doğrudan bağımlılığımız değil, bir transitive dependency (dolaylı bağımlılık) değildi. Yani sorunun kaynağını bulmak nispeten kolaydı. Ama çözümü değil!
Python:
# Botun yakaladığı kritik log satırı gibi bir şey:
[LICENSE CHECK FAILED] package: "awesome-http-client", version: "4.2.2", license: "New-Restrictive-License", policy: "MIT/Apache2 only"
Hemen iki koldan saldırdık. Teknik çözüm olarak, requirements.txt dosyamızdaki (Python projesi) ilgili satırı, bir önceki güvenli minor versiyona sabitledik (pin).
Kod:
# Önceki (sorunlu):
awesome-http-client>=4.2.0
# Sonraki (güvenli):
awesome-http-client==4.2.1 # Lisans değişimi öncesi son versiyon
Bu, acil durumu çözdü ve deployment'ı kurtardı. Ancak asıl mesele bundan sonra başladı. Hemen ekip ve legal ile kısa bir toplantı yaptık. "Bu kütüphaneye devam edecek miyiz, alternatif var mı, fork'layıp eski lisansla kullanabilir miyiz?" sorularını masaya yatırdık.
Meğerse sorun şuradaymış: Biz sadece major versiyon geçişlerinde lisans değişikliği bekliyormuşuz. Oysa açık kaynak dünyasında her an her şey olabilir. Artık botumuzun konfigürasyonunu güncelledik ve tüm versiyon güncellemelerini (major, minor, patch) lisans açısından tarayacak şekilde ayarladık. Ayrıca, kritik bağımlılıklarımız için bir "acil alternatif listesi" oluşturmaya başladık.
Bu olay, otomasyonun ve proaktif önlemlerin ne kadar hayati olduğunu bir kez daha gösterdi. O bot olmasaydı, değişen lisansı belki aylar sonra fark edecektik ve çok daha büyük bir yasal/teknik sıkıntıya girecektik.
Siz de böyle "küçük" bir güncellemenin büyük krizlere yol açtığı oldu mu? Kritik bağımlılıklarınızı nasıl yönetiyorsunuz, tavsiyeleriniz var mı?