Изменение условий сбоя при отправке после проверки линтера в git pre-push хук

вторник, 11 марта 2025 г.

Контекст работы

В проекте нашей команды действуют строгие правила линтинга, вплоть до сортировки импортов. Эти правила позволяют обеспечить единый стиль кода, но иногда возникают проблемы с линт-ошибками после создания PR и их проверки на CI.

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

Получив согласие от коллег, мы добавили в существующий скрипт lint-fix:global следующий pre-push хук:

echo "🔍 Запуск линт фикса..."
pnpm run lint-fix:global

# Проверить наличие изменений
if ! git diff --quiet; then
  echo "❌ Линтинг исправил несколько файлов. Пожалуйста, закоммитьте изменения перед отправкой."
  exit 1
fi

На следующий день я получил отзыв о проблеме. Возможно, кто-то из вас уже заметил её в коде выше.

Если пытаться отправить файлы в staged-статусе, независимо от выполнения lint-fix:global, отправка завершится сбоем. 🤦

Мы решили, что вместо выполнения lint fix правильнее будет просто проверять наличие ошибок линтинга, и изменили код следующим образом:

echo "🔍 Запуск lint..."

if ! pnpm run lint -- --quiet; then
  echo "❌ Обнаружены ошибки линтинга."
  echo "👉 Чтобы исправить ошибки автоматически: pnpm run lint-fix:global"
  exit 1
fi

Этот lint скрипт, фактически, выполняет команду next lint. Мы добавили опцию --quiet, чтобы отображать только ошибки, и если они обнаружены, вывести сообщение и предотвратить отправку. А раз уж делали изменения, мы решили сделать сообщение об ошибке более дружелюбным для других членов команды.

Надеюсь, теперь мы сможем избежать потери времени из-за ошибок линтинга в CI. 🙏