CI/CD لمشاريع TypeScript: إعداد GitHub Actions من الصفر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في CI/CD لمشاريع TypeScript



تطوير البرمجيات الحديث لا يمكن تصوره بدون أتمتة. CI/CD (Continuous Integration / Continuous Delivery) هي ممارسة تسمح لفرق التطوير بتسليم التغييرات إلى الإنتاج بسرعة وأمان. بالنسبة لمشاريع TypeScript، خاصة في نظام Node.js البيئي، يصبح إعداد خط أنابيب CI/CD مهمة بالغة الأهمية.



في هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لمشروع TypeScript باستخدام GitHub Actions. ستتعلم كيفية أتمتة تشغيل الاختبارات، بناء المشروع، والنشر على الاستضافة. المادة موجهة للمطورين الذين هم على دراية بالفعل بـ TypeScript ويريدون تطبيق ممارسات DevOps الحديثة.



ما هو GitHub Actions ولماذا هو مناسب لـ TypeScript



GitHub Actions هو نظام CI/CD مدمج يسمح بإنشاء سير عمل آلية (workflows) مباشرة في مستودع GitHub. المزايا الرئيسية:



  • حد مجاني — 2000 دقيقة بناء شهرياً للمستودعات العامة.
  • التكامل مع GitHub — لا حاجة لإعداد خدمات خارجية.
  • المرونة — يدعم أي لغة، بما في ذلك TypeScript، من خلال تشغيل أوامر shell.
  • نظام بيئي كبير — إجراءات جاهزة للنشر على AWS، Vercel، Netlify ومنصات أخرى.


لمشاريع TypeScript، يعتبر GitHub Actions مثالياً لأنه يسمح بتشغيل أوامر npm أو yarn بسهولة، واستخدام التخزين المؤقت للتبعيات والمهام المتوازية.



الهيكل الأساسي لملف workflow



يتم وصف Workflow في GitHub Actions في ملفات YAML، والتي يتم تخزينها في دليل .github/workflows/. دعنا نلقي نظرة على الحد الأدنى من التكوين لمشروع TypeScript.



قم بإنشاء ملف .github/workflows/ci.yml:



name: CI Pipeline

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build-and-test: runs-on: ubuntu-latest

strategy: matrix: node-version: [18.x, 20.x]

steps: - name: Checkout repository uses: actions/checkout@v4

- name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}

- name: Install dependencies run: npm ci

- name: Lint check run: npm run lint

- name: Type check run: npx tsc --noEmit

- name: Run tests run: npm test

- name: Build project run: npm run build


تحليل العناصر الأساسية:

  • on — مشغلات التشغيل (push إلى main/develop، pull request).
  • runs-on — نظام التشغيل للتنفيذ (ubuntu-latest).
  • matrix — تشغيل متوازي على إصدارات مختلفة من Node.js (18 و 20).
  • actions/checkout — إجراء قياسي لاستنساخ المستودع.
  • actions/setup-node — تثبيت الإصدار المحدد من Node.js.
  • npm ci — تثبيت نظيف للتبعيات من ملف lock (أسرع وأكثر موثوقية من npm install).


إضافة التخزين المؤقت لتسريع البناء



لتجنب تنزيل التبعيات في كل مرة، أضف التخزين المؤقت:



      - name: Cache Node.js modules        uses: actions/cache@v3        with:          path: ~/.npm          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}          restore-keys: |            ${{ runner.os }}-node-


هذه الخطوة تخزن ~/.npm مؤقتاً بناءً على تجزئة package-lock.json. عند التشغيل المتكرر، إذا لم تتغير التبعيات، سيتم استعادة التخزين المؤقت، مما يوفر 30-60 ثانية.

المدونات

توصيات الكتب