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 и предотвращает множество распространенных ошибок. Использование хуков особенно полезно в командах, так как обеспечивает единые стандарты кода для всех разработчиков.