تخطَّ إلى المحتوى

case()

دالة case() في تعبيرات GitHub Actions case()

case() دالة تعبيرات جديدة تقبل أزواجاً من (شرط، قيمة) بالترتيب وتُرجع قيمة أول شرط صحيح، بديلاً أوضح لتكديس && و || عند وجود أكثر من شرطين.

قبل case()، كانت الطريقة الوحيدة لاختيار قيمة من عدة شروط داخل تعبير GitHub Actions هي تعبيرات && / || متداخلة (يحاكي عمل ternary)، وهذا يصبح صعب القراءة بسرعة مع زيادة عدد الحالات. case() تحل هذا بقبول أزواج متتالية من (شرط، قيمة)، تُقيَّم بالترتيب، وتُرجع القيمة المقابلة لأول شرط يتحقق. القيمة الأخيرة المفردة، بلا شرط مقابل لها، تُستخدم كقيمة افتراضية إن لم يتحقق أي شرط سابق.

هذا النمط شائع جداً في تحديد بيئة النشر حسب اسم الفرع، أو أي منطق شرطي متعدد الحالات آخر داخل env أو with أو if.

الصياغة

${{ case(
  <شرط 1>, <قيمة 1>,
  <شرط 2>, <قيمة 2>,
  <قيمة افتراضية>
) }}

📄 مثال

env:
  DEPLOY_ENV: ${{ case(
    github.ref == 'refs/heads/main', 'production',
    github.ref == 'refs/heads/staging', 'staging',
    startsWith(github.ref, 'refs/heads/feature/'), 'development',
    'unknown'
  ) }}

أهم النقاط

العنصرالوظيفة
زوج (شرط، قيمة)يُقيَّم بالترتيب من الأعلى للأسفل؛ أول شرط صحيح يحدد القيمة المُرجَعة ويوقف التقييم
القيمة الأخيرة المفردةبلا شرط مقابل — تُستخدم كقيمة افتراضية (fallback) إن لم يتحقق أي شرط

💡 نصائح عملية

  • استبدل تكديس && / || بـ case() بمجرد أن يتجاوز عدد الحالات شرطين — الفرق بالوضوح كبير خصوصاً لمن يراجع الكود لاحقاً

⚠️ أخطاء شائعة

  • نسيان قيمة افتراضية أخيرة، فيصبح ناتج التعبير فارغاً (undefined) إن لم يتحقق أي شرط من الشروط المعرَّفة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DEVOPS الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs