مقدمة: من CI/CD الأساسي إلى مستوى الإنتاج
خط أنابيب CI/CD الأساسي الذي يقوم فقط بتشغيل الاختبارات هو أمر جيد. لكنه غير كافٍ لمشروع PHP جاد. في التطوير الحقيقي، نحتاج إلى تخزين التبعيات مؤقتًا لتسريع عمليات البناء، والمهام المتوازية، والبناء المصفوفي لإصدارات PHP المختلفة، والتحليل الثابت، وبالطبع النشر التلقائي. في هذه المقالة، سنستعرض التقنيات المتقدمة لإعداد GitHub Actions لمشاريع PHP مع أمثلة عملية.
نفترض أنك بالفعل على دراية بأساسيات بناء جملة YAML والهيكل الأساسي لـ .github/workflows. الآن سننتقل إلى تحسين وتوسيع الإمكانيات.
1. تسريع عمليات البناء: التخزين المؤقت لـ Composer والاستراتيجية المثلى
كل تشغيل لسير العمل يقوم بتنزيل التبعيات من جديد. يستغرق هذا من 1-3 دقائق، يمكن تقليصها إلى 5-10 ثوانٍ باستخدام التخزين المؤقت.
التخزين المؤقت الذكي لـ vendor
نستخدم actions/cache مع مفتاح يعتمد على تجزئة composer.lock. إذا لم يتغير ملف القفل، فسيتم استعادة التبعيات من ذاكرة التخزين المؤقت.
name: PHP CIon: [push, pull_request]
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' tools: composer:v2
- name: Cache Composer dependencies uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-
- name: Install dependencies run: composer install --no-progress --prefer-distلاحظ restore-keys: إذا لم يتم العثور على المفتاح الدقيق، فسيتم استخدام آخر ذاكرة تخزين مؤقت لهذا النظام. هذا يوفر حماية عند تغيير الفروع.
البناء المصفوفي لإصدارات PHP المختلفة
لضمان التوافق، اختبر على إصدارات متعددة من PHP بالتوازي:
jobs: test: strategy: matrix: php-version: ['8.1', '8.2', '8.3'] dependency-stability: [prefer-lowest, prefer-stable]
steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }}
- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }}
- name: Install dependencies run: | composer update --${{ matrix.dependency-stability }} --prefer-dist --no-interaction
- name: Run tests run: vendor/bin/phpunitيكشف هذا النهج عن مشاكل التوافق قبل الدمج في الفرع الرئيسي. ستحصل على 6 وظائف متوازية (3 إصدارات × استراتيجيتي استقرار).
2. المراحل المتقدمة: التحليل الثابت وجودة الكود
اختبارات الوحدة ليست الأداة الوحيدة لمراقبة الجودة. سنضيف PHPStan (أقصى مستوى تحليل) و PHP Code Sniffer.
الفحص والتحليل الثابت
أنشئ وظيفة منفصلة للتحليل، تعمل بالتوازي مع الاختبارات:
jobs: static-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.2' coverage: none
- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-static-${{ hashFiles('**/composer.lock') }}
- run: composer install --no-interaction --prefer-dist
- name: PHPStan run: vendor/bin/phpstan analyse --level=max src/
- name: PHPCS run: vendor/bin/phpcs --standard=PSR12 src/