Я установил несколько перехватчиков перед фиксацией, которые запускаю с использованием библиотеки поэтепоэтов в проекте, управляемом поэзией, и они работают довольно хорошо.
Я также начал настраивать конвейер CI через TravisCI, сейчас он просто запускает мои модульные тесты.
Однако, зная, что в будущем этот проект может стать совместным, я хотел бы убедиться, что код моего коллеги по-прежнему проходит эти проверки, даже если по какой-то причине они запускают git commit
или git push
с опцией --no-verify
.
Является ли вообще хорошей практикой синхронизировать работу перехватчиков предварительной фиксации с реальным конвейером CI? Я начинаю сомневаться в этом, поскольку мне трудно найти ресурсы, чтобы это сделать.
Если по какой-то причине повторное применение задания предварительной фиксации в конвейере CI не является хорошей практикой, каков обычный способ запуска линтеров в конвейере CI, когда вы уже используете библиотеку предварительной фиксации?
В конце концов, я хотел бы иметь способ гарантировать, что версии линтера, которые я использую в своей работе перед фиксацией, такие же, как и в конвейере CI (и легко поддерживать его, то есть, если я решу обновить версию Хук Ruff, я хочу убедиться, что версия Ruff, используемая в конвейере CI, также обновлена).
Ваше подозрение, что вам следует запускать свои перехватчики как в CI, так и в качестве перехватчиков перед фиксацией, вполне обосновано. Существует ряд причин, по которым перехватчики предварительной фиксации не могут быть запущены:
--no-verify
, как вы упомянули (обратите внимание: это не всегда может быть вредоносным. Конечно, возможно быть в сломанном состоянии и все равно захотеть отправить его в удаленную ветку ради резервной копии).Итак, если вы собираетесь использовать эти перехваты в CI и в качестве перехватчиков перед фиксацией, каков наилучший способ уменьшить дублирование кода?
Это может во многом зависеть от предпочитаемой вами платформы перехватчиков, но моя обычная стратегия — сделать каждый перехватчик отдельным скриптом. То, что можно запустить по требованию в любое время. Это значительно упрощает запуск:
В общем, я обнаружил, что это делает довольно удобным повторное использование этого типа предварительной проверки (или, по крайней мере, предварительного слияния) с минимальным дублированием кода.
Зачем беспокоиться о CI и перехватчиках перед фиксацией? Разве использование одного из них не будет еще меньшим дублированием?
Есть преимущества выполнения проверок в CI и в перехватчиках перед фиксацией:
Обычно это хорошо. Рассмотрите возможность использования pre-commit — это действительно удобный способ определить и запустить несколько хуков, и он включает в себя множество уже существующих полезных хуков. Тогда вам просто
pre-commit install
локально настроить хуки, а затемpip install pre-commit && pre-commit run --all-files
в CI. Никакой принадлежности, просто счастливый пользователь — его сопровождающий также активен здесь и часто отвечает на сопутствующие вопросы.