Как упростить рабочий процесс с помощью хуков перед фиксацией

Как упростить рабочий процесс с помощью хуков перед фиксацией

2 марта 2023 г.

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

Эти небольшие проблемы могут накапливаться и замедлять рабочий процесс разработки, особенно при работе с большой командой.

Вот тут и приходит на помощь предварительная фиксация. Предварительная фиксация — это простой, но мощный инструмент, который может помочь вам выявить эти проблемы до того, как они попадут в вашу кодовую базу. Это скрипт-ловушка git.

Сценарии Git hook полезны для выявления простых проблем перед отправкой на проверку кода. Мы запускаем наши перехватчики при каждой фиксации, чтобы автоматически указывать на такие проблемы в коде, как отсутствие точек с запятой, пробелы в конце и операторы отладки.

Выявление этих проблем перед проверкой кода позволяет рецензенту сосредоточиться на архитектуре изменения, не тратя время на тривиальные придирки к стилю.

Автоматизируя форматирование кода, линтинг и тестирование, предварительная фиксация может сэкономить ваше время и нервы, позволяя вам сосредоточиться на том, что действительно важно: на создании отличного программного обеспечения.

В этом сообщении блога будет рассказано, как использовать предварительную фиксацию в проектах Django. Мы рассмотрим все, от установки и настройки до создания настраиваемых перехватчиков и интеграции с инструментами непрерывной интеграции.

К концу этого поста у вас будет четкое представление о том, как использовать предварительную фиксацию для улучшения вашего рабочего процесса и оптимизации процесса разработки. Итак, приступим!

Установка и установка Конфигурация

Первый шаг к использованию предварительной фиксации в проекте Django – это установка с помощью pip, диспетчера пакетов Python.

pip install pre-commit

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

В этом файле конфигурации вы определяете хуки, которые pre-commit будут запускать в вашем коде. Хук — это команда или сценарий, который проверяет ваш код на наличие таких проблем, как ошибки форматирования, синтаксические ошибки или уязвимости в системе безопасности. Существует множество хуков, которые вы можете использовать в своем проекте Django, а также вы можете создавать собственные хуки.

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

Для проектов Django одними из самых полезных обработчиков предварительной фиксации являются Black для форматирования кода, Flake8 для линтинга кода, isort для сортировки импорта и Mypy для статической проверки типов. Запуская эти хуки автоматически, вы можете гарантировать, что ваш код будет чистым, согласованным и легко читаемым.

TLDR

Чтобы внедрить pre-commit в нашу систему, мы просто выполняем следующие действия:

  1. Установить перед фиксацией: pip install pre-commit
  2. Добавить pre-commit в requirements.txt (или requirements-dev.txt)
  3. Определите .pre-commit-config.yaml с крючками, которые вы хотите включить.
  4. Выполните pre-commit install, чтобы установить git hooks в каталог .git/.

Создание .pre-commit-config.yaml

  • Создайте файл с именем .pre-commit-config.yaml в корневом каталоге репозитория (также в корневом каталоге вашего проекта Django).
  • Вы можете создать очень простую конфигурацию, используя pre-commit sample-config

Вместо создания примера конфигурации вы также можете начать с нуля. В этот пост я включил такие пакеты, как black, flake8, reorder-python-imports & bandit для наших проектов Django.

Вот пример файлов предварительной фиксации, которые я сейчас использую в своих проектах. Эти файлы помогают мне убедиться, что мой код чист, отформатирован и свободен от ошибок, прежде чем я отправлю его в репозиторий. Я настоятельно рекомендую использовать обработчики перед фиксацией в ваших проектах, чтобы сэкономить время и избежать потенциальных проблем в будущем.

repos:
  - repo: 'https://github.com/psf/black'
    rev: 22.10.0
    hooks:
      - id: black
        args:
          - '--line-length=88'
        language_version: python3
  - repo: 'https://github.com/PyCQA/flake8'
    rev: 5.0.4
    hooks:
      - id: flake8
        args:
          - '--max-line-length=88'
        exclude: ^(.*/migrations/|core/settings.py)
  - repo: 'https://github.com/asottile/reorder_python_imports'
    rev: v3.9.0
    hooks:
      - id: reorder-python-imports
  - repo: local
    hooks:
      - id: django-tests
        name: django-tests
        entry: python manage.py test
        always_run: true
        pass_filenames: false
        language: system
  - repo: 'https://github.com/PyCQA/bandit'
    hooks:
      - id: bandit
        name: bandit
        description: Bandit is a tool for finding common security issues in Python code
        entry: bandit
        language: python
        language_version: python3
        types:
          - python

Black — это средство форматирования кода, которое гарантирует, что мой код соответствует единообразному стилю.

Flake8 — это линтер, который проверяет мой код на наличие синтаксических ошибок, неиспользуемых импортов и других потенциальных проблем. reorder-python-imports – это инструмент, который сортирует импортированные данные в алфавитном порядке, что упрощает их чтение и обслуживание.

bandit ищет потенциальные уязвимости в вашем коде. Выполняя эти проверки автоматически, вы можете убедиться, что ваш код безопасен и не содержит распространенных проблем с безопасностью.

Помимо использования этих инструментов, я также включаю хук перед фиксацией, который запускает мои модульные тесты перед каждой фиксацией. Это помогает мне выявлять любые ошибки или регрессии до того, как они попадут в кодовую базу.

В целом, хуки перед фиксацией — неотъемлемая часть моего рабочего процесса, и я настоятельно рекомендую включить их в ваш процесс разработки. Обратите внимание, что это мои рекомендации, а не святой Грааль истины для проектов Django, но я надеюсь, что они могут послужить вам полезной отправной точкой.

Приведение в действие

После того, как вы создадите файл конфигурации .pre-commit-config.yaml, вам нужно установить этот хук pre-commit в свой репозиторий .git. Это довольно легко и просто.

Чтобы установить хук перед фиксацией, вам просто нужно запустить в терминале git add .pre-commit-config.yaml и pre-commit install. Это автоматически установит хук в ваш каталог .git, что позволит ему запускаться при каждом коммите. Вы также можете запустить pre-commit run вручную и запустить хуки в своей кодовой базе.

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

Дополнительные сведения см. в документации перед фиксацией.

Теперь, когда вы в следующий раз будете вносить изменения в свои репозитории, вы можете запустить git add ., чтобы подготовить все изменения, и git commit, чтобы их зафиксировать.

Предварительная фиксация автоматически запускает перехватчики, указанные в файле .pre-commit-config.yaml, для поэтапных изменений до того, как фиксация будет завершена. Это поможет выявить любые ошибки или проблемы до того, как они попадут в вашу кодовую базу, и сэкономит ваше время и избавит вас от головной боли в будущем.

Вывод будет чем-то похож на изображение выше, если код соответствует правилам, определенным linters & хуки, он будет упомянут как Пройден этим хуком, но если код по какой-то причине не работает, ошибка будет показана там, где она не удалась, и вы сможете работать с этим конкретным кодом. Если возникли проблемы с форматированием, в большинстве случаев черный цвет исправит их для вас.

Заключение

Автоматизируя форматирование кода, линтинг и тестирование, предварительная фиксация помогает выявлять ошибки и проблемы до того, как они попадут в вашу кодовую базу.

Имея четкое представление об установке и настройке, а также используя настраиваемые перехватчики, вы можете упростить процесс разработки и убедиться, что ваш код чистый, непротиворечивый и легко читаемый.

Я надеюсь, что эта статья послужила хорошей отправной точкой для автоматизации некоторых ваших задач по линтингу и улучшению качества кода. Есть много удивительных крючков, кроме этих, доступных в Интернете. Вы можете начать с https://pre-commit.com, чтобы узнать больше об этом.

Удачного кодирования!


Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE