محتويات الدورة

GitHub Actions / الأحداث والتنفيذ وحدود البيانات / الدرس 1

حدود سير العمل والمهمة والخطوة والإجراء

اقرأ تعريف Actions كرسم تنفيذ قائم على الأحداث بحدود حالة مختلفة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز التشغيل والمهمة والخطوة والإجراء المعاد استخدامه.
  • شرح ما يبقى بين الخطوات وما لا يعبر المهام.

سمّ الكائن المقصود

يقرأ GitHub Actions تعريفات سير العمل من مجلد .github/workflows في المستودع. ويمكن لحدث أن ينشئ تشغيلاً يضم مهام، ثم تضم كل مهمة خطوات مرتبة أو تستدعي سيراً قابلاً لإعادة الاستخدام بصيغة مختلفة على مستوى المهمة. تنفذ الخطوة أمراً عبر run أو تستدعي إجراءً عبر uses. لهذه الكائنات هويات وسلوك إخفاق مختلفان. في مستودع Parcel الافتراضي يكون label-checks اسم سير العمل وformatting اسم المهمة وnormalize-fixture اسم الخطوة. تسمية الجميع البناء تجعل تحديد موضع النتيجة المفقودة أصعب، لذلك استخدم اسم الكائن ومستواه عند التشخيص.

اقرأ بنية تعريف صغير

يحتوي المثال على حدث دفع واحد ومهمة واحدة بخطوتي صدفة. قد يؤدي وضعه في مستودع مفعّل إلى تنفيذ فعلي، ولذلك تعرضه الدورة نصاً غير قابل للتشغيل ولا تنشئ ملف سير عمل في المشروع. يشير ubuntu-latest إلى وسم متغير لمشغّل مستضاف، ولا يحدد صورة نظام ثابتة. السطر المطبوع مجرد خرج صدفة، فلا ينشئ ناتجاً محفوظاً ولا يثبت صحة التطبيق. ينبغي لكل فحص مطلوب أن يتضمن تأكيداً ذا معنى أو أمراً تعبّر حالة خروجه عن العقد المقصود، مع توضيح ما بقي خارج الفحص.

yaml مثال سير عمل للقراءة فقط
name: Parcel model
on: push
permissions:
  contents: read
jobs:
  formatting:
    runs-on: ubuntu-latest
    steps:
      - name: Introduce fixture
        run: printf "%s\n" "parcel-lab"
      - name: Check declared value
        run: test "parcel-lab" = "parcel-lab"

تطبع الأولى parcel-lab وتخرج الثانية بصفر في صدفة مناسبة. لا تفحصان ملفات المستودع ولا يوجد إجراء checkout. لا يُنشأ تشغيل GitHub ولا يُتحقق منه هنا.

تتشارك الخطوات الملفات لا عملية صدفة واحدة

تعمل خطوات الصدفة داخل المهمة عادة في عمليات منفصلة، مع اشتراكها في مساحة ملفات المهمة. لذلك لا ينتقل متغير محلي من الخطوة الأولى تلقائياً إلى الثانية. قد تبقى الملفات متاحة، وتوفر GitHub ملفات البيئة والمخرجات لنقل القيم المقصود بين الحدود المناسبة. لا تخلط مشاركة القرص بمشاركة ذاكرة العملية. كذلك يغيّر cd مجلد الصدفة الحالية فقط؛ ولا تنتقل وجهته إلى الخطوة التالية ما لم تختَر هي مجلد عملها صراحة أو تستخدم إعداداً مناسباً. يساعد هذا الفصل على تفسير بقاء ملف واختفاء متغير في الوقت نفسه.

تحتاج المهام علاقات بيانات صريحة

قد تعمل مهام منفصلة على مشغلات مختلفة، ولا تتشارك نظام الملفات لمجرد تطابق قيم runs-on. تضبط needs اعتماد الجدولة وتتيح المخرجات المعلنة للمهام السابقة، بينما تنقل آليات رفع النواتج وتنزيلها الملفات صراحة. وقد تُتخطى مهمة بسبب شرط كاذب أو اعتماد لا يستوفي السلوك المطلوب. تعامل مع نتيجة المهمة بوصفها دليلاً يخص ذلك التنفيذ والمراجعة المحددة. لا تجعلها حقيقة دائمة عن اسم فرع، لأن الفرع قد يتحرك بعد بدء التشغيل وتصبح بايتاته مختلفة عن البايتات التي فُحصت.

وضّح حدود العملية محلياً

يشغّل برنامج Python الكامل التالي عملية ابن محلية ذات متغير بيئة مؤقت، ثم يفحص بيئة الأب. يوضح المثال محلية حالة العملية، ولا يحاكي آلية ملفات البيئة في GitHub. يتلقى الابن خريطة بيئة صريحة ويعيد خرجاً نصياً، لكن هذا الخرج لا يعدّل بيئة الأب. تبقى صياغة الصدفة واقتباساتها وافتراضات المشغّل مرتبطة بالمفسر والمنصة المختارين. تفيد هذه النماذج الصغيرة في توضيح الحدود، بشرط التصريح بأن الدليل محلي ومحدود وأن نجاحه ليس اختباراً لمشغّل GitHub مستضاف أو لسير العمل المعروض.

python لا يغير الابن بيئة الأب
import os, subprocess, sys
env = {"PARCEL_STEP": "first"}
r = subprocess.run([sys.executable, "-I", "-c", "import os; print(os.environ['PARCEL_STEP'])"], env=env, capture_output=True, text=True, check=True)
print(r.stdout.strip())
print("PARCEL_STEP" in os.environ)
الناتج المتوقع
first
False

ينشئ البرنامج ابن Python محلياً فقط دون شبكة أو CI. يفترض عدم تعريف PARCEL_STEP مسبقاً وتستخدم مراجعة التأليف هذا الشرط.

الأخطاء الشائعة وإصلاحها

لا تقرأ التالية متغير صدفة سابقاً.

لماذا يحدث؟
افتُرضت عملية واحدة لكل الخطوات.
كيف تصلحه؟
استخدم مخرجاً أو ملف بيئة بالنطاق المقصود.
كيف تتجنب تكراره؟
وثق انتماء القيمة للخطوة أو المهمة أو التالي.

لا تجد مهمة لاحقة ملفاً مولداً.

لماذا يحدث؟
اختلط تطابق الوسم بالتخزين المشترك.
كيف تصلحه؟
انقل الناتج صراحة وتحقق من منتجه.
كيف تتجنب تكراره؟
راجع الجدولة ونقل البيانات منفصلين.

يوصف سير يطبع فقط بأنه اختبار التطبيق.

لماذا يحدث؟
اختلط نجاح السجل بتأكيد عقد.
كيف تصلحه؟
أضف فحوصاً ذات حالات فشل مرتبطة بمتطلبات.
كيف تتجنب تكراره؟
اذكر إثبات كل مهمة وحدوده.

اختبر فهمك

1. مهمتان بكل منهما ثلاث خطوات. هل تنفذ الست بالتسلسل؟

اعرض الحل المشروح

لا. تترتب الخطوات داخل المهمة، وقد تتوازى المهام المستقلة عند توفر السعة والشروط. أضف needs للاعتماد الحقيقي فقط. لا يثبت ترتيب YAML ترتيباً بين المهام.

2. تغيّر الأولى المجلد وتنشئ ملفاً. ماذا تفترض الثانية؟

اعرض الحل المشروح

قد يبقى الملف في المساحة لكن الصدفة الثانية لا ترث مجلد الأولى أو متغيراتها المحلية. اختر مجلد العمل صراحة واستخدم مساراً معروفاً.

أهم ما تعلمته

  • استخدم أسماء الكائنات بدقة.
  • تختلف نطاقات العملية والملفات والمخرجات والنواتج.

المراجع الرسمية