Получите ясность и автоматизируйте создание CHANGELOG и изменение версий.

Если вы просто хотите все установить и запустить, перейдите в раздел TL; DR.

последняя фиксация клянусь

Мы все были там. Будь то плотный график, постоянные исправления или просто создание сообщений с нашим собственным определенным шаблоном; все мы делали плохие сообщения коммитов. К счастью, существует Спецификация обычных коммитов, а вместе с ней и набор мощных инструментов, которые могут нам помочь.

Обеспечение соблюдения стандарта

Чтобы обеспечить соблюдение стандарта каждый раз, когда мы делаем коммит, у нас есть хаски и commitlint. Хаски слушает перехватчики git, и мы будем использовать его для запуска фиксации при вводе сообщения фиксации. Теперь давайте установим пакеты:

npm install --save-dev husky @commitlint/cli @commitlint/config-conventional

После установки этих пакетов вам необходимо создать файл commitlint.config.js в той же папке, что и ваш package.json:

module.exports = {
  extends: ['@commitlint/config-conventional']
};

И обновите свой package.json:

{
  ...,
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
     }
  }
}

Все готово! Теперь ваши сообщения будут иметь линзы и будут соответствовать стандартной спецификации фиксации. Но какова спецификация? Что ж ... В спецификации сказано, что вы должны соблюдать следующее:

<type>[(optional scope)]: <description>
[optional body]
[optional footer]

Похоже, это большая работа. Даже больше, когда есть определенные типы, которым нужно следовать. Так что же нам делать?

Мы совершаем их с помощью commitizen

Commitizen - это пакет, который упрощает создание сообщений о фиксации в соответствии с предыдущей спецификацией. Для этого вы должны установить его глобально и настроить свой проект.

npm install --global commitizen
# Inside your project
commitizen init cz-conventional-changelog --save-dev --save-exact

Теперь внесите изменения, добавьте их и запустите git cz:

А теперь автоматизация

Мы добавили инструменты для обеспечения и упрощения сообщений о фиксации в соответствии со стандартной спецификацией фиксации. В рамках проекта мы получили стандартные сообщения, которые могут читать не только люди, но и машины. Да, машины. Следование этим стандартам позволило машинам понять шаблон и, таким образом, автоматически обновлять версию наших пакетов и создавать журналы изменений.

Перенос версий и ИЗМЕНЕНИЕ

Для выполнения обоих действий нам нужен только один пакет standard-version. Этот пакет будет:
1) анализировать ваши коммиты с момента последнего выпуска (тега)
2) повышать версию вашего package.json
3) генерировать или обновлять файл CHANGELOG.md
4) Создайте сообщение фиксации
5) Создайте новый тег

Итак, давайте использовать это:

npm install --save-dev standard-version

Обновите свой package.json:

{
  ...,
  "scripts": {
    "release": "standard-version"
  }
}

А теперь нужно просто запустить npm run release.

В качестве альтернативы, если вы хотите просто создать файл журнала изменений, я бы рекомендовал традиционный-changelog-cli.

TL;DR

Установите и настройте свои зависимости

# Install global packages
npm install --global commitizen
# Install project packages
npm install --save-dev standard-version husky @commitlint/config-conventional @commitlint/cli
# Configure commitizen
commitizen init cz-conventional-changelog --save-dev --save-exact

Создайте файл commitlint.config.js в корневой папке

module.exports = {
  extends: ['@commitlint/config-conventional']
};

Обновить package.json

{
  ...,
  "scripts": {
    "release": "standard-version"
  },
  ...,
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
     }
  }
}

Обновите свой проект, сделайте коммит и будьте счастливы

# Add your changes
git add --all
# Commit with Commitizen
git cz
# Bump your version and generate a new CHANGELOG
npm run release

Что дальше?

Получив удобочитаемость и автоматизацию повседневных болезненных задач, вы можете создать свой собственный стандарт на основе стандартной спецификации фиксации. Я, например, создал cz-simple-changelog для тех, кому сложно следовать всем этим типам в начале. Семейство инструментов традиционного журнала изменений позволяет и упростить вам создание собственной версии, если вы хотите.

Надеюсь, этот пост вам помог. Во всяком случае, поделитесь информацией, которая могла бы улучшить его и сделать лучше для других!