Geçenlerde şu meşhur dependency update botlarından birini kurmuştum repo'ya. "Oh ne güzel, requirements.txt'deki versiyonları otomatik güncelleyecek, ben de kafam rahat olacak" diye düşünüyordum. Meğer kendi başıma en büyük düşmanı yaratmışım.
Bot çalıştı, bir sürü Pull Request açtı. Hepsi de minor ve patch update'leri. "Güvenlik ve bug fix, ne güzel" deyip hepsini merge ettim. CI/CD pipeline'ı da yeşil ışık yaktı, her şey yolunda gibiydi. Ta ki...
Gece saat 2'de, deployment tam production'a çıkmak üzereyken, test suit'inin yarısının patladığını gördüm. Özellikle bir Pandas işlemi, ValueError fırlatıyordu. Aynı kod, aynı data, dün çalışıyordu! Hemen dependency loglarına baktım.
Python:
# requirements.txt 'before'
pandas==1.5.3
numpy==1.24.3
# requirements.txt 'after' (Botun "hediyesi")
pandas==2.0.3
numpy==1.25.0
Görünüşte masum iki minor update. Ama Pandas 2.0, bazı default davranışları değiştirmiş. `read_csv`'deki bir parametrenin default'u `None`'dan başka bir şeye dönmüş ve benim eski kodum, bu silent change'i yiyerek data'yı yanlış parse ediyordu. StackOverflow'da bile direkt bir cevap yoktu, en son release notlarını karıştırmam gerekti.
Panik içinde, o PR'ı revertledim ve botun config'ine girdim. Artık sadece patch versiyonları (1.5.3 -> 1.5.4 gibi) otomatik güncelleyecek. Minor ve major update'ler için bana PR açacak ama ben manuel olarak test edip onaylayacağım. Ayrıca, update'ten sonra tüm test suit'ini çalıştırması için bir adım ekledim workflow'a.
Asıl ders: Otomasyon harika, ama körü körüne güvenmek felaket. Bir satırlık bir version bump, saatlerce debug etmene neden olabilir. Hele ki transitive dependency'ler (mesela pandas'ın numpy'ı da güncellemesi) işi iyice karıştırıyor.
Siz de böyle "yardımsever" botlar yüzünden başınız derde girdi mi? Minor update'leri otomatik merge etmek sizce riskli mi, yoksa ben mi şanssızım?