الفصل السابع: Events (Triggers) في GitHub Actions
وصلنا الآن إلى قلب GitHub Actions الحقيقي.
إذا كانت الـ Workflow هي الخطة، فإن الـ Event هي الزر الذي يشغل الخطة.
بدون Event لن يتم تشغيل أي Workflow أبداً.
ما هو Event أو Trigger؟
ببساطة:
حدث يقع داخل GitHub
↓
يؤدي إلى تشغيل Workflow
مثال:
Push
↓
تشغيل Workflow
أو:
Pull Request
↓
تشغيل Workflow
أو:
Release
↓
تشغيل Workflow
تشبيه من الواقع
تخيل لديك مصباح ذكي.
المصباح = Workflow
زر التشغيل = Event
بدون ضغط الزر لن يحدث شيء.
أين يتم تعريف Event؟
دائماً داخل:
on:
هذه الكلمة من أهم الكلمات في GitHub Actions.
مثال:
on:
push:
GitHub يفهمها:
عندما يحدث Push
شغل Workflow
كيف يعمل GitHub داخلياً؟
عندما ترفع الكود:
git push origin main
GitHub يراقب Repository.
فور وصول Push:
Repository
↓
Push Event
↓
GitHub Actions
↓
Workflow
أول Event: Push
الأكثر استخداماً في العالم.
ما هو Push؟
عندما ترسل Commit إلى GitHub.
مثال:
git add .
git commit -m "update"
git push origin main
هنا يحدث Event:
Push
أبسط مثال
on:
push:
معناه:
أي Push
على أي Branch
يشغل Workflow
ماذا يحدث عملياً؟
أنت ترفع:
Route::get('/users');
ثم:
git push
GitHub يشغل:
Workflow
↓
Tests
↓
Build
↓
Deploy
متى يستخدم Push؟
في CI غالباً.
مثال Laravel:
Push
↓
Composer Install
↓
PHPUnit
↓
PHPStan
هذه أكثر حالة استخدام شيوعاً.
تقييد Push على Branch معين
مثلاً:
لا أريد التشغيل إلا على:
main
نكتب:
on:
push:
branches:
- main
المعنى:
Push على main
✓ شغل
Push على develop
✗ لا تشغل
عدة Branches
on:
push:
branches:
- main
- develop
المعنى:
main
✓
develop
✓
feature-x
✗
استثناء Branch
on:
push:
branches-ignore:
- develop
المعنى:
أي Branch
إلا develop
ثاني Event: Pull Request
هذا من أهم Events في الشركات.
ما هو Pull Request؟
عندما يريد مطور دمج كوده.
مثال:
feature-login
↓
main
ينشئ:
Pull Request
قبل الدمج.
لماذا هو مهم؟
لأننا نريد فحص الكود قبل دخوله إلى Main.
مثال:
on:
pull_request:
المعنى:
عند إنشاء PR
شغل Workflow
ماذا يحدث؟
Developer
↓
Pull Request
↓
GitHub Actions
↓
Tests
↓
Review
↓
Merge
مثال عملي
on:
pull_request:
jobs:
test:
عند فتح Pull Request:
Run Tests
إذا نجحت:
✅ يمكن الدمج
إذا فشلت:
❌ يمنع الدمج
تقييد Pull Request
مثلاً:
on:
pull_request:
branches:
- main
المعنى:
أي PR يستهدف main
شغل Workflow
ثالث Event: Schedule
من أقوى Events.
ما هو Schedule؟
تشغيل Workflow في وقت محدد.
مثل Cron Job.
مثال:
كل يوم
كل ساعة
كل أسبوع
الصيغة
on:
schedule:
لكن تحتاج Cron Expression.
مثال:
on:
schedule:
- cron: '0 0 * * *'
المعنى:
كل يوم
الساعة 00:00
كيف يقرأها GitHub؟
Minute Hour Day Month Weekday
مثال:
cron: '0 * * * *'
المعنى:
كل ساعة
مثال:
cron: '*/15 * * * *'
المعنى:
كل 15 دقيقة
استخدامات Schedule
نسخ احتياطي
Every Day
↓
Database Backup
تنظيف ملفات
Every Night
↓
Delete Temp Files
فحص SSL
Every Day
↓
Check Expiration
تحديث Dependencies
Weekly
↓
Check Updates
رابع Event: Workflow Dispatch
من أكثر Events التي ستستخدمها في DevOps.
ما هو Workflow Dispatch؟
تشغيل Workflow يدوياً.
بدلاً من:
Push
أنت تضغط زر تشغيل.
الصيغة:
on:
workflow_dispatch:
بعد رفع Workflow:
اذهب إلى:
Actions
ستجد:
Run Workflow
اضغط عليه.
GitHub يشغل Workflow فوراً.
لماذا نستخدمه؟
Deploy يدوي
مثلاً:
Deploy Production
لا تريد النشر عند كل Push.
تريد:
زر Deploy
Workflow Dispatch مثالي لذلك.
مثال
on:
workflow_dispatch:
المعنى:
لا تشغل تلقائياً
شغل فقط عند الضغط على Run Workflow
Workflow Dispatch مع Inputs
احترافي جداً.
مثال:
on:
workflow_dispatch:
inputs:
environment:
عند الضغط:
Environment:
Production
Staging
Development
المستخدم يختار.
ثم يبدأ التنفيذ.
خامس Event: Release
ما هو Release؟
عندما تنشئ إصداراً جديداً.
مثلاً:
v1.0.0
داخل GitHub.
ثم:
Create Release
يحدث Event.
الصيغة:
on:
release:
المعنى:
عند إنشاء Release
شغل Workflow
مثال
Release v2.0
↓
Build Docker Image
↓
Deploy
شائع جداً في الشركات.
سادس Event: Tag
ما هو Tag؟
علامة على Commit.
مثال:
git tag v1.0.0
git push origin v1.0.0
GitHub يرى:
Tag Created
تشغيل Workflow عند إنشاء Tag
on:
push:
tags:
- 'v*'
المعنى:
v1.0.0
✓
v2.0.0
✓
test
✗
لماذا نستخدم Tags؟
إصدار Docker
Tag v1.0
↓
Docker Build
↓
Docker Push
إصدار تطبيق
Tag v2.5
↓
Release Build
Branch Filtering
هذه ليست Event مستقلة.
لكنها فلتر مهم.
مثال:
on:
push:
branches:
- main
المعنى:
Push
+
Branch Main
=
Run Workflow
عدة Branches
on:
push:
branches:
- main
- develop
- staging
GitHub يقرأها:
main
OR
develop
OR
staging
Multiple Events
الآن نصل للجزء الاحترافي.
يمكن لـ Workflow واحدة الاستماع لأكثر من Event.
مثال:
on:
push:
pull_request:
المعنى:
Push
OR
Pull Request
أي حدث منهما سيشغل Workflow.
مثال عملي
on:
push:
branches:
- main
pull_request:
branches:
- main
المعنى:
Push على Main
✓
PR إلى Main
✓
مثال احترافي
on:
push:
branches:
- main
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
هذه Workflow تعمل في ثلاث حالات:
Push
OR
Manual Run
OR
Daily Schedule
كيف يفكر GitHub في Events؟
تخيل هذا المخطط:
Repository
│
│
├── Push
│ │
│ ▼
│ Workflow
│
├── Pull Request
│ │
│ ▼
│ Workflow
│
├── Release
│ │
│ ▼
│ Workflow
│
├── Schedule
│ │
│ ▼
│ Workflow
│
└── Manual Run
│
▼
Workflow
ماذا تستخدم فعلياً في مشاريع Laravel + Docker + Coolify؟
في أغلب الشركات ستستخدم:
CI
on:
pull_request:
لتشغيل الاختبارات.
Build
on:
push:
branches:
- main
لبناء الصورة.
Deploy Production
on:
workflow_dispatch:
أو:
on:
push:
branches:
- main
Backups
on:
schedule:
إذا فهمت Events جيداً فأنت أصبحت قادراً على التحكم متى تبدأ أي Pipeline في GitHub Actions، وهي خطوة أساسية قبل الانتقال إلى الفصل التالي: Jobs بالتفصيل (Dependencies – Parallel Jobs – Sequential Jobs – Needs – Strategy)، وهو المكان الذي تبدأ فيه بناء Pipelines احترافية حقيقية.