بالصور والمثال: كيفية المساهمة في كود مفتوح المصدر بالخطوات

بالصور والمثال: كيفية المساهمة في كود مفتوح المصدر بالخطوات

دليلك التفصيلي خطوة بخطوة
5 min read
Apr 20, 2022 4:00 PM (3 years ago)

خطوة بخطوة وبالصور ستتعرف على كيفية البدء بالمساهمة في كود مفتوح المصدر على github من خلال العمل على باكج حقيقية.

# Roadmap

# كيفية إيجاد مشروع مفتوح المصدر للمساهمة فيه

لا تستخف بأي مساهمة يمكنك حتى البدء بإصلاح الأخطاء الإملائية في ملف readme.

# في حالة أنك مبتدأ

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

يجب عليك البحث في repo ومعرفة كيفية كتابة الكود وماهي القوانين قبل البدء في المساهمة.

يوجد موقع اسمه أول مشكلة جيدة أو Good First Issue موقع جميل يمكنك البحث من خلاله على الباكدجات أو الاكواد التي تحتاج إلى حلول سهلة وتشكل فرصة جيدة للمبتدئين للعمل على البرامج مفتوحة المصدر.

👈 اذهب الى موقع good first issue (opens new window) ثم اختر لغتك المفضلة أو إطار العمل الذي تفضل بدء العمل عليه.

Good first issue

👈 اختر المشروع أو اللغة التي تفضلها

👈 اذهب الى تاب الــ Issues على موقع github.

👈 في مربع البحث ادخل هذه 👇 الجملة ليظهرلك المشاكل السهلة فقط

is:issue is:open #good label:"good first issue"

Github issue

# في حالة الخبرة المسبقة

بعد العمل على باكدج أو إطار عمل في بعض الاحيان تحتاج إلى إضافة بعض الميزات المفقودة والتي يمكن أن تحتاج إليها. في هذه الحالة سوف تكتب كود هذه الميزات بنفسك.

نصيحة: اكتب في قائمة المشاريع التي تود العمل عليها في المستقبل👇

My contributions todo list

👨‍💻 في هذا الدلبل سوف أشرح على باكج PHP Laravel تسمى laravel-carbon-macros وهي باكج توفر functions للتعامل مع الأجازات في كل أنحاء العالم, ولكن ينقصها دولة مصر.

قبل أن نبدأ بالكود يجب أن أُجيبك على سؤال مهم 👇

# لماذا أكتب كود بشكل مجاني للآخرين؟

الإجابة باختصار: أنت لا تكتب مجانًا بطريقة غير مباشرة! أنت ترد الجميل للمجتمع فبعد كل شيء معظم الباكجات أو أطر العمل مجانية للاستخدام.

بالاضافة إلى أن مساهماتك في البرامج مفتوحة المصدر عبارة عن CV on steroids أقوى شيء يمكن أن يظهر مهاراتك في العمل. سوف تزيد فرصة قبولك في أي عمل بنسبة 80% إذا كان لديك تاريخ مساهمة في البرامج مفتوحة المصدر.

# ابدأ

بعد اختيار الباكدج أو الريبو التي تود العمل عليها, قم بعمل fork 👇لها

fork

Forking هو مثل النسخ واللصق كأنك تقوم بنسخ الكود من مكان الى اخر في github

# 1- انسخ رابط الريبو

1

# 2- افتح ال Terminal أو vs code

  • اكتب هذا الأمر لنسخ الريبو
git clone https://github.com/nagi1/laravel-carbon-macros.git
  • استبدل nagi1 باسم مستخدم github الخاص بك و laravel-carbon-macros باسم الباكدج

  • سوف يظهر لك ملفات الريبو على جهازك 👇

2

# 3- تعرف على دليل المساهمة

اضمن قبول مساهمتك (PR) باتباعك للقواعد. معظم المشاريع مفتوحة المصدر لديها دليل مساهمة أو ما يسمى CONTRIBUTING.md احرص على قراءة هذا الدليل قبل البدء بأي مساهمة.

contributing.md

نصيحة: افتح الPRs المساهمات من المطورين الآخرين وخذ فكرة عن المشاكل التي تواجهم وطريقة كتابة الكود.

# ابدأ بتحميل depandancies

لأن هذا مشروع php laravel فهو يستخدم compoesr, في البداية يجب تحميل كل الـdependacices للمشروع لبدء العمل عليه

composer install

ملاحظة اذا كان هذا مشروع جافاسكربت سوف تستخدم npm او yarn.

# معرفة كيفية العمل مع الكود

ملاحظة مهمة: الكود التالي هو باستخدام php laravel ولكن لا تقلق اذا كنت لا تجيده لا مشكلة هو فقط لمجرد التمثيل ولكن الفكرة واحدة في أي لغة.

المطلوب: إضافة الأجازات المصرية لمصر

اذهب الى مجلد src في الغالب يوجد الكود بداخله

src

# اتبع العادات و التقاليد في الكود

Follow convention

في الكود أعلاه ☝ سوف ترى كيف أن المطورين الآخرين يتبعون طريقة بسيطة في تسمية المجلدات، عبارة عن اسم الدولة ثم كلمة أجازة بالانجليزي holidays وهذا ما سنفعله تحديدًا.

# الكود

افتح أي مجلد عشوائي وليكن CanadianDates.php وانسخ الكود

3

# أنشئ ملف جديد بطريقة التسمية المتبعة

نسخت CanadianDates.php الى EgyptianHolidays.php

4

# أضف مساهمتك

بدأت بإضافة أجازات مصر كما أضفت أيضًا بعض التعليقات للمطورين الآخرين.


    // https://en.wikipedia.org/wiki/Public_holidays_in_Egypt#National_holidays

    // This Trait will only contain fixed holidays as movable
    // holidays like Islamic New Year is occurs relative to
    // Islamic calendar, or may move to the end of the week

        Carbon::macro('isEgyptianChristmasDay', function () {
            /**  @var Carbon $this */

            return $this->month === 1 && $this->day === 7;
        });

# Test, Test and Test

من أهم أسباب عدم قبول مساهماتك على github هي أن المطورين لا يضيفون tests إلى الكود الذي يكتبونه أو يتوقعون أن المسؤول سوف يكتب الاختبار.

إضافة بعض الtests للكود 👇

8

# اعمل commit للشغل المنتهي

بعد الانتهاء من العمل على ميزة اعمل commet لحفظ نقطة العمل ولا تنسى ان تكتب رسالة جميلة 👇

commit

# اكتب docs للكود

سوف يكون من الرائع أن توثق الميزة التي عملت عليها لكي يعرف الشخص المسؤول عن الريبو أو المطورين الآخرين كيف يستخدمون الميزة بشكل فعال.

معظم الريبو مفتوحة المصدر تفضل وضع التوثيق في ملف readme.md أو في مجلد مخصص docs.

docs

فتحت مجلد docs ووجدت أن كل دولة لها ملفها الخاص, فنسخت ملف أي دولة وسميته egypt.md.

# ضع لمستك

فتحت احد ملفات الدول الاخرى وجدت ان التنسيق سيء نوعًا ما

docs

ليست أفضل دوكس في العالم 😂

ضفت لمستي على الدوكس فأصبح شكلها أجمل عن ذي قبل 👇

docs after

# اعمل test

شغل الـــ test للتأكد من أن كل شيء يعمل بشكل جيد.

Final test

# Commet and submit a PR

بعد الانتهاء من تنفيذ الميزة الخاصة بك وكتابة المستندات ، اعمل commit لشغلك.

حان الوقت لعمل PR:

  • اذهب للريبو المنسوخة وليس الريبو الاصلية ثم اضغط على زر Open pull request 👇

Contribute

Contribute-2

# اكتب عنوان واضح لعملك

Contribute-3

# انتظر الــ PR إلى أن تقبل أو ترفض

بعد تقديم طلبك PR سوف تنتظر بعض الوقت لحين قبول الشخص المسؤول عن الريبو لطلبك بناءًا على تواجدهم وقواعدهم لقبول الطلبات.

Contribute-4

من فضلك كن لطيف, وانتظر المسؤول عن الريبو أن يقبل الــ PR وإياك أن تسبام الissues كل شخص له حياة وجدوله المشغول.

Late PR

# الخاتمة

هذه نهاية هذا المقال ولكنها بداية مشوراك في البرامج مفتوحة المصدر, أتمنى أن تشجعك هذه المقالة على خطواتك الأولى تجاه مشاركة العالم كودك الرائع!

إذا استمتعت بقرائة المقالة اتركلي تعليق في قسم التعليقات 👇 أو أرسل لي رسالة على تويتر. @nagiworks (opens new window)

My Newsletter

I send out an email every so often about cool stuff I'm working on or launching. If you dig, go ahead and sign up!

No spam, only goldden nuggets 💎

التعليقات

Ahmed Nagi - Powerd By Vuepress . Hosted with GitHub and Netlify .