Skip to main content

Что такое pvm ?

Pvm это утилита, которая позволяет автоматизировать релиз npm-пакетов в репозитории по мержу в мастер. Все что требуется от разработчика – создать мерж-реквест с нужными правками, всю работу по публикации и изменению версий pvm возьмет на себя.

Рассмотрим в качестве примера цикл обновления группы пакетов:

  1. Создаем feature-ветку, изменяем группу пакетов.
  2. Обновляем версии изменившихся пакетов.
  3. Смотрим по дереву зависимостей пакеты, которые зависят от изменившихся, и обновляем версии им тоже.
  4. Пишем ченжлог.
  5. Фиксируем новые версии пакетов, создаем релизный тег.
  6. Оповещаем о релизе в слак.

Это не единственный возможный поддерживаемый flow разработки, но суть одна: PVM позволяет автоматизировать все шаги этого процесса, кроме первого.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nNWZW3PaOFx1MDAxNMff8ylcdTAwMTj6uK2r+6Uz+5CEJM2llCZcXNrudnZcdTAwMWNbgIuxXHUwMDFk24RLp999ZYdiXHUwMDAzdsqSkGH9wGBcdTAwMWTLOpJ+568j+cdBpVKNp4GqvqtU1cQyXcdcdTAwMGXNcfV1Un6vwsjxPW1C6X3kj0IrfbJcdTAwMWbHQfTu7dushmH5w4daylVD5cWRfu4vfV+p/Eh/c+2YYeg/NJFcdTAwMTZnzVAoVkvrvpc2XHRcdTAwMTHDlEKEwOJcdCeq6bZiZWtz13QjlVmSoiqv9U993Pp+XHI/jFx1MDAxYupmXHUwMDEy1rBqZ812XHUwMDFk172Jp27qUuTrbmS2KFx1MDAwZf2B6jh23NdWslJeViv0R72+p6Kk65mbfmBaTjxN+lx1MDAwMLJS0+ul78hKJslcdTAwMDBcYmxgLiRgiC5cZmlVKlxyXHUwMDA2KGGC01x1MDAxNW+OfddcdTAwMGZcdTAwMTNvXkHBiHmb+XNrWoOedsqzXHUwMDE3z8Sh6UWBXHUwMDE56lx0yp5cdTAwMWL/6idnhlx1MDAwMMtt9JXT68eJo1x1MDAwNlx1MDAxNkjAnF+RSodeIFwiqeSEL1xmSZvBuZ1cdTAwMTLwbXXs+mZcdTAwMTjMx6ia+pbzN7k9ecCnoLpcdTAwMTnGR45nO15PW7yR6y5syrNLLIHv5FFMruxfJVx1MDAxYv30ZvH/2+vCp1x1MDAwYsYnud4shiZ7wcHKi6quXHUwMDE5xcf+cOjEXHUwMDFh2Ebi1aqraVx1MDAwN1x1MDAwZpPQ6CvTLuhi3jaPodT683VxmCnXdYJIXHUwMDE1XHUwMDA1XHUwMDFhXHUwMDExpCzQXGKkmkCIyMZxdnVcdTAwMTfXXHUwMDAzc3Z3eXbiwvrH00P/bHi+TZyhLeJcZm5cdTAwMTVnjFx1MDAwMYNcdTAwMDNcdTAwMGUwXFyNMyxcZsKkjiRcdTAwMDFcdTAwMTPJYU+Ktlfdbnc9zDA1OMXLMb5cYjPMXGZMXHSVWup0SCEmVsNcckrMKVx1MDAwN1x1MDAxNMP/XHUwMDFlb1Fy83i8bUuUpLSMKFxmdWeS/mxM1LVcdTAwMGZcdTAwMTT/XHUwMDAyZ7OLL+2rN008Zu9r4X5cdTAwMTMlXHUwMDE5NiSGjKxLN5aGkExcIqiJSZDCpUhRS1x1MDAxMmC/PFJa0SClWsR3gdRCXHUwMDE0q8NcdJfRffuic9dqnrXIhTO5OybVX1L5KHmxmsRF2EHASjNcdTAwMDZIXHUwMDEx1f2SbGPuXGL/XHUwMDE41jp1Me1cdTAwMWSdf+/Xp/6lXHUwMDE40JfibruMQc+qUVx1MDAwNFx1MDAxZEBcdTAwMDZcdTAwMDV8eb1+Ltpyi8dcdTAwMDKyXFxeNqdKYkIkXHUwMDA2gO5cdTAwMDKqrHrX9+JcdTAwMWJnls44Wyo9NYeOO12K6Fx1MDAxNKMk8dBcdTAwMTiYkXpzj/Ldj5TreOmLyFKNQ9fpJbBVXdVdpjB2dP67MMd+sPWKXGZcdTAwMDEsJ5lDpHM/iNHGJFx1MDAwYlx1MDAwZtU+tq3RqbxcdTAwMWNcdTAwMWPX6furi66A+62gXGYwg0BcdTAwMDYgLVJQrlx1MDAxOef7q6A6zqSOt5zW/G9cdTAwMTRU4lLuXHUwMDA0XHUwMDAzXGJrddk8XHUwMDE3bP8zjHudXHUwMDEzcthvfek3ep9uaDtsbMNcdTAwMWR8Me4oZVx1MDAwNpN0PVx1MDAxNVx1MDAwNFDzqKf0sS3XXHUwMDA2vD265SraaVx1MDAxNUgpk1rJ8U7gei4lhS+qpKU057ahKzRr+dBcdIHGeWOYx03SOFx1MDAxZo3HtVvvZty/b3dk7Hzab5hcdTAwMTnVOsY5Jpgv0yyhgVbOXHUwMDE1nvv4QKB1lslcdTAwMWHLkEm9W6ZcIiei+0PzyJvzbP/tWX09xCoqxFx1MDAxYb8w1qWpXHUwMDAxYZBpccCb57ghb8ZBa9D9fnXUOImG18Rcbm17z6EmcIllrcw7g1x1MDAxOIJ1iNdcdTAwMDVcdTAwMTlivaNjguwlxH+8qFx1MDAxMofKilx1MDAxZqatgFtcXJ7UUlx1MDAwNFx1MDAwMFx1MDAwNPmDqN+R+5VcdTAwMWZKOsP8s/hMvLtByzr3QbTf5HImjKKMVnBcdTAwMDNjKZZUepVkneoqaT2BZIxcZi6RLD7OJTrpWdk3ztmmXHUwMDAyYFx1MDAxZEQ56F/sfKk8Ry1d1TGgXCJZ2PDGXHUwMDE4Qfv6ZNA8u/x0LVx1MDAwN51cdTAwMGaz+uRDw5ruOUZcXG+Ailx1MDAxNnVmXGIqd1xuXHUwMDExkFx1MDAwNXq4xlxmQlx1MDAxNGB9oZ0wUySHOTx/I4fB/bAyXG5sM1bFuiiWaiyEz9JcdTAwMGWo8Fx1MDAxMWVcdTAwMWM6tq3naiugafmCLlx1MDAwMOBUis0/c11Nzf5cdFx1MDAwNbTZcabEaca9q1x1MDAxMTvdc56JMHTcLqObXHUwMDAyLVxyTdxuVXFcdTAwMTOeoSRcXEfbbrbzT+S5ZHkvwXhXXHUwMDE5aS6xXzt3hYwwxIHYXHUwMDE44duv4ehcdTAwMTRetlx1MDAxYu33VlibOZ9bNcL2XHUwMDFiYYmgsX5iXHUwMDAwXGa6vNg/O75cdTAwMDV7rFx1MDAwMnw5XHUwMDAxgFx1MDAxMsR2s4Y/jd8/d8Pvwfxra9VcZoKbOFH7d3Oaq/eOXHUwMDFhXHUwMDFmXHUwMDE1XHUwMDFmXHUwMDA0ZmeBeoRcdTAwMWN73pnky+tB8s6f/1x1MDAwMmlvVPIifQ==release-v2release-v1unreleasedchanges+pvm update+=

Pvm может работать полностью в автоматическим режиме, как часть вашего CI/CD процесса. Чем конкретно умеет управлять pvm, чтобы обеспечивать автоматизацию релизов:

  • версии пакетов, с учетом зависимостей между ними
  • создание релизного тега
  • генерация описания релиза (release notes)
  • обновление ченжлога
  • публикация пакетов в хранилище/реестр
  • формирование и отправка нотификации в слак о релизе

Pvm покрыт интеграционными тестами, покрывающие различные сценарии использования, так что вы можете быть спокойны за релизный процесс – он в безопасности.

Pvm поддерживает репозитории как со множеством пакетов (монорепозитории), так и репозитории представляющие только один пакет.

В каких случаях имеет смысл использовать ?

  1. Вы хотите автоматизировать инкремент версий пакетов или пакета
  2. Вы хотите публиковать только изменные пакеты в реестр
  3. Вы хотите иметь автоматический ченжлог на основе коммитов между релизами
  4. Вы хотите уведомлять о релизах в slack

Полный список поддерживаемого функционала

Механизм работы

В основе лежат всего 2 команды:

  1. pvm update или pvm local update – обновление версий пакетов, ченжлога и создание релиза на основе измененных файлов.
  2. pvm publish – публикация обновленных пакетов в последнем релизе.

Есть и другие команды, но эти две основные которые делают основную работу.

Дальнейшие шаги