Skip to main content
Назад до блогу
5 хв читання

Dependabot для сольного розробника: групований конфіг, який я реально шипаю

Dependabot без конфігурації надсилає 30 PR на тиждень і перетворюється на шум, який ти ігноруєш. Ось групований конфіг, що надсилає 2–3 PR на тиждень із значущими оновленнями — setup, який я використовую на кожному клієнтському проєкті.

securitynext.js

Dependabot «з коробки» непридатний для сольного розробника. Вмикаєш із дефолтними налаштуваннями — і отримуєш 20–30 PR на тиждень. Один на залежність, кожен потребує рев'ю, запуску CI та мерджу. Ніхто це не підтримує. Або ти спалюєш години на dependency PR-и, або починаєш їх повністю ігнорувати.

Обидва результати погані. Ось конфіг, який робить Dependabot корисним: 2–3 групованих PR на тиждень, які можна переглянути за 10 хвилин.

Конфіг

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: weekly
      day: monday
    groups:
      # Група 1: Minor і patch оновлення (безпечно мерджити)
      minor-and-patch:
        update-types:
          - minor
          - patch
        exclude-patterns:
          - 'next'
          - 'react'
          - 'react-dom'
          - '@types/react'
          - '@types/react-dom'

      # Група 2: Next.js + React разом (тестуй уважно)
      next-react:
        patterns:
          - 'next'
          - 'react'
          - 'react-dom'
          - '@types/react'
          - '@types/react-dom'

    # Major версії: окремі PR-и (breaking changes потребують уваги)
    # Це дефолт — majors НЕ групуються

    open-pull-requests-limit: 5
    reviewers:
      - your-github-username

  - package-ecosystem: github-actions
    directory: /
    schedule:
      interval: monthly
    groups:
      actions:
        patterns:
          - '*'

Чому саме таке групування

Група 1: Minor + patch (основний потік)

Більшість оновлень залежностей — це minor і patch версії. Semver каже, що вони не мають ламати нічого. На практиці — рідко ламають. Групування їх в один тижневий PR означає:

Якщо CI зелений — мердж. Якщо червоний — перевір, яка залежність зламала: опис PR-у містить список усіх оновлень.

Група 2: Next.js + React закріплені разом

Next.js і React мають жорстке версійне зв'язування. Оновлення Next.js без React (або навпаки) може зламати білд. Групування гарантує, що вони оновлюються разом.

Ці оновлення потребують більше уваги — читай changelog, перевіряй breaking changes, тестуй локально. Але це один PR для рев'ю, а не чотири.

Major-версії: окремі PR-и

Major version bump означає breaking changes. Ти хочеш бачити кожен окремо, щоб:

  1. Прочитати migration guide
  2. Перевірити, чи твій код використовує застарілі API
  3. Ретельно протестувати
  4. Мерджити по одному

Групування major-оновлень ховає, яка саме зміна зламала білд. Тримай їх окремо.

GitHub Actions: щомісяця

Оновлення action-ів — низький ризик і нечасто. Щомісяця достатньо. Групуй усі — якщо CI проходить, мердж.

exclude-patterns для Next.js/React

Без виключення Next.js і React із групи minor-and-patch вони б потрапляли туди разом із усім іншим. Minor-оновлення Next.js часто потребує тестування — це не той самий рівень ризику, що й bump date-fns з 3.6.0 до 3.6.1.

Мій тижневий ритуал

Понеділок зранку: Dependabot за ніч створює згруповані PR-и. Переглядаю їх із кавою.

  1. Minor + patch PR: перевіряю статус CI. Зелений? Мердж. Червоний? Дивлюсь, яка залежність зламала, відкриваю issue або піную версію.
  2. Next.js + React PR (якщо є): читаю changelog, запускаю dev server локально на 5 хвилин, перевіряю Lighthouse. Мердж, якщо все чисто.
  3. Major PR-и (якщо є): планую на пізніше цього тижня, коли матиму час розібратись із потенційними зламами.

Загальний час: 10–15 хвилин. Порівняно з 2+ годинами без групування.

Сповіщення про безпеку

Dependabot security alerts — це окремо від запланованих оновлень. Вони спрацьовують миттєво, коли публікується вразливість. Вони обходять тижневий розклад — і це правильно.

Для security alerts у мене інша політика:

Що я не використовую

Renovate. Renovate більш конфігурований за Dependabot, але ця конфігурованість — це складність. Для сольного розробника з 1–5 проєктами функції групування Dependabot (доданої у 2023) достатньо. Renovate має сенс для команд, що керують 50+ репозиторіями зі спільним конфігом.

Auto-merge. Деякі команди автоматично мерджать minor/patch оновлення, коли CI проходить. Я ні — хочу бачити, що змінюється, навіть якщо мерджу за 10 секунд. Один поганий auto-merge непомітно зламаної залежності коштує більше часу, ніж місяці ручних 10-секундних рев'ю.

Пінування всього. Пінування прив'язує тебе до конкретних версій і вимикає всі автоматичні оновлення. Ти міняєш «забагато PR-ів» на «нульову видимість вразливостей безпеки». Ranges із lock-файлами (package-lock.json) дають відтворювані білди без втрати видимості оновлень.

Питання package-lock.json

Dependabot оновлює package-lock.json у своїх PR-ах. Це правильна поведінка — lock-файл має відображати оновлені версії. Якщо бачиш великі diff-и у lock-файлі — це нормально для дерев залежностей.

Одна річ, за якою варто стежити: якщо Dependabot PR змінює тільки package-lock.json (без змін у package.json) — це оновлення транзитивної залежності. Зазвичай безпечно, але іноді може викликати проблеми. CI ловить більшість із них.

Старт із нуля

Якщо у тебе є проєкт без конфігурації Dependabot і ти не оновлював залежності місяцями:

  1. Не вмикай Dependabot одразу — отримаєш 50+ PR-ів миттєво.
  2. Запусти npm outdated, щоб побачити, що відстало.
  3. Оновлюй усе вручну за одну сесію: npm update для minor/patch, потім major-оновлення по одному.
  4. Виправ усі зламані речі.
  5. Тепер вмикай Dependabot із конфігом вище. Тижневі PR-и будуть керованими, бо стартуєш із чистого стану.

Стартувати з Dependabot із нуля — як відкрити пожежний гідрант. Спочатку оновись вручну, потім автоматизуй.


Хочеш, щоб залежності керувались без шуму? Пиши — я налаштовую workflows розробки з урахуванням безпеки на кожному клієнтському проєкті.