Часто в корпоративных средах вводят процесс «валидации коммитов». С помощью валидации коммита можно заметно улучшить историю правок и научить джунов писать более читаемые сообщения правок, а также проверять состояние рабочего окружения на автоматической основе. Для разработчиков на 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);
}
// ...
Исправление ошибки «No such file or directory»
Бывает, на MacOS системах появляется следующая ошибка:
env: node\r: No such file or directory
Для этого нужно изменить управляющие символы на LF в файле. Сделать это можно командой:
npx crlf --set=LF .husky/commit-msg
Итог
Вышеописанный хук это одна из самых простых способов улучшить читаемость истории вашей кодовой базы, каждый коммит будет явно идентифицироваться с номером тикета в Jira и улучшит навигацию по старому коду.