Создайте журнал изменений как часть npm version command

Мне нравится создавать небольшие специализированные модули, которые выпускаются часто, часто по несколько раз в день. Поэтому для меня очень важно, чтобы процесс релиза позволял мне чувствовать себя уверенно и был полностью автоматизирован. Я использую npm как инструмент сборки, поэтому каждый модуль поставляется со всеми инструментами разработки, необходимыми для линтинга кода и запуска тестов с использованием сценариев npm. Когда я начал создавать первую пару модулей для проекта JavaScript Studio, я хотел, чтобы процесс выпуска соответствовал этой модели.

Многие авторы модулей уже используют версию npm для подготовки своих релизов. Например, когда вы запускаете npm version minor, npm удалит младшую версию в файле package.json и создаст фиксацию версии с новым номером версии в качестве сообщения фиксации. Использование npm естественно подходит для моих нужд, но я хочу писать примечания к выпуску, основанные на истории коммитов и добавленные в коммит выпуска. Именно это позволяет мне модуль@studio/changes.



Как это работает?

Вы можете добавить модуль изменений в процесс выпуска в два этапа:

  1. npm install @studio/changes --save-dev
  2. Добавьте version скрипт в свой package.json, который просто вызывает changes (npm уже делает его доступным на PATH).

Вот и все! Теперь просто запустите npm version [patch|minor|major], и ваш текстовый редактор по умолчанию откроется либо с вашим существующим, либо с новым CHANGES.md файлом. У него будет новый заголовок с номером версии и списком изменений, заполненным из вашего журнала фиксации в качестве отправной точки. Закончив редактирование примечаний к выпуску, просто сохраните и закройте редактор, и файл CHANGES.md будет добавлен в фиксацию версии.

Больше автоматизации!

Команда npm version вызывает следующие сценарии:

  • preversion вызывается перед изменением файла package.json. Мы можем использовать это для запуска npm test, чтобы процесс выпуска был прерван, если тесты не пройдут. Обратите внимание, что это также вызовет любые pretest или posttest scripts, которые вы можете использовать для запуска линтера.
  • version вызывается сразу после изменения файла package.json, но до того, как npm создаст фиксацию.
  • postversion вызывается после фиксации. Чтобы полностью автоматизировать процесс выпуска, вы можете даже запустить git push --follow-tags && npm publish здесь.

Вот как это выглядит все вместе:

"scripts": {
  "preversion": "npm test",
  "version": "changes",
  "postversion": "git push --follow-tags && npm publish"
},
"devDependencies": {
  "@studio/changes": "^1.0.0"
}

Отправка и публикация в postversion скрипте могут показаться довольно радикальными, но вот в чем дело: когда ваш редактор открывается с CHANGES.md файлом, он действует как подтверждение, как редактирование сообщения git commit. Если вы хотите прервать выпуск, просто удалите строку с заголовком версии. Сценарий изменений завершится с ненулевым кодом выхода, в результате чего npm прервет выпуск.

Теперь единственная команда, которую вам нужно запомнить, чтобы выполнить выпуск, - это npm version, а все остальное происходит автоматически. Излишне говорить, что @studio/changes выпущен таким образом с собой 🤓

Я хотел бы услышать ваши мысли! Если вам нравится такой подход, зайдите в репозиторий GitHub и оставьте ⭐️



Дополнительные инструменты для журнала изменений

  • Существует журнал изменений, который работает с любым заданным модулем npm или репозиторием github, если журнал изменений отсутствует 🙊 или вам нужен специальный формат.
  • Если вы занимаетесь 100% автоматическим выпуском, обратите внимание на семантический релиз.

Спасибо за чтение!