কীভাবে কন্ট্রিবিউট করবেন

কন্ট্রিবিউটর লাইসেন্স এগ্রিমেন্ট (CLA)

আপনার কোড প্যাচ গ্রহণ করার আগে, আপনাকে ব্যক্তিগত বা কর্পোরেট কন্ট্রিবিউটর লাইসেন্স এগ্রিমেন্ট (CLA) জমা দিতে হবে:

  • আপনি যদি কোনও ব্যক্তি হন যিনি আসল সোর্স কোড লিখছেন এবং আপনি যদি নিশ্চিত হন যে আপনি মেধা সম্পত্তির মালিক, তাহলে একটি ব্যক্তিগত CLA জমা দিন।
  • আপনি কোনও কোম্পানিতে কাজ করলে, আপনার কোম্পানিকে অবশ্যই একটি কর্পোরেট CLA জমা দিতে হবে যাতে বোঝা যায় যে আপনি এই ক্লায়েন্ট লাইব্রেরিতে আপনার কাজ কন্ট্রিবিউট করার অনুমতি পেয়েছেন।

উপযুক্ত CLA অ্যাক্সেস করতে এবং কীভাবে স্বাক্ষর করে তা ফেরত পাঠাতে হবে সেই সংক্রান্ত নির্দেশাবলী পেতে, উপরে দেওয়া দুটি লিঙ্কের মধ্যে যেকোনও একটি অনুসরণ করুন। আমরা এটি পেলে, আপনাকে কন্ট্রিবিউটরদের অফিসিয়াল তালিকায় যোগ করতে পারব।

প্যাচ জমা দেওয়ার ওভারভিউ

এই প্রোজেক্টে কোড কন্ট্রিবিউট করতে, এই সাধারণ ধাপগুলি অনুসরণ করুন:

  1. উপরে যেভাবে উল্লেখ করা আছে সেইভাবে কন্ট্রিবিউটর লাইসেন্স চুক্তিতে স্বাক্ষর করুন।
  2. আমাদের আলোচনা গ্রুপে যোগ দিন।
  3. আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট-আপ করুন।
  4. আমাদের GitHub Issue Tracker-এ আপনার প্রতিটি চেঞ্জসেটকে একটি সমস্যার (একটি ত্রুটির প্রতিবেদন বা ফিচার অনুরোধ) সাথে যুক্ত করুন। আগে থেকে কোনও সমস্যা না থাকলে, নতুন সমস্যা তৈরি করুন এবং সেটি নিজেকে অ্যাসাইন করুন।
  5. কোড চেক-আউট করুন, codereview.appspot.com-এ নতুন সমস্যা তৈরি করুন এবং কোড রিভিউ প্রসেস সম্পূর্ণ করুন। এইসব প্রসেসের জন্য বিস্তারিত নির্দেশাবলী নিচে দেওয়া হয়েছে।
  6. আপনার কোড পর্যালোচনা করার পরে এবং আপনি অনুমোদন পাওয়ার পরে, কোডটি কমিট করুন। আপনি অফিসিয়াল কন্ট্রিবিউটর না হলে, একজন কন্ট্রিবিউটর আপনার পরিবর্তন সেট অফিসিয়াল রিপোজিটরিতে নিয়ে আসেন।

আমরা নিম্নলিখিত টুল ও প্রসেস ব্যবহার করি:

  • আমরা ভার্সন কন্ট্রোল সিস্টেম হিসেবে Git ব্যবহার করি।
  • আমরা বিল্ড সিস্টেমের জন্য Maven ব্যবহার করি, এর পাশাপাশি বাইনারি ডিস্ট্রিবিউশন সিস্টেমও ব্যবহার করি।
  • কোড রিভিউয়ের জন্য আমরা codereview.appspot.com ব্যবহার করি। (তবে মনে রাখবেন যে codereview.appspot.com টুলে "সমস্যা" শব্দটির অর্থ হল কোড-রিভিউয়ের অনুরোধ, যেখানে GitHub Issue Tracker-এ "সমস্যা" হল ফিচার রিকোয়েস্ট বা ত্রুটির প্রতিবেদন।)

আপনি Eclipse ডেভেলপার হলে, .settings ডিরেক্টরিতে উল্লেখ করা প্রোজেক্ট-নির্দিষ্ট কোড ফর্ম্যাটিং ব্যবহার করুন যা Eclipse অটোমেটিক প্রসেস করে।

ডেভেলপমেন্ট এনভায়রনমেন্ট সেট-আপ করা হচ্ছে

পূর্বশর্ত

  1. Java 6 ইনস্টল করুন। আপনাকে হয়ত JAVA_HOME ভেরিয়েবল সেট করতে হবে।
  2. Maven ইনস্টল করুন। (এই ডকুমেন্ট ধরে নেয় যে Maven কমান্ড সম্পর্কে আপনার প্রাথমিক ধারণা আছে।)
  3. ঐচ্ছিক: Android SDK ইনস্টল করুন এবং Android-এর জন্য ইনস্টল লোকেশনে আপনার ANDROID_HOME ভেরিয়েবল সেট করুন।
  4. Git ইনস্টল করুন।

Git সেট-আপ করা

আপনার ডিফল্ট ডিসপ্লে নাম ও ইমেল আইডি সেট করতে git config কমান্ড ব্যবহার করুন:

git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"

Git থেকে GitHub-এর মাধ্যমে যাচাই করা হচ্ছে

GitHub থেকে কোড চেক আউট করতে, আপনাকে HTTP বা SSH ব্যবহার করে GitHub-এর মাধ্যমে যাচাইকরণ করতে হবে। নিচের নির্দেশাবলী অনুসরণ করার আগে, HTTPS বা SSH ক্লোনিং কীভাবে শুরু করবেন সেই সম্পর্কে GitHub-এর নির্দেশাবলী পড়ুন। আপনি যদি সাধারণভাবে Git সম্পর্কে আরও জানতে চান, তাহলে Pro Git একটি ভালো রিসোর্স।

কোড চেক করা হচ্ছে

HTTPS ব্যবহার করা

ডেভেলপমেন্ট "মাস্টার" ব্রাঞ্চে লাইব্রেরি রিপোজিটরি চেক করতে, এই কমান্ড রান করুন:

git clone https://github.com/google/google-api-java-client.git

SSH ব্যবহার করা

ডেভেলপমেন্ট "মাস্টার" ব্রাঞ্চে লাইব্রেরি রিপোজিটরি চেক আউট করতে, GitHub রিপোজিটরিতে আপনার লেখার অ্যাক্সেস আছে কিনা তা নিশ্চিত করুন, তারপর নিম্নলিখিত কমান্ডটি রান করুন:

git clone git@github.com:google/google-api-java-client.git

বিকল্প ব্রাঞ্চে পাল্টাতে, যেমন ১.১২:

git checkout --track origin/1.12

মাস্টার ব্রাঞ্চে ফিরে যেতে:

git checkout master

GitHub রিপোজিটরি থেকে লেটেস্ট পরিবর্তনগুলি পুল করতে এবং আপনার লোকাল ওয়ার্কিং ট্রিকে লেটেস্ট কমিটে আপডেট করতে:

git pull

Maven

Google Play Services ইনস্টল করুন

প্রথমবার প্রোজেক্ট সেট-আপ করার সময় আপনাকে google-play-services.jar ফাইল ইনস্টল করতে হবে। এটি করতে:

  1. Eclipse চালু করে Window > Android SDK Manager বেছে নিন অথবা কমান্ড লাইনে android রান করুন।
  2. প্যাকেজ তালিকার একদম নিচে স্ক্রল করে এক্সট্রা > Google Play পরিষেবা বিকল্প বেছে নিন।
mvn install:install-file \
           -Dfile=$ANDROID_HOME/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar \
           -DgroupId=com.google.android.google-play-services \
           -DartifactId=google-play-services \
           -Dversion=1 \
           -Dpackaging=jar

প্রোজেক্ট কম্পাইল করুন

mvn clean install

Maven কম্পাইল করা বাইনারি লোকাল রিপোজিটরিতে ইনস্টল করে (যেমন ~/.m2/repository)। এটি Maven সেন্ট্রাল রিপোজিটরি থেকে ফেচ করার আগে সেই রিপোজিটরিতে বাইনারি সার্চ করে।

মনে রাখবেন: এই লাইব্রেরি google-http-java-client এবং google-oauth-java-client-এর উপর নির্ভর করে। তিনটি লাইব্রেরিরই নতুন ভার্সন নিয়ে কাজ করার সময়, যা এখনও Maven সেন্ট্রালে রিলিজ করা হয়নি, আপনাকে অবশ্যই নিম্নলিখিত ক্রমে সেগুলি কম্পাইল করতে হবে:

  1. google-http-java-client
  2. google-oauth-java-client
  3. google-api-java-client এই ক্রমে কম্পাইল করলে Maven ডিপেন্ডেন্ট লাইব্রেরি কম্পাইলেশনের জন্য কম্পাইল করা বাইনারি বেছে নেয়।

কোড রিভিউ প্রসেস

upload.py স্ক্রিপ্ট ডাউনলোড করা হচ্ছে

upload.py স্ক্রিপ্ট ডাউনলোড করুন এবং বিকল্প হিসেবে আপনার PATH-এ এটি যোগ করুন।

আপনি প্রথমবার upload.py রান করলে, এটি আপনাকে একটি অ্যাপ্লিকেশন-নির্দিষ্ট পাসওয়ার্ড জিজ্ঞাসা করে:

Email (login for uploading to codereview.appspot.com): your_email_address@yourdomain.com
Password for your_email_address@yourdomain.com: 

পর্যালোচনার জন্য আপনার কোড প্রস্তুত করা হচ্ছে

পর্যালোচনার জন্য কোড পাঠানোর আগে, আপনার কোডে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি সংক্রান্ত সমস্যা ধরতে আপনাকে অবশ্যই Clirr চালাতে হবে। কোনও সমস্যা রিপোর্ট করা হলে, আপনাকে সেটি সমাধান করতে হবে অথবা clirr-ignored-differences.xml ফাইল আপডেট করতে হবে।

mvn -q clirr:check

কোডে বাগ ধরতে আপনাকে FindBugs টুলও চালাতে হবে। কোনও সমস্যা রিপোর্ট করা হলে, আপনাকে হয় সেটি সমাধান করতে হবে অথবা findbugs-exclude.xml ফাইল আপডেট করতে হবে। (মনে রাখবেন যে FindBugs খুব ধীর গতিতে কাজ করে।)

mvn findbugs:check

আপনার পরিবর্তন সব টেস্টে পাস করলে, পরিবর্তনটি ইন্ডেক্সে (Git স্টেজিং এরিয়া) যোগ করুন:

git add .

আপনি যেসব ফাইল যোগ, পরিবর্তন বা মুছে দিয়েছেন সেগুলি ইনডেক্সে দেখা যাচ্ছে কিনা তা ডবল-চেক করুন:

git status

git status আউটপুটে, "যেসব পরিবর্তন করতে হবে" নামের বিভাগটি চেক করুন।

কোড রিভিউ শুরু করা হচ্ছে

পর্যালোচনার জন্য রেডি হলে, codereview.appspot.com-এ নতুন সমস্যা তৈরি করুন:

upload.py --rev=HEAD --base_url=https://github.com/google/google-api-java-client --send_mail -r reviewer@somedomain --cc ...

আপনি আরও পরিবর্তন করার পরে, আপনার নতুন পরিবর্তনগুলি স্টেজ করুন। নতুন প্যাচ আপলোড করতে, যেমন, ১২৩৪৫৬ নম্বর সমস্যার জন্য, নিম্নলিখিত কমান্ড রান করুন:

upload.py --rev=HEAD -i 123456

আরও বিকল্পের জন্য, upload.py --help রান করুন।

আপনি যদি সাধারণ GitHub ওয়ার্কফ্লো পছন্দ করেন, তাহলে আপনি হয়ত GitHub রিপোজিটরি ফর্ক করেছেন এবং এই নতুন ফিচার বা ত্রুটি সমাধানের জন্য একটি ব্রাঞ্চ তৈরি করেছেন। আপনার নিজের ফর্ক থেকে কোড রিভিউয়ের অনুরোধ পাঠানোর সময়, আপনার ফর্ক আপস্ট্রিম রিপোজিটরির সাথে সিঙ্ক করা আছে কিনা তা ভাল করে দেখে নিন। আরও তথ্যের জন্য, কীভাবে ফর্ক সিঙ্ক করতে হয় সেই বিষয়ে GitHub সহায়তা দেখুন।

এছাড়াও, আপনি স্থানীয়ভাবে কমিট করা চেঞ্জসেটের জন্য upload.py ব্যবহার করতে পারবেন।

upload.py --rev=upstream/master:HEAD --base_url=https://github.com/google/google-api-java-client --send_mail -r reviewer@somedomain --cc ...

কোড রিভিউয়ার

আপনি যদি কোড রিভিউয়ার হন, তাহলে পরিবর্তন সেট অনুমোদন করার আগে সেগুলি ইমপোর্ট ও টেস্ট করুন, এবং তারপর পরিবর্তন সেট রিমোট রিপোজিটরিতে কমিট ও পুশ করুন।

পরিবর্তন সেট ইমপোর্ট করা হচ্ছে

সমস্যা আগে থেকে ধরতে, রিমোট রিপোজিটরি থেকে আপনার ওয়ার্কিং ট্রিতে লেটেস্ট পরিবর্তন পুল করতে ভুলবেন না। আপনার ওয়ার্কিং ট্রি পরিষ্কার এবং ইনডেক্স খালি আছে কিনা তা নিশ্চিত করুন।

রিমোট রিপোজিটরি থেকে লেটেস্ট কমিট পুল ও মার্জ করতে:

git pull

আপনার ওয়ার্কিং ট্রি ও ইন্ডেক্সে কী আছে তা চেক করতে:

git status

আপনার স্থানীয় Git ক্লোনে প্যাচ ইমপোর্ট করতে:

  1. codereview.appspot.com-এর মধ্যে সমস্যাটি খুলুন।
  2. যে প্যাচ নিয়ে প্রশ্ন উঠেছে, সেটির স্পেসিফিকেশনের উপরে ডানদিকে "র ডাউনলোড করুন" বিকল্পটি খুঁজুন।
  3. ইমপোর্ট করার জন্য ফাইলের URL পেতে "raw" বিকল্পে ক্লিক করুন।
  4. আপনার লোকাল মেশিনে র ডিফারেন্স ফাইলটি সেভ করুন, যেমন issue123456.diff।
  5. আপনার লোকাল Git ওয়ার্কিং ট্রিতে যান এবং patch কমান্ড ব্যবহার করে ডিফারেন্স প্রয়োগ করুন:
patch -p1 < issue123456.diff

আপনি সঠিক diff ইমপোর্ট করেছেন কিনা তা ডবল-চেক করতে, আপনার ওয়ার্কিং ট্রিতে git diff করুন।

পরিবর্তনের সেট পরীক্ষা করা হচ্ছে

টেস্ট রান ও ইনস্টল করতে, এই কমান্ড ব্যবহার করুন:

mvn clean install checkstyle:check

codereview.appspot.com-এ পরিবর্তন সেট অনুমোদন করা হচ্ছে

সাধারণত, কোড রিভিউয়ার কোডটি প্রস্তুত বলে সন্তুষ্ট না হওয়া পর্যন্ত কোডটি GitHub রিপোজিটরিতে পুশ করা যায় না। সেই সময়, "LGTM" (আমার কাছে ঠিক আছে) মেসেজ দিয়ে উত্তর দেওয়াটাই রীতি।

কোড কমিট করা হচ্ছে

গুরুত্বপূর্ণ: আপনার কোড কমিট করার আগে, আপনার ওয়ার্কিং ট্রিতে লেটেস্ট পরিবর্তনগুলি পুল করুন এবং GitHub রিপোজিটরি থেকে লেটেস্ট কমিটে আপনার ওয়ার্কিং ট্রি আপডেট করুন:

git pull

কোনও দ্বন্দ্ব থাকলে, সেগুলি সমাধান করুন, তারপর সব টেস্ট আবার পাস করার ব্যাপারে নিশ্চিত হয়ে নিন।

লোকালি কোড কমিট করতে:

git commit

নিচের মতো একটি মেসেজ লিখুন (ধরে নেওয়া হচ্ছে যে আপনি GitHub ইস্যু ট্র্যাকারে তালিকাভুক্ত ইস্যু # ১২৩ সমাধান বা প্রয়োগ করছেন):

#123: NullPointerException when passing null to processFoo()
http://codereview.appspot.com/123456/

প্রথম কোলন ও বিবরণের আগে:

  • এটি যদি Issue Tracker-এ কোনও সমস্যার সমাধান হয়, তাহলে দেখানো অনুযায়ী সমস্যার নম্বর অন্তর্ভুক্ত করুন।
  • কোনও নির্দিষ্ট ব্রাঞ্চের জন্য এই পরিবর্তন করা হলে, ব্রাঞ্চ নম্বর অন্তর্ভুক্ত করুন।
  • আপনি এই কমিটের committer হবেন, তবে যিনি পরিবর্তন করেছেন তাকে author (--author=<author>) হিসেবে চিহ্নিত করে ক্রেডিট দিন।

বিবরণের পরে, codereview সাইটে সমস্যার লিঙ্ক সবসময় অন্তর্ভুক্ত করুন। এই লিঙ্কটি গুরুত্বপূর্ণ কারণ এটি ছাড়া, কোনও কমিটের সাথে সম্পর্কিত কোড রিভিউ খুঁজে বের করার কোনও সুবিধাজনক উপায় নেই, যা আলোচনার ইতিহাস বজায় রাখার জন্য উপযোগী।

GitHub রিপোজিটরিতে পরিবর্তন পুশ করতে:

git push

git push চলাকালীন আপনি যদি আপডেট বাতিল হওয়ার ব্যাপারে কোনও ত্রুটি মেসেজ পান (সম্ভবত আপনি git pull রান করতে ভুলে গেছেন), তাহলে লেটেস্ট পরিবর্তনের সাথে কীভাবে মার্জ করবেন এবং রিমোট রিপোজিটরিতে আপনার পরিবর্তন পুশ করবেন তা এখানে দেওয়া হল:

git pull
git commit
git push

সমস্যাটি বন্ধ করা হচ্ছে

কোড-রিভিউ টুলে সমস্যাটি বন্ধ করতে ভুলবেন না। এটি করতে:

  1. codereview.appspot.com-এ সমস্যাটি বেছে নিন।
  2. "Id"-এর আগে উপরে বাঁদিকে থাকা "X" চিহ্নে ক্লিক করুন।

চেঞ্জসেট আনপ্যাচ করা হচ্ছে

কোনও কারণে আপনি ইম্পোর্ট করা পরিবর্তন সেট কমিট না করার সিদ্ধান্ত নিলে, এটি থেকে মুক্তি পেতে নিম্নলিখিত কমান্ড ব্যবহার করুন। সাবধান: এটি আপনার লোকাল পরিবর্তনগুলি মুছে দেয়।

git checkout -- .