Застарілі залежності - один з основних джерел вразливостей. Але бот, що щодня відкриває 30 пул-реквестів, швидко вчить команду їх ігнорувати. Мета - регулярні, невеликі, зрозумілі оновлення.
Два види оновлень:
- security updates - негайні PR для версій з відомими вразливостями (Dependabot alerts);
- version updates - планові оновлення до нових версій за розкладом.
Базова конфігурація Dependabot (.github/dependabot.yml):
version: 2
updates:
- package-ecosystem: composer
directory: /
schedule:
interval: weekly
groups:
laravel:
patterns: ['laravel/*']
minor-and-patch:
update-types: [minor, patch]
open-pull-requests-limit: 5
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
Що робить процес керованим:
- групування - усі патч- і мінорні оновлення одним PR на тиждень замість десятків окремих; пов'язані пакети (
laravel/*,@vue/*) - разом; - розклад - щотижня в певний день, коли хтось точно подивиться;
- ліміт відкритих PR;
- автоматичне злиття патч-оновлень, якщо проходять тести (Renovate вміє це з коробки, для Dependabot - через правила репозиторію й workflow). Без хорошого покриття тестами автозлиття небезпечне;
- мажорні оновлення - окремо й свідомо, з читанням журналу змін.
Renovate гнучкіший: пресети конфігурації, автозлиття за правилами, «dependency dashboard» з переліком усіх доступних оновлень, затримка для щойно опублікованих версій (minimumReleaseAge).
Затримка нових версій - корисний захист від атак на ланцюжок постачання: скомпрометовані версії пакетів зазвичай виявляють і відкликають протягом днів. Оновлення на версію, опубліковану кілька днів тому, а не годину, знижує ризик.
Не забувати:
- lock-файли (
composer.lock,package-lock.json) у репозиторії - щоб продакшен отримав рівно те, що протестовано; - оновлення GitHub Actions і Docker-образів - теж залежності;
- CI має запускати всі тести на PR від бота - інакше оновлення «пройде», зламавши застосунок;
- відповідальний за розбір - інакше PR накопичуються, і за пів року оновлення стає великим і страшним.
Докладніше в документації: GitHub: оновлення версій Dependabot