Как да използвам Dependabot, за да поддържаме вашата среда актуална

Добавянето на зависимости към проект често ви помага да не преоткривате колелото. Но в същото време може да предизвика проблеми в много различни аспекти на проекта:

  • Версиониране: понякога зависимостите могат да изискват специфични версии на други зависимости и това може да причини хълцане в приложението ви
  • Групиране: трябва да внимавате да не се окаже твърде много допълнителен код, който да раздуе вашите пакети
  • Актуализиране: JavaScript се движи бързо и ако не актуализирате редовно пакетите, ще играете Jenga в бъдеще.

Има различни инструменти за покриване на задачата за актуализиране на зависимости, като Dependencies.io, Snyk и Dependabot. Тъй като използвам Dependabot от известно време, реших да напиша за моя опит.

Dependabot е инструмент, придобит от GitHub преди година, който проверява файловете на зависимостите от различни езици (Ruby, JavaScript, Python, PHP, Elixir, за да назовем само няколко) и намира нови версии на библиотеки, които използвате във вашия проект. Ето настройката:

Екранна снимка на Dependabot

Ежедневните актуализации могат да бъдат поразителни и мисля, че седмичните актуализации имат по-добри разходи / ползи. Също така си задавам заявки за изтегляне, за да мога да получавам известия веднага щом се отворят.

Как да използвате Dependabot ефективно

Dependabot включва, във всеки PR, бележки за изданието, дневници за промени, връзки за ангажименти и подробности за уязвимостта, когато са налични. Това е полезно, защото можете да разгледате информацията и да решите да продължите или не.

Като прагматични програмисти обаче искаме да гарантираме, че нещата няма да се счупят. Подробностите за PR са важни, но освен това искаме симулация на всички (или почти всички) резултати, които проектът има.

CI интеграция

Тази екранна снимка показва какво се случва всеки път, когато се отвори PR в кодовата база на библиотеката на компонентите на моята работа.

  • Тестове (Jest / Bundle) : задачата Jest ще тества компонентите React, докато задачата Bundle ще симулира командите за групиране, които изпълняваме, когато искаме да актуализираме пакета в регистъра на NPM
  • Linters (Stylesheets / JavaScript) : файловете със стилове следват персонализирана настройка на sass-lint и JS кодът следва серия от правила на ESLint. Ако PR представи нова версия на линтър с нови правила, ще можем да го уловим.
  • Cypress (Тестване на екранна снимка / Тестване на достъпността) : ако нов пакет въведе промени, които могат да бъдат отразени във външния вид на компонентите, Cypress ще заснеме разликата, ще я скрийншот и ще съхрани в S3. Тъй като Cypress се нуждае от актуална версия на уебсайта за документация, ние също така обхващаме процеса на изграждане на Gatsby.

С всички тези стъпки е много малко вероятно външен пакет да наруши нашия главен клон. С уважение на моя колега Грант Лий, който също работи по този проект.

Публикувано и в моя блог. Ако харесвате това съдържание, последвайте ме в Twitter и GitHub. Снимка на корицата от Джан Кени в Unsplash