كيفية استخدام GitHub Actions لأتمتة تطوير تطبيقات أندرويد
مقدمة: لماذا نحتاج إلى أتمتة تطوير تطبيقات أندرويد؟
في مشاريع Android الحديثة، تتكرر مجموعة من المهام بشكل شبه يومي: تشغيل الاختبارات، التأكد من أن التطبيق يُبنى بنجاح بعد دمج التعديلات، وتجهيز النسخ الجاهزة للنشر. هذه الأعمال مهمة للغاية، لكنها قد تستهلك وقت الفريق وتشتت تركيزه عن تطوير الميزات وتحسين تجربة المستخدم.
هنا يظهر دور GitHub Actions كحل عملي وفعّال. فمن خلاله يمكنك إنشاء سير عمل آلي ينفذ المهام المتكررة بمجرد حدوث أحداث محددة داخل المستودع، مثل فتح Pull Request أو طلب تشغيل يدوي أو إرسال تغييرات إلى الفرع الرئيسي.

من أبرز المهام التي يمكن أتمتتها في مشاريع أندرويد:
- تشغيل اختبارات المشروع تلقائياً.
- التحقق من نجاح عملية البناء قبل دمج التعديلات.
- إنشاء ملفات النشر مثل
APKأوAAB. - توقيع التطبيق ونشره إلى
Google Play.
والنتيجة هي دورة تطوير أكثر استقراراً، وأخطاء أقل، ووقت أكبر للتركيز على العمل الفعلي بدلاً من العمليات اليدوية المرهقة.
ما هي GitHub Actions؟
GitHub Actions هي ميزة داخل منصة GitHub تتيح لك تشغيل أوامر وإجراءات آلية استجابةً لأحداث معينة تقع داخل المستودع. عملياً، أنت تكتب ملف إعداد بصيغة YAML يوضح:
- ما الذي يجب تنفيذه.
- ومتى يجب تنفيذه.
غالباً ما يكون هذا الملف بامتداد .yml، وقد يبدو بالشكل التالي:
name: My GitHub Action
on: pull_request
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
شرح مكونات الملف السابق
name: اسم سير العمل الذي سيظهر داخل واجهةGitHub.on: الحدث الذي سيؤدي إلى تشغيل الإجراء، مثل فتحPull Request.jobs: قائمة بالمهام الرئيسية التي سيتم تنفيذها.runs-on: يحدد نوع البيئة الافتراضية المستخدمة، مثلUbuntuأوWindowsأوmacOS.steps: المراحل أو الخطوات المتسلسلة داخل كل مهمة.uses: استدعاء إجراء جاهز من إجراءاتGitHubأو من المجتمع.
ورغم أن المثال السابق بسيط، فإنه يوضح البنية الأساسية لأي ملف عمل في GitHub Actions. ومن المهم أيضاً معرفة أن جميع ملفات سير العمل يجب أن توضع داخل المسار التالي في المشروع:
.github/workflows

إنشاء GitHub Action للتحقق من طلبات السحب
سواء كنت تعمل منفرداً أو ضمن فريق، فمن الضروري التأكد من أن التطبيق مستقر قبل دمج أي تعديل جديد. لذلك من الأفضل تشغيل البناء والاختبارات تلقائياً مع كل Pull Request.
في هذا السيناريو، سننفذ الخطوات التالية:
- إعداد نسخة
JDK. - تعديل صلاحيات ملف
Gradle Wrapper. - تشغيل الاختبارات.
- بناء المشروع.
name: Android Build
on: pull_request
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set Up JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Change wrapper permissions
run: chmod +x ./gradlew
- name: Run Tests
run: ./gradlew test
- name: Build Project
run: ./gradlew assemble
ماذا يفعل هذا الإجراء؟
- الخطوة
actions/checkout@v1تسحب كود المشروع إلى البيئة الافتراضية. - الخطوة
actions/setup-java@v1تجهز إصدارJavaالمطلوب. - الأمر
chmod +x ./gradlewيمنح ملفgradlewصلاحية التنفيذ داخل بيئةLinux. - الأمر
./gradlew testيشغل الاختبارات. - الأمر
./gradlew assembleيبني التطبيق للتأكد من سلامة الشيفرة.
تجدر الإشارة إلى أن خطوة تعديل الصلاحيات مهمة جداً، لأن البيئة الافتراضية قد لا تتمكن من تنفيذ أوامر Gradle من دونها.
أتمتة نشر التطبيق باستخدام GitHub Actions
بعد أول عملية نشر للتطبيق، تتحول عمليات التحديث اللاحقة إلى سلسلة من الخطوات المتكررة: رفع رقم الإصدار، إنشاء نسخة جديدة، توقيعها، ثم إرسالها إلى Google Play Console. بدلاً من تنفيذ هذه المهام يدوياً في كل مرة، يمكن تحويلها إلى سير عمل آلي.
لكن هذا السيناريو أكثر تقدماً، لأنه يعتمد على GitHub Secrets لتخزين البيانات الحساسة بأمان.
ما هي GitHub Secrets؟
هي وسيلة لحفظ القيم الحساسة داخل المستودع على هيئة متغيرات سرية، مثل كلمات المرور، مفاتيح التوقيع، وبيانات حسابات الخدمة. نحتاجها هنا لسببين رئيسيين:
- توقيع التطبيق قبل النشر.
- منح الإجراء صلاحية رفع النسخة إلى
Google Play Store.
كيفية إنشاء GitHub Secret
- ادخل إلى الصفحة الرئيسية للمستودع.
- افتح تبويب
Settings. - من القائمة الجانبية اختر
Secrets. - اضغط على زر
New repository secret.



ملف النشر الآلي لتطبيق أندرويد
name: Android Publish
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set Up JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Change wrapper permissions
run: chmod +x ./gradlew
- name: Run Tests
run: ./gradlew test
- name: Build Project
run: ./gradlew build
- name: Build Release AAB
run: ./gradlew bundleRelease
- name: Sign AAB
uses: r0adkll/sign-android-release@v1
with:
releaseDirectory: app/build/outputs/bundle/release
signingKeyBase64: ${{ secrets.SIGN_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.STORE_KEY_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
- name: Deploy to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT}}
packageName: com.tomerpacific.laundry
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: production
ما المقصود بـ workflow_dispatch؟
هذا الحدث يعني أن سير العمل يمكن تشغيله يدوياً من داخل GitHub. وهو خيار مفيد عندما تريد التحكم في وقت النشر بدقة. وبالطبع يمكنك استبداله بأحداث أخرى، مثل تنفيذ النشر عند وصول push إلى الفرع الرئيسي.
شرح خطوات النشر
./gradlew bundleRelease: ينشئ ملف.aabالمخصص للنشر.- الخطوة
Sign AAB: توقّع الملف باستخدام بيانات التوقيع المخزنة فيSecrets. - الخطوة
Deploy to Play Store: ترفع ملف التطبيق إلى متجرGoogle Play.
ولكي تعمل هذه العملية بنجاح، يجب إنشاء القيم السرية التالية:
secrets.SIGN_KEY: مفتاح التوقيع بصيغةBase64.secrets.ALIAS: الاسم المختصر للمفتاح.secrets.STORE_KEY_PASSWORD: كلمة مرور ملف التخزين.secrets.KEY_PASSWORD: كلمة مرور المفتاح نفسه.secrets.SERVICE_ACCOUNT: محتوى ملف حساب الخدمة بصيغةJSON.
إنشاء Service Account لرفع التطبيق إلى Google Play
لكي يتمكن GitHub Action من رفع التطبيق نيابةً عنك، يحتاج إلى هوية موثوقة لدى خدمات Google. وهنا يأتي دور Service Account.
Service Account هو كيان برمجي يُستخدم لتمثيل خدمة أو تطبيق يتفاعل مع أنظمة Google بالنيابة عنك. في حالتنا، سيُستخدم للسماح لسير العمل برفع نسخ التطبيق إلى Google Play Store.
خطوات إنشاء حساب خدمة
- انتقل إلى
Google Cloud Console. - من القائمة الجانبية اختر
Service Accounts. - أنشئ حساب خدمة جديداً.
- أدخل الاسم والوصف المناسبين.
- اختر الدور
Basic → Editor. - أضف بريدك الإلكتروني في خطوة منح الوصول.





إنشاء مفتاح لحساب الخدمة
بعد إنشاء الحساب، ستحتاج إلى إنشاء مفتاح تعريف يستخدمه GitHub Action عند الاتصال بـ Google Play.
- من شاشة حسابات الخدمة، اضغط على قائمة الإجراءات ذات النقاط الثلاث.
- اختر
Manage keys. - اضغط
New KeyثمCreate new key. - اترك التنسيق على
JSON. - اضغط
Createلتنزيل الملف.



بعد تنزيل الملف، احتفظ به جيداً، لأنك لن تتمكن غالباً من تنزيل المحتوى نفسه مرة أخرى. بعد ذلك، انسخ محتواه وأضفه إلى GitHub Secret باسم secrets.SERVICE_ACCOUNT.
ربط Service Account مع Google Play Console
إنشاء حساب الخدمة وحده لا يكفي. يجب أيضاً منح هذا الحساب الصلاحيات المناسبة داخل Google Play Console.
- سجّل الدخول إلى
Google Play Console. - انتقل إلى
Setup → API Access. - مرر إلى قسم
Service Accounts. - ستجد الحساب الذي أنشأته مسبقاً، ثم اضغط
Grant Access.

بعدها، من إعدادات الصلاحيات:
- افتح قسم
App permissionsوحدد التطبيق المطلوب. - في قسم
Account permissions، فعّل الصلاحيات المتعلقة بالإصدارات. - راجع بقية الأذونات بعناية قبل منحها.
- اضغط
Invite userلإتمام الربط.

بعد إرسال الدعوة وتفعيل الصلاحيات، يصبح بإمكانك تشغيل سير العمل المسؤول عن النشر إلى المتجر.
مراقبة سير العمل داخل GitHub
لمتابعة جميع الإجراءات المعرّفة في المستودع، انتقل إلى تبويب Actions. هناك ستشاهد جميع ملفات workflow بالإضافة إلى جميع مرات التشغيل السابقة.

في هذه الصفحة يمكنك:
- عرض كل إجراءات الأتمتة المتوفرة.
- معرفة الحالات السابقة لكل تشغيل.
- فتح تشغيل محدد لمراجعة السجلات
logs. - تشغيل الإجراء يدوياً إذا كان يعتمد على
workflow_dispatch.

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

أفضل ممارسات عند استخدام GitHub Actions لمشاريع أندرويد
- احفظ جميع البيانات الحساسة داخل
GitHub Secretsولا تضعها في المستودع مباشرة. - افصل بين سير عمل التحقق وسير عمل النشر لتسهيل الصيانة.
- اجعل تشغيل النشر يدوياً في البداية إلى أن تتأكد من استقرار العملية.
- راجع الصلاحيات الممنوحة لحساب الخدمة بشكل دوري.
- راقب سجلات التنفيذ بعد كل تعديل على ملفات
workflow.
الخلاصة التقنية
استخدام GitHub Actions في مشاريع Android ليس مجرد تحسين شكلي لبيئة العمل، بل هو خطوة عملية نحو بناء خط أنابيب احترافي لـ CI/CD. فعند أتمتة الاختبارات والبناء والتوقيع والنشر، تقل الأخطاء البشرية وتزداد موثوقية الإصدارات بشكل واضح. وإذا أُعدت الصلاحيات وملفات الإعداد بصورة صحيحة، فستتحول عملية النشر من مهمة يدوية مرهقة إلى إجراء ثابت يمكن الاعتماد عليه بثقة.