7- Events

الفصل السابع: 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 احترافية حقيقية.