Pre-commit hooks, Giga, Python. Code Format, Tools
https://giga.chat/link/gcsObBTGeV
Pre-commit hooks — это механизм, предоставляемый системами контроля версий (чаще всего Git),
позволяющий выполнять произвольные скрипты или команды перед фиксацией изменений (commit).
Такие хуки помогают предотвратить попадание некачественного или некорректного кода в основную ветку проекта.
Основная задача pre-commit hook —
обеспечить качество кода и устранить потенциальные ошибки на ранних этапах разработки.
Хук срабатывает каждый раз, когда пользователь пытается сделать коммит, и может проверять следующее:
- Стилистику кода (форматирование, соответствие требованиям по оформлению).
- Наличие потенциальных багов (статический анализ, Linting).
- Тестирование мелких фрагментов кода (unit-тесты).
- Проверку безопасности (анализ уязвимостей, linting секретов).
Механизм работы Pre-Commit Hooks
Каждый pre-commit hook может возвращать либо статус успеха, либо ошибки.
Если скрипт успешно завершился (возвращает код 0), коммит продолжается.
Если возникает ошибка (код завершения ≠ 0), коммит прерывается, и пользователю предлагается исправить проблему.
Хуки хранятся в каталоге
.git/hooks конкретного репозитория и выполняются автоматически при попытке зафиксировать изменения.
Пример Pre-Commit Hook
Пример простого pre-commit hook на Bash, который проверяет наличие пустых строк в конце файлов:
#!/bin/sh # Check if any tracked files contain trailing whitespace if git diff-index --check --cached HEAD ; then echo "Commit aborted due to formatting issues." exit 1 else exit 0 fi
Библиотеки и фреймворки для работы с Pre-Commit Hooks
Поскольку написание собственных скриптов и поддержание инфраструктуры для хуков может быть утомительным занятием,
появились специализированные инструменты, упрощающие жизнь разработчикам:
- pre-commit framework:Одна из самых популярных библиотек для создания и управления pre-commit хуками.
- Определяет общую схему проверок и автоматически интегрируется с Git.
- Пользователь просто определяет используемые хуки в специальном YAML-файле,
- и pre-commit берет на себя выполнение проверок перед каждым коммитом.
- Пример конфигурационного файла
.pre-commit-config.yaml:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.2.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace
- Lint-staged:
- Позволяет применять команды и проверки только к тем файлам,
- которые помечены для коммита. Хорошо сочетается с другими инструментами, такими как ESLint, Stylelint и другими.
- husky:
- Популярный инструмент для интеграции pre-commit и других типов хуков в проекты, написанные на JavaScript и TypeScript.
- Легко интегрируется с npm и yarn.
Преимущества использования Pre-Commit Hooks
- Единообразие и консистентность:
- все участники команды работают с едиными стандартами форматирования и качества кода.
- Раннее выявление ошибок:
- проверка кода на стадии commit предотвращает появление багов на этапе code review или интеграции.
- Упрощение ревью:
- благодаря автоматизированному контролю меньше усилий тратится на проверку очевидных стилистических ошибок
- или нарушений стандартов.
- Минимизация технического долга:
- устранение мелких проблем сразу снижает накопление долговременных дефектов.
Советы по внедрению Pre-Commit Hooks
- Начинайте с малого набора хуков и постепенно увеличивайте покрытие.
- Используйте доступные open-source библиотеки для облегчения внедрения и сопровождения.
- Регулярно проверяйте и обновляйте хуки, чтобы соответствовать новым потребностям проекта.
- Организуйте регулярное обучение членов команды, чтобы объяснить пользу и принципы работы pre-commit hooks.
Таким образом,
pre-commit hooks — это эффективный инструмент для повышения качества кода и
предотвращения попадания нежелательного кода в репозиторий.
Комментариев нет:
Отправить комментарий