Настраиваем Git хук линтера используя husky и Node.js

10 октября, 2021
1 минута чтения

Часто в корпоративных средах вводят процесс «валидации коммитов». С помощью валидации коммита можно заметно улучшить историю правок и научить джунов писать более читаемые сообщения правок, а также проверять состояние рабочего окружения на автоматической основе. Для разработчиков на Node.js одним из самых популярных пакетов предоставляющих такую возможность является husky.js.

Настройка окружения

В первую очередь установим husky находясь в директории проекта.

$ npx husky install

Добавим в проект хуку для валидации сообщений коммита.

$ npx husky add .husky/commit-msg

Подключаем Node.js скрипт

Открываем файл commit-msg, который находится в .husky/commit-msg.

Изменяем интерпретатор на node.

#!/usr/bin/env node
// ...

Проверяем сообщение коммита

Для получения строки коммита необходимо обратиться к файлу где оно хранится. Для этого потребуется получить путь из аргумента процесса.

// ...
const arg = process.argv.slice(2)[0];
const fs = require('fs');
const fileString = fs.readFileSync(arg, { encoding:'utf8', flag:'r' });
const message = fileString.trim(); // в message находится само сообщение коммита
// ...

Настраиваем маску коммита

Чтобы название коммита соответствовало маске, принятой в нашей кодовой базе, в соответствии с номером юзер стори вашей Jira, я воспользуюсь простым регулярным выражением.

// ...
if (!/^\d+\s/.exec(message.toLowerCase())) {
  console.log('\nНазвание коммита должно начинаться с цифр');
  process.exit(1);
}
// ...
Git hook precommit
Пример выполнение работы хуки

Исправление ошибки «No such file or directory»

Бывает, на MacOS системах появляется следующая ошибка:

env: node\r: No such file or directory

Для этого нужно изменить управляющие символы на LF в файле. Сделать это можно командой:

npx crlf --set=LF .husky/commit-msg

Итог

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

Денис Сергеевич Басковский

Философ, изобретатель и поэт.

Добавить комментарий Отменить ответ

Yii framework
Предыдущая статья

Yii как получить GET параметры из URL

Dropbox Blob
Следующая статья

Сохраняем и загружаем blob на свой Dropbox

Exit mobile version