تغيير شرط فشل الدفع بعد فحص التنسق باستخدام خطاف Git pre-push

الثلاثاء، 11 مارس 2025

وسياق العمل

في مشروع فريقنا، هناك قواعد تنسيق صارمة، بما في ذلك ترتيب الاستيراد. رغم أن هذا يساعد في توحيد نمط الكود، إلا أنه أدى أحيانًا إلى أخطاء تنسيق تظهر عند إرسال طلبات السحب في CI.

على الرغم من أن هذا ليس شائع الحدوث، إلا أنه من المزعج إصلاح الأخطاء محليًا ثم إعادة دفع الكود. كانت هذه العملية الطويلة سببًا في زيادة وقت المراجعة. لذلك، اقترحت على زملائي في الفريق استخدام خطاف pre-push لإجراء فحص التنسق.

بعد الحصول على موافقة الفريق، استخدمت سكريبت lint-fix:global الموجود بالفعل، وكتبت خطاف pre-push كما يلي:

echo "🔍 تشغيل تصحيح التنسق..."
pnpm run lint-fix:global

# تحقق من وجود تغييرات
if ! git diff --quiet; then
  echo "❌ تم إصلاح بعض الملفات بواسطة التنسق. يرجى الالتزام بالتغييرات قبل الدفع."
  exit 1
fi

ومع ذلك، في اليوم التالي تلقيت بعض التعليقات كما يلي. بعضكم ربما أدرك المشكلة في الشفرة على الفور.

بغض النظر عما إذا تم تنفيذ lint-fix:global، إذا كانت بعض الملفات في حالة متروكة مؤقتًا، فسيتم رفض الدفع. 🤦

أدركت أن الفحص البسيط لأخطاء التنسق يكون أكثر ملاءمة، وقمت بتعديل الشفرة كالتالي:

echo "🔍 تشغيل فحص التنسق..."

if ! pnpm run lint -- --quiet; then
  echo "❌ تم اكتشاف خطأ تنسق."
  echo "👉 لإصلاح الأخطاء تلقائيًا: pnpm run lint-fix:global"
  exit 1
fi

السكريبت lint هنا ينفذ فعليًا next lint مع خيار --quiet لعرض الأخطاء فقط. إذا حدثت أخطاء، يتم عرض رسالة وتحظر الدفع. كما عدلت الرسالة لتكون أكثر لطفًا لزملائي.

نأمل الآن ألا نهدر وقتًا بسبب أخطاء التنسق في CI. 🙏