понедельник, 2 июня 2025 г.

Pre-commit hooks, Giga, Python. Code Format, Tools

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

Поскольку написание собственных скриптов и поддержание инфраструктуры для хуков может быть утомительным занятием,

появились специализированные инструменты, упрощающие жизнь разработчикам:

  1. pre-commit framework:Одна из самых популярных библиотек для создания и управления pre-commit хуками.
  2. Определяет общую схему проверок и автоматически интегрируется с Git.
  3. Пользователь просто определяет используемые хуки в специальном YAML-файле,
  4. и pre-commit берет на себя выполнение проверок перед каждым коммитом.
  5. Пример конфигурационного файла .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
  1. Lint-staged:
  2. Позволяет применять команды и проверки только к тем файлам,
  3. которые помечены для коммита. Хорошо сочетается с другими инструментами, такими как ESLint, Stylelint и другими.
  4. husky:
  5. Популярный инструмент для интеграции pre-commit и других типов хуков в проекты, написанные на JavaScript и TypeScript.
  6. Легко интегрируется с npm и yarn.

Преимущества использования Pre-Commit Hooks

  • Единообразие и консистентность:
  • все участники команды работают с едиными стандартами форматирования и качества кода.
  • Раннее выявление ошибок:
  • проверка кода на стадии commit предотвращает появление багов на этапе code review или интеграции.
  • Упрощение ревью:
  • благодаря автоматизированному контролю меньше усилий тратится на проверку очевидных стилистических ошибок
  • или нарушений стандартов.
  • Минимизация технического долга:
  • устранение мелких проблем сразу снижает накопление долговременных дефектов.

Советы по внедрению Pre-Commit Hooks

  • Начинайте с малого набора хуков и постепенно увеличивайте покрытие.
  • Используйте доступные open-source библиотеки для облегчения внедрения и сопровождения.
  • Регулярно проверяйте и обновляйте хуки, чтобы соответствовать новым потребностям проекта.
  • Организуйте регулярное обучение членов команды, чтобы объяснить пользу и принципы работы pre-commit hooks.

Таким образом,

pre-commit hooks — это эффективный инструмент для повышения качества кода и

предотвращения попадания нежелательного кода в репозиторий.


Комментариев нет:

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