Git hooks — это сценарии, которые позволяют автоматизировать различные этапы работы с репозиториями в Git. Они могут быть использованы для выполнения задач, таких как проверка качества кода, линтинг, тестирование, сборка проекта и другие действия, которые необходимо выполнить до или после выполнения определённых операций с репозиторием. Git hooks поддерживаются непосредственно в Git и могут быть настроены для различных типов событий: коммиты, пуши, мёржи и другие.
Git hooks представляют собой скрипты, которые находятся в каталоге
.git/hooks репозитория. Каждый из этих скриптов
соответствует определённому событию в Git. Скрипты могут быть написаны
на любом языке, поддерживающем работу с командной строкой, но чаще всего
используются bash-скрипты.
Важнейшие события, для которых можно настроить хуки:
pre-commit: выполняется перед выполнением коммита.commit-msg: используется для проверки сообщения
коммита.post-commit: выполняется после того, как коммит был
успешно завершён.pre-push: запускается перед отправкой изменений в
удалённый репозиторий.pre-receive, update,
post-receive: хуки на стороне сервера, которые используются
для проверки или модификации данных перед или после их получения
сервером.Основная цель Git hooks — это автоматизация проверок, что помогает повысить качество кода и ускорить процессы разработки.
Husky — это популярный инструмент, который позволяет легко интегрировать Git hooks в процесс разработки. Он упрощает настройку и управление хуками, а также позволяет автоматизировать выполнение различных задач перед коммитом или пушем. Husky интегрируется с такими инструментами как линтеры, тесты, форматировщики кода и другие.
Чтобы начать работать с Husky, необходимо установить его в проект:
npm install husky --save-dev
После установки Husky нужно активировать:
npx husky install
Это создаст каталог .husky в корне проекта, куда будут
помещаться все конфигурации для хуков. Чтобы автоматически создавать
хуки после установки, нужно добавить команду активации Husky в скрипт
postinstall в package.json:
"scripts": {
"postinstall": "husky install"
}
После установки Husky можно настроить хуки, добавляя соответствующие
скрипты. Для этого используется команда husky add.
Например, для настройки хука pre-commit, который будет
запускать линтер перед каждым коммитом, можно использовать такую
команду:
npx husky add .husky/pre-commit "npm run lint"
Этот хук будет выполнять команду npm run lint перед
каждым коммитом, проверяя код на соответствие стандартам.
Для хука pre-push, который будет запускать тесты перед
отправкой изменений в удалённый репозиторий, команда будет
следующей:
npx husky add .husky/pre-push "npm test"
Такой хук обеспечит запуск тестов перед каждым пушем. Если тесты не проходят, пуш не будет выполнен.
Одним из самых распространённых применений Git hooks является автоматический линтинг и форматирование кода перед коммитом. Это позволяет избежать попадания в репозиторий неформатированного или некачественного кода.
Для интеграции линтера, например ESLint, с Husky можно использовать следующий подход:
Установить ESLint:
npm install eslint --save-devНастроить ESLint для проекта, если это ещё не сделано:
npx eslint --initДобавить линтинг в хук pre-commit:
npx husky add .husky/pre-commit "npx eslint --fix"Теперь при каждом коммите ESLint будет автоматически проверять код и исправлять его, если это возможно.
Вместо того чтобы полагаться на линтинг только для проверки ошибок, можно использовать Prettier для автоматического форматирования кода перед коммитом. Prettier хорошо сочетается с линтерами, но в отличие от них, он не делает проверки кода на ошибки, а лишь исправляет его стиль.
Установить Prettier:
npm install prettier --save-devДобавить в хук pre-commit команду для
форматирования:
npx husky add .husky/pre-commit "npx prettier --write ."Теперь Prettier будет автоматически форматировать все файлы перед каждым коммитом.
Для того чтобы автоматизация с использованием Husky работала не только локально, но и на сервере, важно настроить поддержку хуков в среде CI/CD. Некоторые сервисы, такие как GitHub Actions, GitLab CI и другие, поддерживают настройку хуков и позволяют выполнять проверки кода на сервере перед сборкой или деплоем.
Для этого потребуется установить Husky и другие зависимости на сервере, настроить соответствующие скрипты и интегрировать их в пайплайны CI/CD. Это позволит обеспечить консистентность процесса разработки как на локальных машинах разработчиков, так и в процессе автоматической сборки и деплоя на сервере.
Использование Git hooks и Husky позволяет значительно улучшить процессы разработки, повысить качество кода и упростить управление проектом. Благодаря интеграции с такими инструментами как линтеры, форматировщики кода и тесты, можно автоматизировать выполнение рутинных задач и сосредоточиться на более важных аспектах разработки.