Level Up Your CI/CD - Fastlane Magic & GitHub Actions

الـ GitHub Actions عبارة عن CI/CD Platform وفرتها GitHub بتخلي عملية  الـ build , test , deploy تكون automated بطريقة اسهل بمجرد ما بتوصل للريبو بتاعك.
Level Up Your CI/CD - Fastlane Magic & GitHub Actions
Level Up Your CI/CD - Fastlane Magic & GitHub Actions

في هذه الصفحة

المقدمة

بعد ما اتعلمنا استخدام Fastlane وFirebase مع Flutter احنا لسة نقدر نوصل لمرحلة اعلي في الAutomation و توفر وقتك وتريح نفسك من المهام المتكررة فيهم اكتر تخيل! 🤯

CI/CD in Mobile Development Using Firebase App Distribution and Fastlane
اكيد كلنا بنزهق اما بنقعد نطلع كل شوية apk يدوي؟ طب تخيل بقى كل ده بيحصل أوتوماتيك وانت بتشرب قهوتك الصبح؟ مع تقدم التكنولوجيا بقي في tools كتير موجودة بتسهل علينا عملية الـ development و deployment.

CI/CD in Mobile Development Using Firebase App Distribution and Fastlane

مع وجود GitHub Actions بمجرد ما تضيف كود جديد، بيبدأ يشتغل من وراك: يبني التطبيق، يختبره، ويتأكد إن كل حاجة تمام. ولو فيه أي مشكلة بيقولك عليها و مش بيطلع النسخة الجديدة الا اما تحلها .

في المقال ده هنتعرف اكتر ازاي نستخدم  GitHub Actions علشان نخلي شغلنا Automated اكتر 🚀

هنتكلم النهاردة عن:

📌 ايه هو GitHub Actions 

📌 مميزاته ايه 

📌 نظرة عامة على GitHub Actions 

📌 ايه هو GitHub Market Place 

📌 إعداد GitHub Actions للـ Flutter

📌 هنكتب اول workflow 

📌 في الختام 

المرة اللي فاتت اتكلمنا عن اهمية الـ CI/CD وعرفنا قد ايه هو بيوفر وقت و مجهود في عملية Deployment و Monitoring.

النهاردة بقي هنتعرف علي Tools من ضمن Tools اللي بتساعد في عملية CI/CD و بتوفر وقت اكتر علينا في عملية Build & Test بعد ما بنضيف او بنعدل حاجة جديدة .


ايه هو GitHub Actions 

GitHub Actions

هي عبارة عن CI/CD Platform وفرتها GitHub بتخلي عملية  الـ build , test , deploy تكون automated بطريقة اسهل بمجرد ما بتوصل للريبو بتاعك ... طب ازاي برضو ؟

المرة اللي فاتت بعد ما ربطنا ب fastlane كنا بنضطر نكتب command علشان نعمل build و نطلع نسخة جديدة في GitHub Actions بقي تقدر تعمل build بمجرد ما تعمل push او merge او pull request حتي ، و بيبدأ ينفذ شوية اوامر عن طريق workflow بنكتبه ولو كل حاجة تمام، يرفع الإصدار الجديد على Firebase أو حتى يرفعه على Google Play.

لو عايز تعرف أكتر، دا الـ documentation الرسمي بتاعه : 

GitHub Actions · GitHub


طب ايه هي مميزات الـ GitHub Actions

  • تاريخ محفوظ من الـ releases: من غير ما تكتب أوامر، بيبقى عندك سجل كامل لكل الـ releases المختلفة اللي عملتها. وإمكانية عمل release على أكتر من بيئة: سواء ويب، موبايل، أو ديسكتوب، وكمان لأنظمة زي Android وiOS.
  • الكاشينج (Caching): دي ميزة بتخليك تقدر تخزن الـ dependencies اللي بتستخدمها، وده بيساعد إن وقت الـ build يكون أسرع ويقلل استهلاك الـ resources.
  • تخزين الـ GitHub Action Logs: بيحتفظ بالـ logs، وده بيخلي الوصول ليها سهل ومشاركتها مع التيم بتاعك أسهل.
  • الأمان (Security): بيحمي أي بيانات حساسة زي الـ configurations أو الـ tokens، وبيخليها أكثر أمان، بحيث محدش يقدر يوصل ليها أو يشوف قيمتها. كمان بيعمل (code scanning)، و(secret scanning)، ومراجعة للـ dependencies عشان يتأكد إن مفيش مشاكل.
  • تقليل وقت الـ merge: بيساعدك تطلع البرودكت أسرع، وتختصر وقت كبير في عمليات الدمج بين الكود.
  • سهولة البدء: GitHub Actions بييجي جاهز مع GitHub، يعني مش هتحتاج تدور على خدمات خارجية أو تربطها، كل اللي عليك تبدأ تكتب الـ workflows بتاعتك.

طيب قبل ما نبتدي نعمل workflow للابلكيشن بتاعنا خلونا نشوف بشكل مختصر ازاي GitHub Actions بيشتغل.


ازاي GitHub Action بيشتغل

📌 Event:  

هو حدث بيحصل في وقت ما بقول مثلا كل يوم الساعة 5 نزل تحديث جديد للموقع ، و زيه انه اما اعمل push علي main يعمل build 

و هكذا عندنا كذا event زي pull request , create issue , merge , schedule 

📌 Workflow : 

هي process كلها اللي عايزة اعملها run بيكون جواها ( event, runner, action - job ) .

يعني مثلا بقوله كل اما اعمل new issue اكتبلي فيها Hello , rowan  وعلشان أنفذ ده، بستفيد من الـ actions اللي بيقدمها GitHub.

📌 Actions : 

دا بقي الحاجة اللي بعملها بسطب حاجة او بعمل run test بتعمل build كدا وفي ناس عملت شوية actions علشان تسهل على المطورين حاجات كتير و دا موجود علي GitHub Market Place هنعرف عنه اكتر كمان شوية .

فاللي بيحصل إن عندي حدث معين، GitHub بيعمل check عليه، ولما يحصل الحدث، بيبدأ يشغل workflow المكتوب باستخدام الـ action اللي حددته.

📌 Runner : 

هو المكان اللي بيشتغل فيه الـ workflows. يعني هو زي الخادم (server) اللي بتنزل عليه الكود وبيشغل الأوامر اللي كتبتها زي انظمة التشغيل المختلفة windows , ubuntu , macos 

فيه حاجة كمان اسمها الـ self-hosted runners، يعني بتكون عندك خادم على جهازك أو سيرفر خاص بيك. ده بيخليك تتحكم أكتر في البيئة، وده مفيد لو عندك متطلبات خاصة.

📌 Jobs : 

هو مجموعة من الخطوات (steps) اللي بتتنفذ على الـ Runner. يعني بتكون مجموعة من الأوامر اللي بتحصل في وقت واحد. 

📌 Steps : 

ده الجزء اللي بيعمل حاجة محددة جوا الـ Job. كل Step يعني أمر معين زي install library أو run test أو رفع الكود.

فببساطة، عندنا: 

  • الـ Workflow جواه job أو أكتر.
  • كل Job فيه step أو أكتر.
  • وكل Step هو أمر معين أو action محدد.

هنجيب ال actions دي منين ؟ 

💡
هنلاقي GitHub موفر Market Place للـ third-party actions، وده مكان تقدر تلاقي فيه أكشنز اتعملت عن طريق community وكمان أكشنز وفرتها GitHub نفسها.

على الـ Marketplace، تقدر تلاقي مجموعة كبيرة من الـ actions اللي ممكن تستخدمها في الـ workflow بتاعك، وده الرابط: https://github.com/marketplace

لكن رغم إن الـ Marketplace بتاع GitHub فيه أكشنز كتير جاهزة تقدر تستخدمها، في بعض الأحيان ممكن تكتشف إن GitHub Actions مفيهوش دعم مباشر لبعض الخدمات الخارجية. في الحالة دي، هتحتاج إنك تعمل actions مخصصة بنفسك أو تدور على حلول بديلة تكون مناسبة لاحتياجاتك.


Flutter and GitHub Acions

دلوقت هنبتدي نستخدم GitHub Actions مع Flutter وهنكمل علي البروجكت اللي بدأناه المرة اللي فاتت 

  1. اول حاجة هنخلي firebase cli token بتاعنا  يكون secure هنروح  علي الريبو ع جت هاب و نختار settings .
  1. بعد كدا هنختار secrets و منها actions 
  1. هنعمل new repo secret هنضيف فيها الvalue بتاعة firebase cli token اللي عندنا في البروجكت كنا حاطنها في fastlane قبل كدا 

و نحط الاسم بتاعها و نعملها save كدا خلاص عملها secure لو دخلنا نشوف الvalue بتاعتها هنلاقيه عملها hidden و مش باينة 

  1. بعد كدا هنبتدي نكتب workflow بقي عندنا في البروجكت اول حاجة هنعمل فولدرفي البروجكت هنسميه .github جواه فولدر اسمه workflows  و هنعمل جواه الفايل اللي هنكتب فيه الworkflow  و يكون معبر عن الهدف بتاعه علشان لو عندنا اكتر من workflow 

الفايل بيتكتب بلغة الyml  فبيكون .yml و دي لغة بيتكتب بيها configrations file زي فايل pubsec.yml اللي عندنا و عارفين انها sensitive for indentation و بتعتمد علي line separation


تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀

النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉

Eqraatech Newsletter | Eqraatech - اقرأ-تِك | Substack
محتوى تقني متميز في مختلف مجالات هندسة البرمجيات باللغة العربية عن طريق تبسيط المفاهيم البرمجية المعقدة بشكل سلس وباستخدام صور توضيحية مذهلة. Click to read Eqraatech Newsletter, a Substack publication with hundreds of subscribers.

  1. نكمل دا الworkflow كامل بتاعنا 

خلينا نشوفه واحدة واحدة .. احنا دلوقت عايزين نعمل build app و نعمله distribute عن طريق firebase , fastlane ف انت ك developer علشان تعمل كدا بتعمل ايه ؟ 

  • بتنزل java jdk بعدين بتنزل flutter sdk و تشتغل عادي و هنا احنا رابطينه ب fastlane ف منزلين ruby كمان ، ف دي الحاجات اللي هنحتاج ننزلها علشان نعمل build و دا نفس اللي هنديه لل github نقوله يعمله علشان يعرف يعمل build برضو 
  • ف هقوله اما اعمل push علي master ابتدي اعمل الحاجات اللي هقولك عليها 
  • بعد كدا هقوله ال jobs اللي هيعملها بقي  
  • اول حاجة بدي ال job ال name اللي انا عايزاه 
  • بعد كدا بقوله هيعمل run علي ايه قلتله هنا ubuntu  علشان هعمل distribute for android لو ios هنحتاج نكتب mac 
  • ال name دا optional بقول بس الاكشن دا بيعمل ايه علشان ابقي فاهمة 
  • بعد كدا بكتب الsteps و علشان اعرف انا هكتب ايه او اسم الاكشن ايه فهنروح زي ما قلنا علي marketplace و نعمل سيرش باسم الحاجة اللي عايزنها هيطلعلنا مثال عليها و نستخدمها ازاي هناخدها copy بس .

ف اول حاجة بقوله ادخل علي الريبو بتاعي علشان يبقي ليه اكسيسس عليه:

  • اما بستخدم كلمة uses: بيعرف انه مفروض يجبها من market place و يدور علي الاكشن اللي بالاسم دا ممكن يكون url او action check out اسم الاكشن 
  • بعد كدا بقوله ينزل ال tools اللي هيحتاجها علشان يعمل build 
  • اول حاجة هينزل java jdk لان الاندرويد بيحتاج جافا ف بشوف الفيرجن stable عندي هتبقي 11 

و بنستخدم with علشان اقوله اني عايزة properties معينة هنا فهقوله عايزة distribution دا packaged version of the JDK ، وبيتأكد بس ان JDK مناسب مع systems مختلفة فيه كذا نوع distributed بس هنا هنستخدم Temurin علشان هو stable برضو و تقدر تشوف بقيت distributions من هنا : 

GitHub - actions/setup-java: Set up your GitHub Actions workflow with a specific version of Java
Set up your GitHub Actions workflow with a specific version of Java - actions/setup-java

 بعد كدا لو دخلت دورت و كتبت flutter action هتلاقيه مطلعلك عايزك تعمل ايه بالظبط بتاخده كوبي عندك و خلاص هتلاقيه هنا 

https://github.com/marketplace/actions/flutter-action

اما تدخل هتلاقي الaction بتاع install flutter بيتكتب ازاي و محتاج ايه 

بعد كدا هنحتاج نسطب ruby علشان fastlane 

  • ال bundler cache بيسرع ال workflow و عملية build 
  • ال working directory بقوله يدخل جوه android علشان يلاقي gem files بتاعة fastlane 
  • بعد كدا علشان استخدم ال secret اللي عملته بتاع فاير بيز
  • هكتب اخر سطر و دا من secrets documentation عادي 
  • بعدين هديله الامر بتاع run بقي في الاخر و بعد كلمة android دا اسم lane بتاعي في fastlanefile 

بس كدا و متنساش كل مرة بترفع apk جديد بتغير الversion في pubsec.yml علشان يقبله و بكدا نبقي عملنا اول work flow بنجاح 🥳

علشان نشوف نتيجة اللي عملناه بقي هنعمل اي تعديل و نعمله  push و هنروح علي repo و ندخل علي actions هنشوف الworkflow بتاعنا و نقدر نشوف logs و لو حصله fail هنشوف السبب ايه 

دا شكل الخطوات اللي عملناها

خلي بالك versions ل rupy و java مش بتكون ثابتة عندنا كلنا ف بنشوف الversion بتاعتنا و نكتبها في workflow 

ممكن كمان نحسن workflow و نعمل cache للجافا و flutter sdk علشان مش كل مرة ينزلهم من الاول يعمل check يشوف موجود و لا لا 

دا في حالة لو انا عايزة اعمل حاجة custom و اكتب workflow بنفسي بس github بتوفر في marketplace workflows لاكشنز جاهزة اقدر اخد منها و اعمل configration علطول 

 لو دخلت علي الريبو و رحت لجزء action 

هعمل سيرش عن الحاجة اللي عايزة اعملها workflow ل دارت مثلا او اندرويد او ios ، هلاقيه مديلي الworkflow جاهز 

دا هيخلينا نطلع apk لو عايزين نطلع app و نرفعه علي جوجل بلاي تقدروا تشوفوا المقالة دي : 

Automating Flutter Builds and Releases with GitHub Actions
In this article, we will walk through automating the build and release process for a Flutter app using GitHub Actions. This approach…

و دا بودكاست مفيد جدا بيتكلم عن DevOps في الموبايل جميل تقدروا تشوفوه : 

- YouTube
Bekijk je favoriete video’s, luister naar de muziek die je leuk vindt, upload originele content en deel alles met vrienden, familie en anderen op YouTube.

في الختام 

💡
Mobile DevOps = Faster Releases

عملية الـ CI/CD مهمة في تطوير تطبيقات Flutter لأنها بتوفر وقت ومجهود كبير وبتقلل الأخطاء لأقل حد ممكن. استخدام GitHub Actions بيوفر لك بيئة متكاملة للـ CI/CD وبيسهّل عليك عملية automation انت ممكن تروح تتمشى شوية، ترجع تلاقي التطبيق بتاعك اتبنى، اتجرب، وجاهز و مطلعك لو فيه اي مشاكل علشان تحلها .

كمان فيه أدوات تانية كتير ممكن تستخدمها مع Flutter، وفي الجزء الجاي و الأخير هنتعرف على واحدة مخصصة Flutter بس.

Happy coding and happy deploying!

اشترك الآن بنشرة اقرأ-تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!