مشروع Swift الخاص بك يستحق أتمتة سحابية: بناء CI/CD من الصفر
\n\nلقد كتبت حزمة Swift أو تطبيقًا رائعًا. الكود يعمل بسلاسة، والاختبارات تمر محليًا، وتشعر وكأنك نجم. ولكن بمجرد أن تقوم بعمل push، يبدأ الكابوس: "هل سيعمل على Linux؟"، "هل ستنجح الاختبارات على macOS؟"، "ماذا لو نسيت تشغيل SwiftLint؟".
\n\nهل يبدو هذا مألوفًا؟ إذا كانت الإجابة بنعم، فأنت بحاجة إلى أنابيب CI/CD لـ Swift. إنها مثل الطيار الآلي للكود الخاص بك: تقوم تلقائيًا بالبناء والاختبار والتحقق من الأسلوب وحتى النشر. في هذه المقالة، سنقوم بإعداد أنابيب CI/CD لـ Swift من الصفر باستخدام GitHub Actions. ستحصل على كود جاهز للعمل يمكنك نسخه واستخدامه اليوم.
\n\nتلميح: بعد الإعداد، ستحصل على علامات خضراء لكل commit، بدلاً من القلق أمام الشاشة.\n\n
لماذا CI/CD لـ Swift ليس رفاهية بل ضرورة
\n\nSwift يعيش في عالمين: macOS (Xcode, CocoaPods, Carthage) و Linux (Vapor, SwiftNIO, مشاريع الخادم). بدون CI/CD، أنت تخاطر بـ:
\n\n- \n
- تفويت خطأ في الترجمة على منصة أخرى \n
- نسيان تشغيل المدقق (ثم يبدو الكود وكأنه بعد قصف) \n
- إضاعة ساعات في النشر اليدوي \n
- إضاعة الوقت في البحث عن الأخطاء التراجعية \n
أنابيب CI/CD لـ Swift المُعدة بشكل صحيح تحل كل هذه المشاكل. إنها تعمل 24/7، لا تشرب القهوة ولا تقول "إنه يعمل لدي". هيا بنا!
\n\nالخطوة 1: اختيار الأداة — GitHub Actions
\n\nسنستخدم GitHub Actions — وهي أداة CI/CD مدمجة في GitHub، وهي مثالية لـ Swift. الأسباب:
\n\n- \n
- مجانية للمستودعات العامة (2000 دقيقة شهريًا) \n
- مشغلات macOS — يمكن البناء تحت Xcode \n
- مشغلات Linux — لمشاريع Swift الخادمية \n
- إجراءات جاهزة لـ SwiftLint والاختبار والنشر \n
إذا كنت تستخدم GitLab أو Bitbucket أو Jenkins — المبادئ هي نفسها، لكن بناء جملة YAML سيختلف.
\n\nالخطوة 2: الهيكل الأساسي لأنابيب CI/CD لـ Swift
\n\nأي pipeline يتكون من ثلاث مراحل:
\n\n- \n
- Build — بناء المشروع (SPM أو Xcode) \n
- Test — تشغيل اختبارات الوحدة \n
- Lint — التحقق من أسلوب الكود (اختياري لكن موصى به بشدة) \n
يمكنك أيضًا إضافة النشر (مثل الخادم أو TestFlight).
\n\nإنشاء ملف .github/workflows/swift-ci.yml
\n\nفي جذر المستودع الخاص بك، أنشئ مجلد .github/workflows/ وداخله ملف swift-ci.yml. إليك الحد الأدنى من pipeline العملي:
name: Swift CI/CD Pipeline\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout code\n uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n with:\n swift-version: "5.9"\n\n - name: Build\n run: swift build\n\n - name: Run tests\n run: swift test\n\nهذه أنابيب CI/CD لـ Swift تعمل عند كل push أو pull request إلى main/develop. تقوم ببناء المشروع وتشغيل الاختبارات على Ubuntu. بسيط؟ نعم. لكن دعنا نضيف بعض السحر.
\n\nالخطوة 3: إضافة macOS و Xcode إلى مصفوفة البناء
\n\nمطورو Swift غالبًا ما يعملون على macOS، بينما الجزء الخادمي على Linux. للتأكد من أن المشروع يُبنى في كل مكان، نستخدم مصفوفة الاستراتيجيات (matrix strategy):
\n\njobs:\n build-and-test:\n strategy:\n matrix:\n os: [ubuntu-latest, macos-latest]\n swift-version: ["5.8", "5.9"]\n\n runs-on: ${{ matrix.os }}\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n