Pre-commit хуки — это автоматизированные скрипты, которые запускаются перед фиксацией изменений в Git. Они помогают:
git commit# .git/hooks/pre-commit (пример простого хука)
#!/bin/sh
flake8 . || exit 1 # Если flake8 найдет ошибки - коммит отменится
#!/bin/sh
black --check . # Проверка форматирования Black
isort --check . # Проверка сортировки импортов
#!/bin/sh
pytest tests/unit/ # Запуск юнит-тестов перед коммитом
pip install pre-commit
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace # Удаляет пробелы в концах строк
- id: end-of-file-fixer # Добавляет пустую строку в конец файла
- id: check-yaml # Проверяет валидность YAML файлов
- id: check-added-large-files # Проверяет на большие файлы
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black # Форматирование кода
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
hooks:
- id: flake8 # Проверка стиля кода
additional_dependencies: [flake8-bugbear]
pre-commit install # Устанавливает хуки в .git/hooks/
black — автоматическое форматированиеisort — сортировка импортовflake8 — проверка стиляmypy — проверка типовpylint — статический анализcheck-yaml — валидация YAMLcheck-json — валидация JSONdetect-secrets — поиск секретов в кодеprettier — форматирование фронтенд кода# .pre-commit-hooks.yaml
- id: check-migrations
name: Check Django migrations
description: Ensure migrations are up to date
entry: python manage.py makemigrations --dry-run --check
language: system
types: [python]
- repo: local
hooks:
- id: run-tests
name: Run unit tests
entry: pytest tests/unit/
language: system
pass_filenames: false
git commit --no-verify # --no-verify или -n
pre-commit autoupdate
pre-commit run --all-files
Хуки можно запускать и на сервере непрерывной интеграции:
# .github/workflows/pre-commit.yml
name: pre-commit
on: [push, pull_request]
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- run: pip install pre-commit
- run: pre-commit run --all-files
pre-commit хуки — это мощный инструмент для автоматического контроля качества кода, который экономит время на code review и предотвращает множество распространенных ошибок. Использование хуков особенно полезно в командах, так как обеспечивает единые стандарты кода для всех разработчиков.