Mieliśmy dwa główne kryzysy związane z zależnościami z dwiema różnymi bazami kodu (Android i aplikacja internetowa Node.js). Repozytorium Androida wymagało migracji z Flurry do Firebase, co wymagało aktualizacji biblioteki usług Google Play czterech głównych wersji. Podobnie stało się z naszą aplikacją Node hostowaną przez Heroku, w której nasz stos produkcyjny (cedr) był przestarzały i wymagał aktualizacji do cedru-14. Nasza baza danych PostgreSQL również wymagała aktualizacji z wersji 9.2 do 9.6.
Zależności każdej z tych aplikacji pozostawały nieaktualne przez prawie dwa lata, a kiedy niektóre były przestarzałe i osiągnęliśmy okres „wygaśnięcia”, poważnym problemem było ich zaktualizowanie lub zastąpienie. W ciągu ostatniego miesiąca spędziłem ponad 30 godzin, powoli rozwiązując wszystkie konflikty i zepsuty kod.
Oczywiście pozostawienie rzeczy na dwa lata jest zdecydowanie za długie. Technologia szybko się rozwija, szczególnie gdy korzystasz z dostawcy platformy, takiego jak Heroku. Załóżmy, że mamy pełnoprawny pakiet testowy i proces CI, taki jak Travis CI, który wymaga dużo zgadywania podczas aktualizacji. Np. Jeśli funkcja została usunięta po aktualizacji, a użytkownik jej używał, testy zakończyłyby się niepowodzeniem.
Jak często należy aktualizować zależności lub kiedy należy aktualizować zależności? Zaktualizowaliśmy, ponieważ byliśmy do tego zmuszeni, ale wydaje się, że lepiej byłoby zastosować podejście wyprzedzające . Czy powinniśmy aktualizować po wydaniu mniejszych wersji? Główne wersje? Co miesiąc, jeśli aktualizacje są dostępne? Chcę uniknąć takiej sytuacji, jakiej właśnie doświadczyłem za wszelką cenę.
PS - w jednym z moich osobistych projektów Railsowych korzystam z usługi Gemnasium, która śledzi twoje zależności, dzięki czemu możesz być powiadamiany np. O zagrożeniach bezpieczeństwa. To świetna usługa, ale musielibyśmy ręcznie sprawdzić zależności dla wspomnianych projektów.