Skip to content

অধ্যায় ১১: ডিস্ট্রিবিউশন এবং ভার্সনিং

অভিনন্দন! আপনি একটি সম্পূর্ণ, কার্যকরী, সুরক্ষিত এবং পরীক্ষিত লারাভেল প্যাকেজ তৈরি করেছেন। এখন শেষ ধাপ—এই প্যাকেজটিকে বিশ্বের সামনে তুলে ধরা, যাতে যে কোনো ডেভেলপার একটি মাত্র composer require কমান্ড দিয়ে এটি ব্যবহার করতে পারে। এই অধ্যায়ে আমরা প্যাকেজ ডিস্ট্রিবিউশন এবং ভার্সনিংয়ের পেশাদার পদ্ধতিগুলো শিখব।

১১.১ ভার্সনিং: Semantic Versioning (SemVer)

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

ফরম্যাট: MAJOR.MINOR.PATCH (উদাহরণ: 1.0.2)

  • PATCH (যেমন 1.0.1 -> 1.0.2): যখন আপনি কোনো বাগ ফিক্স করেছেন যা আগের কোডের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ (backward-compatible)। যেমন, একটি হিসাবে ভুল ছিল, সেটি ঠিক করা।
  • MINOR (যেমন 1.1.0 -> 1.2.0): যখন আপনি নতুন কোনো ফিচার যোগ করেছেন যা backward-compatible। যেমন, ইনভয়েসে লোগো যোগ করার নতুন অপশন। পুরনো ব্যবহারকারীরা আপডেট করলে তাদের কোড ভাঙবে না।
  • MAJOR (যেমন 1.0.0 -> 2.0.0): যখন আপনি এমন কোনো পরিবর্তন করেছেন যা backward-compatible নয় (Breaking Change)। যেমন, কোনো মেথডের নাম পরিবর্তন করা (Invoice::create() কে Invoice::make() করা) অথবা কনফিগারেশন ফাইলের গঠন বদলে ফেলা।

এই নিয়ম মেনে চললে ব্যবহারকারীরা নিরাপদে আপনার প্যাকেজ আপডেট করতে পারে।

১১.২ Step 1: রিলিজের জন্য composer.json প্রস্তুত করা

পাবলিশ করার আগে, আমাদের composer.json ফাইলটিকে চূড়ান্ত করতে হবে।

  • description: প্যাকেজটি কী করে তার একটি সংক্ষিপ্ত এবং আকর্ষণীয় বর্ণনা দিন।
  • keywords: কিছু কীওয়ার্ড যোগ করুন যা দিয়ে মানুষ প্যাকেজটি খুঁজে পেতে পারে।
  • license: একটি ওপেন-সোর্স লাইসেন্স (যেমন "MIT") যোগ করা অত্যন্ত গুরুত্বপূর্ণ। এটি ছাড়া অনেক কোম্পানি আপনার প্যাকেজ ব্যবহার করতে চাইবে না।
  • authors: আপনার নাম এবং ইমেইল যোগ করুন।

একটি চূড়ান্ত composer.json দেখতে এমন হতে পারে:

json
{
    "name": "devmaster/invoice-builder",
    "description": "An elegant Laravel package to create, manage, and download invoices.",
    "keywords": ["laravel", "invoice", "billing", "pdf"],
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Your Name",
            "email": "your@email.com"
        }
    ],
    // ... বাকি অংশ
}

সবশেষে, composer validate কমান্ড দিয়ে নিশ্চিত হয়ে নিন যে আপনার composer.json ফাইলে কোনো ভুল নেই।

১১.৩ Step 2: প্যাকেজের আকার কমানো (.gitattributes)

যখন একজন ব্যবহারকারী আপনার প্যাকেজ ইনস্টল করে, তখন তার tests, phpunit.xml, বা .github ফোল্ডারের মতো ডেভেলপমেন্ট-সম্পর্কিত ফাইলগুলোর কোনো প্রয়োজন নেই। এগুলো প্যাকেজের ফাইলের আকার অপ্রয়োজনে বাড়িয়ে দেয়।

আমরা একটি .gitattributes ফাইল ব্যবহার করে এই অপ্রয়োজনীয় ফাইলগুলোকে চূড়ান্ত প্যাকেজ থেকে বাদ দিতে পারি।

আপনার প্যাকেজের রুট ডিরেক্টরিতে .gitattributes নামে একটি ফাইল তৈরি করে নিচের কোডটি লিখুন:

/tests export-ignore
/.github export-ignore
/docs export-ignore
phpunit.xml export-ignore

এর ফলে, এই ফাইল এবং ফোল্ডারগুলো আপনার গিট রিপোজিটরিতে থাকবে, কিন্তু কম্পোজার যখন প্যাকেজটি ডাউনলোড করবে, তখন এগুলো বাদ দিয়ে দেবে।

১১.৪ Step 3: গিট ট্যাগ দিয়ে ভার্সন তৈরি করা

Packagist (কম্পোজারের প্যাকেজ রেজিস্ট্রি) আপনার ব্রাঞ্চের নামের ওপর নির্ভর করে না, বরং গিট ট্যাগ (Git Tags)-এর ওপর ভিত্তি করে ভার্সন নম্বর শনাক্ত করে।

আসুন, আমাদের প্রথম স্টেবল ভার্সন v1.0.0 ট্যাগ করি।

১. সব পরিবর্তন কমিট এবং পুশ করুন:

bash
git add .
git commit -m "Prepare for initial release v1.0.0"
git push origin main

২. ট্যাগ তৈরি এবং পুশ করুন:

bash
# একটি নতুন ট্যাগ তৈরি করুন
git tag -a v1.0.0 -m "Initial stable release"

# ট্যাগটি আপনার রিমোট রিপোজিটরিতে (GitHub) পুশ করুন
git push origin --tags

এখন আপনার GitHub রিপোজিটরির "Releases" বা "Tags" সেকশনে গেলে আপনি v1.0.0 দেখতে পাবেন।

১১.৫ Step 4: Packagist.org-এ প্যাকেজ সাবমিট করা

Packagist হলো পিএইচপি প্যাকেজগুলোর কেন্দ্রীয় ভান্ডার। এখানেই আমরা আমাদের প্যাকেজটিকে লিস্ট করব।

  1. অ্যাকাউন্ট তৈরি: Packagist.org-এ যান এবং আপনার GitHub অ্যাকাউন্ট দিয়ে লগইন করুন।
  2. সাবমিট: উপরের মেনু থেকে "Submit" বাটনে ক্লিক করুন।
  3. রিপোজিটরি URL: আপনার প্যাকেজের GitHub রিপোজিটরির URL (যেমন https://github.com/YourUsername/invoice-builder) পেস্ট করুন এবং "Check" বাটনে ক্লিক করুন।
  4. ভ্যালিডেশন: Packagist আপনার composer.json ফাইলটি পরীক্ষা করবে। যদি কোনো সমস্যা থাকে, তবে সেটি দেখাবে।
  5. সাবমিট: সব ঠিক থাকলে, "Submit" বাটনে ক্লিক করুন।

অভিনন্দন! আপনার প্যাকেজ এখন পাবলিক। বিশ্বের যে কোনো লারাভেল ডেভেলপার এখন টার্মিনালে নিচের কমান্ডটি চালিয়ে আপনার প্যাকেজ ইনস্টল করতে পারবে:

bash
composer require devmaster/invoice-builder

১১.৬ Step 5: স্বয়ংক্রিয় আপডেট (Webhook)

বর্তমানে, আপনি যদি একটি নতুন ভার্সন (যেমন v1.0.1) ট্যাগ করে পুশ করেন, Packagist স্বয়ংক্রিয়ভাবে সেটি জানতে পারবে না। আপনাকে Packagist সাইটে গিয়ে ম্যানুয়ালি "Update" বাটনে ক্লিক করতে হবে।

এই প্রক্রিয়াটিকে স্বয়ংক্রিয় করার জন্য আমরা একটি Webhook সেটআপ করব।

  1. আপনার Packagist প্রোফাইল থেকে আপনার API Token খুঁজে বের করুন।
  2. আপনার প্যাকেজের GitHub রিপোজিটরিতে Settings > Webhooks > Add webhook-এ যান।
  3. Payload URL: https://packagist.org/api/github?username=YOUR_USERNAME (এখানে YOUR_USERNAME এর জায়গায় আপনার Packagist ইউজারনেম দিন)।
  4. Content type: application/json সিলেক্ট করুন।
  5. Secret: আপনার Packagist API টোকেনটি এখানে পেস্ট করুন।
  6. "Add webhook" বাটনে ক্লিক করুন।

এখন থেকে, আপনি যখনই GitHub-এ নতুন কোনো ট্যাগ পুশ করবেন, GitHub স্বয়ংক্রিয়ভাবে Packagist-কে জানিয়ে দেবে এবং আপনার প্যাকেজের নতুন ভার্সন কয়েক সেকেন্ডের মধ্যেই Packagist-এ লিস্ট হয়ে যাবে।


আপনি সফলভাবে একটি লারাভেল প্যাকেজ ডেভেলপমেন্টের পুরো চক্রটি সম্পন্ন করেছেন—একটি আইডিয়া থেকে শুরু করে সেটিকে তৈরি, টেস্টিং, সুরক্ষিত এবং অবশেষে সারা বিশ্বের ডেভেলপারদের জন্য প্রকাশ করা পর্যন্ত।

সৎ ক্রেডিট: লেখক AI, সম্পাদক আবুল হাসান