У нас было два основных кризиса, связанных с зависимостями, с двумя разными базами кода (Android и веб-приложение Node.js). Для репозитория Android необходимо было перейти с Flurry на Firebase, что потребовало обновления библиотеки Google Play Services четырех основных версий. Аналогичная ситуация произошла с нашим приложением Node, размещенным на Heroku, где наш производственный стек (кедр) устарел и его необходимо обновить до cedar-14. Наша база данных PostgreSQL также должна была обновиться с 9.2 до 9.6.
Зависимости каждого из этих приложений устарели в течение почти двух лет, и когда некоторые из них устарели, и мы достигли периода «заката», было большой головной болью их обновить или заменить. За прошедший месяц или два я потратил более 30 часов, медленно решая все конфликты и неработающий код.
Очевидно, что сидеть два года слишком долго. Технология быстро развивается, особенно когда вы используете провайдера платформы, такого как Heroku. Давайте предположим, что у нас есть полноценный набор тестов и процесс CI, такой как Travis CI, который отнимает много догадок при обновлении. Например, если функция была удалена после обновления, и вы использовали ее, ваши тесты не пройдут.
Как часто следует обновлять зависимости или когда обновлять зависимости? Мы обновили, потому что мы были вынуждены, но кажется, что какой -то упреждающий подход будет лучше. Должны ли мы обновляться при выпуске минорных версий? Основные версии? Каждый месяц, если обновления доступны? Я хочу избежать любой ситуации, подобной той, которую я только что пережил.
PS - для одного из моих личных Rails-проектов я использую сервис под названием Gemnasium, который отслеживает ваши зависимости, чтобы вы могли получать уведомления, например, об уязвимостях безопасности. Это отличный сервис, но мы должны были бы вручную проверить зависимости для проектов, которые я упомянул.