Как синхронизировать CI и мои проверки перед фиксацией?

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

Я также начал настраивать конвейер CI через TravisCI, сейчас он просто запускает мои модульные тесты.

Однако, зная, что в будущем этот проект может стать совместным, я хотел бы убедиться, что код моего коллеги по-прежнему проходит эти проверки, даже если по какой-то причине они запускают git commit или git push с опцией --no-verify.

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

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

В конце концов, я хотел бы иметь способ гарантировать, что версии линтера, которые я использую в своей работе перед фиксацией, такие же, как и в конвейере CI (и легко поддерживать его, то есть, если я решу обновить версию Хук Ruff, я хочу убедиться, что версия Ruff, используемая в конвейере CI, также обновлена).

Обычно это хорошо. Рассмотрите возможность использования pre-commit — это действительно удобный способ определить и запустить несколько хуков, и он включает в себя множество уже существующих полезных хуков. Тогда вам просто pre-commit install локально настроить хуки, а затем pip install pre-commit && pre-commit run --all-files в CI. Никакой принадлежности, просто счастливый пользователь — его сопровождающий также активен здесь и часто отвечает на сопутствующие вопросы.

STerliakov 22.04.2024 22:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

  • Кто-то использует --no-verify, как вы упомянули (обратите внимание: это не всегда может быть вредоносным. Конечно, возможно быть в сломанном состоянии и все равно захотеть отправить его в удаленную ветку ради резервной копии).
  • В зависимости от вашей платформы предварительной фиксации можно забыть настроить/установить хуки
  • вероятно, больше

Итак, если вы собираетесь использовать эти перехваты в CI и в качестве перехватчиков перед фиксацией, каков наилучший способ уменьшить дублирование кода?

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

  • в качестве перехватчика перед фиксацией: фактический перехват просто вызывает скрипт lint
  • в CI: этапы задания CI вызывают сценарий lint
  • по требованию во время отладки: выполнить скрипт

В общем, я обнаружил, что это делает довольно удобным повторное использование этого типа предварительной проверки (или, по крайней мере, предварительного слияния) с минимальным дублированием кода.

Ожидаемый вопрос

Зачем беспокоиться о CI и перехватчиках перед фиксацией? Разве использование одного из них не будет еще меньшим дублированием?

Есть преимущества выполнения проверок в CI и в перехватчиках перед фиксацией:

  • проверка в CI: это единственная проверка, которую вы можете «гарантировать» (при условии правильных прав доступа к вашему удаленному репозиторию, защищенным веткам и т. д.). Как отмечалось выше, существуют способы избежать перехватов перед фиксацией. Поэтому проведение проверок в CI — единственный надежный способ поддерживать ваш проект.
  • проверка в перехватчиках перед фиксацией: это поможет вам обнаружить проблемы до того, как они достигнут CI, что позволит вам быстрее получать обратную связь во время разработки, а также позволит избежать потребления минут CI/расхода облачных ресурсов на исполнителей.

Другие вопросы по теме