שינוי תנאי כישלון דחיפת lint מ- Git pre-push hook

יום שלישי, 11 במרץ 2025

ההקשר של העבודה

בפרויקט שלנו, אנו מיישמים כלל lint חזק המחייב סידור יבוא ( import ) מסוים. למרות שזה מועיל לאחידות הסגנון בקוד, לעיתים מתעוררת שגיאת lint ב-PR שנוצר כתוצאה מכך ב-CI.

אפילו כשזה לא קורה הרבה, כשיש שגיאת lint, יש צורך להריץ סקריפט לתיקון השגיאה מקומית, לבצע commit מחדש ולדחוף את הקוד שוב. זו הייתה עבודה מתישה וגורם משמעותי להארכת זמן בקרת הקוד, לכן הצעתי להוסיף בדיקת lint ב-pre-push hook.

בעזרת הסכמת חברי הצוות, השתמשנו בסקריפט lint-fix:global הקיים ויצרנו את ה-pre-push hook הבא:

echo "🔍 Running lint fix..."
pnpm run lint-fix:global

# בדיקה אם יש שינויים
if ! git diff --quiet; then
  echo "❌ Linting fixed some files. Please commit the changes before pushing."
  exit 1
fi

אבל ביום למחרת קיבלנו את המשוב הבא. חלקכם אולי כבר מזהים את הבעיה בקוד הנ״ל.

נמצא שדחיפה נכשלת כשמשאירים קבצים מסוימים במצב staged גם ללא קשר להפעלת lint-fix:global. 🤦

הגענו למסקנה שנכון לעשות בדיקת שגיאות lint בלבד ולא תיקון אוטומטי. לכן ערכנו את הקוד כך:

echo "🔍 Running lint..."

if ! pnpm run lint -- --quiet; then
  echo "❌ התגלתה שגיאת lint."
  echo "👉 לתיקונה באופן אוטומטי: pnpm run lint-fix:global"
  exit 1
fi

בקטע הקוד הזה, הסקריפט lint למעשה מבצע את next lint. הוספנו את האפשרות --quiet כך שיתקבלו רק שגיאות, ואם מופיעות שגיאות, נופיע הודעת שגיאה ונחסום את הדחיפה. יתרה מכך, למען חברי הצוות, שיפרנו את הודעות השגיאה להיות ידידותיות יותר.

אנו מקווים שעכשיו לא ייבזבז זמן יקר על שגיאות lint ב-CI. 🙏