Создайте журнал изменений как часть npm version command
Мне нравится создавать небольшие специализированные модули, которые выпускаются часто, часто по несколько раз в день. Поэтому для меня очень важно, чтобы процесс релиза позволял мне чувствовать себя уверенно и был полностью автоматизирован. Я использую npm как инструмент сборки, поэтому каждый модуль поставляется со всеми инструментами разработки, необходимыми для линтинга кода и запуска тестов с использованием сценариев npm. Когда я начал создавать первую пару модулей для проекта JavaScript Studio, я хотел, чтобы процесс выпуска соответствовал этой модели.
Многие авторы модулей уже используют версию npm для подготовки своих релизов. Например, когда вы запускаете npm version minor
, npm удалит младшую версию в файле package.json и создаст фиксацию версии с новым номером версии в качестве сообщения фиксации. Использование npm естественно подходит для моих нужд, но я хочу писать примечания к выпуску, основанные на истории коммитов и добавленные в коммит выпуска. Именно это позволяет мне модуль@studio/changes
.
Как это работает?
Вы можете добавить модуль изменений в процесс выпуска в два этапа:
npm install @studio/changes --save-dev
- Добавьте
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% автоматическим выпуском, обратите внимание на семантический релиз.
Спасибо за чтение!