Настройка pre-commit хуков для Django проекта

Предупреждение
Последний раз данная статья обновлялась 22.08.2022, информация может быть устаревшей.

Git имеет в своем составе инструмент, который умеет запускать кастомные скрипты при наступлении какого-либо события (к примеру commit, push и т.п.).

.pre-commit является надстройкой над стандартным git pre-commit hook, которая позволяет запускать скрипты описанные в .pre-commit-config.yaml перед созданием коммита. Это, например, позволяет поддерживать код проекта на Django в соответствии с принятыми стандартами PEP при минимальном личном участии.

Стандартные шаги расписывать не буду (перейти в папку проекта, активировать виртуальное окружение).

  1. Устанавливаем pre-commit
1
pip install pre-commit

Если нужна определенная версия - устанавливаем нужную. Например, для python 3.5 последняя совместимая версия 1.21.0

1
pip install pre-commit==1.21.0

Настройки пре-коммита находятся в файле .pre-commit-config.yaml. Я добавил только самые основные, но вариаций тут масса, хоть тесты на прекоммите прогоняй.

1
pre-commit install

Устанавливает хуки в .git/hooks/pre-commit

Предварительно лучше удалить старый файл pre-commit (или переименовать) или удалить оттуда кусок с автопепом, иначе вылезет конфликт вызова автопепа у тех, кто настраивал прекоммит по инструкции из ридми.

Настройки поведения autopep8 и isort находятся в файле setup.cfg. Можно настроить как угодно и это гораздо прозрачнее, чем в текущем варианте.

По дальнейшему процессу использования ничем не отличается от текущего варианта: коммитим, прекоммит переписывает файлы, делаем add еще раз, снова коммитим. Все.

Источники:

Сайт и документация

Список хуков

Интеграция .pre-commit hook в Django проект

Understanding install vs install –install-hooks

Tool Your Django Project: Pre-Commit Hooks