Git commits Linting с помощью commitlint и husky
Table of contents
Introduction
Обычно в проекте с системой контроля версий git
определен порядок работ, это может быть git-flow
или github-flow
.
Но не всегда у проекта определены правила написания коммитов.
Существует стандарт по оформлению коммитов Conventional Commits.
Для помощи в генерации коммита по указанному стандарту будем использовать утилиту commitizen, а также рассмотрим каким образом можно настроить проверку на соответствие коммита данному стандарту.
Для демонстрации работы линтирования был создан тестовый проект: https://github.com/superrosko/example-commits-lint.
Установка пакетов
Т.к. commitizen
, husky
и commitlint
- это npm
-пакеты, то мы должны инициализировать проект:
npm init
После того, как мы инициировали node
-проект и заполнили информацию о нем, нам необходимо установить пакеты, которые мы будем использовать для помощи по коммитам и линтирования.
npm install -g commitizen
npm install @commitlint/cli cz-customizable husky --save-dev
commitizen - утилита командной строки commitizen
@commitlint/cli - утилита, которая проверяет на соответствие ваших сообщений в коммитах общепринятому формату фиксации
cz-customizable - настраиваемый плагин, помогающий добиться согласованных сообщений коммита
husky - git hooks
Настройка commitizen
Для настройки правил формирования коммитов создадим в корне проекта файл commitizen.js
со следующим содержимым:
'use strict';
module.exports = {
types: [
{
value: 'feat',
name: 'feat: A new feature',
},
{
value: 'fix',
name: 'fix: A bug fix',
},
],
allowCustomScopes: true,
allowBreakingChanges: false,
footerPrefix: 'METADATA:',
subjectLimit: 72,
};
Затем добавим конфигурацию в файл package.json
:
{
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
},
"cz-customizable": {
"config": "./commitizen.js"
}
},
}
Для проверки работы утилиты выполним следующую команду:
git cz
На данном этапе настройка подсказок для формирования коммитов с помощью утилиты commitizen
завершена.
Настройка husky и commitlint
Настроенные подсказки работают только при выполнении команды git cz
, т.е. если мы выполним git commit
, то нам будет доступно введение любого сообщения.
Так не должно быть, поэтому с помощью husky
мы установим хуки на создание коммитов и настроим линтирование.
Для настройки правил линтирования коммитов создадим в корне проекта файл commitlint.js
со следующим содержимым:
module.exports = {
rules: {
'body-leading-blank': [2, 'always'],
'footer-leading-blank': [2, 'always'],
'header-max-length': [2, 'always', 72],
'scope-case': [2, 'always', 'lower-case'],
'subject-empty': [2, 'never'],
'subject-full-stop': [2, 'never', '.'],
'type-case': [2, 'always', 'lower-case'],
'type-empty': [2, 'never'],
'type-enum': [
2,
'always',
[
'feat',
'fix',
],
],
},
};
Затем добавим конфигурацию в файл package.json
:
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS -g './commitlint.js'"
}
}
На данном этапе настройка хуков для проверки соответствия коммита принятому стандарту завершена.
Запуск линтирования
Для проверки работы настроенных правил попробуем сделать изменения в файле ./src/example.txt
и закоммитить их, введя сообщение коммита не по стандарту.
Если все настроено правильно, то мы получим ошибку. И только в случае указания сообщения по стандарту коммит будет принят.
Настройка линтирования в PHPStorm
Для того, чтобы не пользоваться командой git cz
, а вводить сообщения коммита в поля через PHPStorm
, существует плагин Git Commit Template
, который предоставляет визуальный интерфейс для создания коммитов по стандарту Conventional Commits
.
Дата редактирования : 2020-11-12 00:33:56
Автор : Rosko