البنية الداخلية لـ GitHub Actions

. التعرف على بنية GitHub Actions Repository Workflow Event Job Step Action Runner Artifact Environment Secret Variable مخطط العلاقات بينها جميعاً. اشرح بالتفصيل الممل جدا واشرح كخبير عالي المستوى للمبتدئين والمحترفين اشرح أدق وأبسط الامور الى اعقدها

الفصل الثالث: البنية الداخلية لـ GitHub Actions

هذه المرحلة هي أهم مرحلة في GitHub Actions بالكامل.

إذا فهمتها جيداً فلن تحتاج إلى حفظ ملفات YAML، بل ستفهمها تلقائياً.

معظم المبتدئيـن يرون ملفاً مثل:

name: Laravel CI

on:
push:

jobs:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- run: composer install

- run: php artisan test

ويشعرون أنه سحر أو لغة جديدة.

لكن في الحقيقة GitHub Actions عبارة عن سلسلة بسيطة جداً:

Repository

Event

Workflow

Job

Step

Action / Command

Runner

Artifacts

إذا فهمت هذا المخطط فقد فهمت 70% من GitHub Actions.


أولاً: Repository

ما هو Repository؟

هو المشروع نفسه.

مثلاً لديك مشروع Laravel:

laravel-shop

داخل GitHub.


مثال:

laravel-shop

├── app
├── routes
├── database
├── docker
├── .github
│ └── workflows
└── composer.json

هذا يسمى Repository.


لماذا هو مهم؟

لأن جميع GitHub Actions مرتبطة به.

كل شيء يبدأ من Repository.

بدون Repository لا يوجد:

  • Workflow
  • Actions
  • Secrets
  • Variables
  • Deployments

مثال واقعي

لديك مشروع:

claudsoft-platform

كل Push يحدث عليه يمكن أن يشغل GitHub Actions.


ثانياً: Event

ما هو Event؟

الحدث الذي يؤدي إلى تشغيل Workflow.

بمعنى:

شيء حدث داخل GitHub.


أمثلة:

Push

أو:

Pull Request

أو:

Release

أو:

Tag

أو:

Manual Run

تشبيه بسيط

تخيل جرس الباب.

الجرس لا يعمل وحده.

يجب أن يضغط أحد عليه.

الضغط = Event


مثال

on:
push:

معناه:

“عند حدوث Push”

شغل Workflow.


أمثلة Events شائعة

Push

on:
push:

Pull Request

on:
pull_request:

Manual

on:
workflow_dispatch:

Schedule

on:
schedule:

Release

on:
release:

ثالثاً: Workflow

ما هو Workflow؟

Workflow هو خطة العمل الكاملة.


تخيل أنك مدير شركة.

عندما يصل طلب جديد:

تقول:

افحص الطلب

راجع البيانات

اصدر الفاتورة

ارسل للعميل

هذه الخطة تسمى Workflow.


في GitHub:

Workflow عبارة عن ملف YAML.


مثال:

name: Laravel CI

ملف Workflow يوجد داخل:

.github/workflows

مثال:

.github/workflows/laravel.yml

Workflow يحتوي على

Events
Jobs
Steps

رابعاً: Job

ما هو Job؟

الـ Job عبارة عن مهمة كبيرة.


مثال:

Workflow يحتوي:

Test
Build
Deploy

كل واحدة تعتبر Job.


مثال حقيقي:

jobs:
test:

Job أخرى:

jobs:
build:

Job أخرى:

jobs:
deploy:

الشكل الكامل

Workflow

├── Test Job
├── Build Job
└── Deploy Job

لماذا نفصل Jobs؟

لأنها يمكن أن تعمل:

  • بالتوازي
  • أو بالتسلسل

مثال:

Test

Build

Deploy

خامساً: Step

ما هو Step؟

الـ Step هو أصغر وحدة عمل.


مثال:

داخل Job الاختبارات.

لدينا:

Install Dependencies
Run Tests
Run PHPStan

كل واحدة Step.


مثال:

steps:

داخلها:

- run: composer install

Step


- run: php artisan test

Step


- run: phpstan analyse

Step


العلاقة

Workflow

Job

Step

سادساً: Action

هذه نقطة يخطئ فيها معظم المبتدئين.


ما هو Action؟

Action عبارة عن وظيفة جاهزة قام شخص آخر ببنائها.


بدلاً من كتابة عشرات الأوامر.

تستخدم Action جاهزة.


مثال مشهور:

uses: actions/checkout@v4

ماذا تفعل؟

تقوم بتحميل المشروع إلى Runner.


بدونها ستحتاج أوامر كثيرة.


مثال آخر:

uses: actions/setup-node@v4

يقوم بتثبيت NodeJS.


مثال:

uses: docker/login-action@v3

يقوم بتسجيل الدخول إلى Docker Registry.


تشبيه

Action مثل Package في Laravel.

شخص آخر كتبها.

وأنت تعيد استخدامها.


سابعاً: Runner

هذه من أهم المفاهيم.


ما هو Runner؟

Runner هو الجهاز الذي ينفذ الأوامر فعلياً.


عندما تكتب:

run: php artisan test

أين يتم التنفيذ؟


على Runner.


GitHub Hosted Runner

GitHub يوفر لك جهازاً مؤقتاً.

مثلاً:

runs-on: ubuntu-latest

GitHub ينشئ:

Ubuntu VM

مؤقتة.


يشغل الأوامر.


ثم يحذفها.


ما الذي يحدث داخلياً؟

Push

GitHub

Create VM

Execute Workflow

Destroy VM

Self Hosted Runner

هنا أنت توفر الجهاز.

مثلاً:

VPS

أو:

Dedicated Server

أو:

Server داخل الشركة

ثم تربطه بـ GitHub.


متى نستخدم Self Hosted؟

عندما تحتاج:

  • Docker سريع
  • موارد أكبر
  • الوصول للشبكة الداخلية
  • Kubernetes خاص

ثامناً: Artifact

ما هو Artifact؟

ملف يتم حفظه بعد انتهاء Job.


مثال:

بعد Build.

ينتج:

app.zip

يمكن رفعه كـ Artifact.


مثال آخر:

coverage-report.html

أو:

build.tar.gz

لماذا نستخدمه؟

لنقل الملفات بين Jobs.


مثال:

Build Job

Artifact

Deploy Job

بدلاً من إعادة البناء.


تاسعاً: Environment

هذه نقطة مهمة جداً في الشركات.


ما هو Environment؟

بيئة تشغيل.


مثال:

Development

Staging

Production

لماذا؟

لأن كل بيئة لها:

  • أسرار مختلفة
  • قواعد مختلفة
  • موافقات مختلفة

مثال:

environment: production

هنا GitHub يعلم أنك تنشر على Production.


يمكن طلب موافقة قبل النشر.


عاشراً: Secrets

من أخطر المواضيع.


ما هي Secrets؟

بيانات حساسة لا يجب ظهورها.


مثال:

SSH Key

أو:

Database Password

أو:

API Token

مثال

بدلاً من:

password: 123456

نكتب:

${{ secrets.DB_PASSWORD }}

فيظهر فقط أثناء التنفيذ.


ولا يراه أحد.


الحادي عشر: Variables

تشبه Secrets.

لكن ليست حساسة.


مثال:

APP_NAME

أو:

REGION

أو:

DOCKER_IMAGE

مثال:

${{ vars.APP_NAME }}

الفرق بين Variables و Secrets

Variable

يمكن للجميع رؤيتها.


Secret

مشفرة ومخفية.


العلاقة بين جميع المكونات

الآن دعنا نجمع الصورة كاملة.


مثال عملي Laravel + Docker + Coolify

Repository

├── Source Code

└── Workflow


Event
(Push)


Workflow


┌────────────┐
│ Test Job │
└────────────┘


Steps

├── Checkout Action
├── Composer Install
├── PHPUnit
└── PHPStan




┌────────────┐
│ Build Job │
└────────────┘


Steps

├── Docker Build
├── Docker Login
└── Docker Push



Artifact



┌────────────┐
│ Deploy Job │
└────────────┘


Environment
Production


Secrets
SSH Keys


Runner


Server

ملخص يجب حفظه

Repository
=
المشروع

Event
=
السبب الذي يبدأ التشغيل

Workflow
=
الخطة الكاملة

Job
=
مهمة كبيرة

Step
=
مهمة صغيرة

Action
=
وظيفة جاهزة

Runner
=
الجهاز الذي ينفذ

Artifact
=
ملفات محفوظة بين Jobs

Environment
=
بيئة التشغيل

Secret
=
بيانات حساسة مخفية

Variable
=
قيم عادية قابلة لإعادة الاستخدام

إذا فهمت هذا المخطط جيداً، فإن قراءة أي ملف GitHub Actions YAML لاحقاً ستصبح سهلة جداً، لأنك ستعرف بالضبط أين يقع كل عنصر داخل البنية الكاملة للنظام.