বিকশিত সফ্টওয়্যার ডেভেলপমেন্ট ল্যান্ডস্কেপে, সংস্করণের ধারাবাহিকতা বজায় রাখা এবং রিলিজ প্রক্রিয়া স্বয়ংক্রিয় করা আগের চেয়ে বেশি গুরুত্বপূর্ণ। প্রবেশ করুন
এই নিবন্ধটি একটি বিশদ এবং বিস্তৃত নির্দেশিকা অফার করে, ধাপে ধাপে নির্দেশনা প্রদান করে আপনার ওয়ার্কফ্লোতে সিমান্টিক রিলিজকে নিরবিচ্ছিন্নভাবে একীভূত করার জন্য, বিশেষভাবে যারা পাবলিক নন-স্কোপড প্যাকেজ ব্যবহার করছেন তাদের জন্য তৈরি করা হয়েছে। ডুব দিন এবং সফ্টওয়্যার রিলিজের সুবিন্যস্ত পদ্ধতি আবিষ্কার করুন।
আমি যখন আমার তৈরি
এটি পেরেক দিতে, আসুন পাবলিক প্যাকেজগুলি সঠিকভাবে প্রকাশ করার জন্য ধাপে ধাপে অভিজ্ঞতার মধ্য দিয়ে যাই
আমাদের প্যাকেজ বাস্তবায়নে ঝাঁপিয়ে পড়ার আগে, এটির জন্য সঠিক নামটি খুঁজে বের করা ভাল। নামটি ইতিমধ্যে নেওয়া হয়নি তা নিশ্চিত করতে — my_package_name
চেক করুন এবং আপনার প্যাকেজের জন্য এটি নিন। আমি "টোকি" বেছে নিলাম। সেই দিক থেকে, প্যাকেজের নাম সংরক্ষণ করা অসম্ভব। npm-এ নামের জন্য, আপনাকে প্যাকেজটি প্রকাশ করতে হবে।
উদ্দেশ্য হল একটি সহজবোধ্য প্যাকেজ তৈরি করা যা কনসোলে সামগ্রী আউটপুট করে। আমাদের নিশ্চিত করতে হবে যে আমরা এটি ইনস্টল করতে পারি এবং এটি চালাতে পারি। বিল্ড প্রক্রিয়ার জন্য, আসুন সহজ ব্যবহার করি
এই নিবন্ধের সময়, আমি প্যাকেজের নাম ব্যবহার করব tokky
। প্রাথমিক তথ্য দিয়ে package.json
তৈরি করি।
mkdir tokky && cd tokky && npm init -y
কমান্ডটি কার্যকর করার পরে, সিস্টেমটি প্রকল্পের জন্য একটি ডিফল্ট package.json
ফাইল তৈরি করেছে, যা দেখতে এইরকম:
{ "name": "tokky", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
এই নির্দেশিকায়, package.json
ফাইলটি সঠিক কনফিগারেশন নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। এই মুহুর্তে, আমাদের প্যাকেজের জন্য নোড সংস্করণ নির্দিষ্ট করা যাক:
echo "v18" > .nvmrc
এবং নিম্নলিখিতগুলির সাথে নির্দিষ্ট সংস্করণটি সক্রিয় করুন:
nvm use
README.md
ফাইলের জন্য:
echo "# Tokky\n\nA simple zero dependency logger for node js." > README.md
অবশেষে, উন্নয়ন নির্ভরতা ইনস্টল করুন:
npm i -D esbuild eslint prettier
আমাদের প্রাথমিক কনফিগারেশনে, আমাদেরকে package.json
এ বেশ কয়েকটি মূল পয়েন্ট অ্যাড্রেস করতে হবে:
main
: এটি মডিউলের জন্য প্রাথমিক এন্ট্রি পয়েন্ট নির্ধারণ করে।bin
: এখানে, আপনি আপনার মডিউল প্রদান করে যে কোনো এক্সিকিউটেবল উল্লেখ করবেন।files
: এতে ফাইল প্যাটার্নের একটি অ্যারে থাকা উচিত যা প্যাকেজটি প্যাক করার সময় অন্তর্ভুক্ত করা হবে এবং পরবর্তীতে npm রেজিস্ট্রিতে প্রকাশিত হবে।private
: আমাদের প্যাকেজটি সর্বজনীন হওয়ার উদ্দেশ্যে এটি false
হিসাবে সেট করা হয়েছে তা নিশ্চিত করুন৷publishConfig
: এর জন্য অ্যাক্সেস public
সেট করা উচিত।
এই কনফিগারেশনের পরে, আপনার package.json
নিম্নলিখিতগুলির অনুরূপ হওয়া উচিত:
{ "name": "tokky", "version": "1.0.0", "description": "Node js logger package", "main": "dist/index.js", "scripts": { "build": "esbuild src/index.js --bundle --platform=node --format=cjs --minify --outfile=dist/index.js", }, "files": [ "dist" ], "bin": { "tokky": "./dist/index.js" }, "keywords": [ "logger", "nodejs", "tokky" ], "private": false, "author": { "name": "Anton Kalik", "email": "[email protected]", "url": "https://idedy.com" }, "publishConfig": { "access": "public" }, "license": "MIT", "engines": { "node": "18.xx" }, "devDependencies": { "esbuild": "^0.19.2", "eslint": "^8.49.0", "prettier": "^3.0.3" } }
প্রাথমিক সেটআপের পরে package.json
উপরন্তু, দুটি উপেক্ষা ফাইল যোগ করা যাক:
.idea node_modules dist
.gitignore
এবং npm এর জন্য:
.idea /src/ /node_modules/ /test/ /.nvmrc .github/
.npmignore
অবশেষে, আমি ESLint এর জন্য আমার সেটআপের রূপরেখা দেব। যাইহোক, মনে রাখবেন আপনার প্যাকেজের নির্দিষ্ট প্রয়োজনীয়তার উপর ভিত্তি করে কনফিগারেশন পরিবর্তিত হতে পারে।
module.exports = { env: { browser: true, commonjs: true, es2021: true, node: true, }, extends: "eslint:recommended", overrides: [ { env: { node: true, }, files: ["src/**/*.js", ".eslintrc.{js,cjs}"], parserOptions: { sourceType: "script", }, }, ], parserOptions: { ecmaVersion: "latest", }, rules: {}, };
.eslintrc.js কনফিগারেশন
এরপরে, গিটহাবে যান এবং একটি নতুন সংগ্রহস্থল স্থাপন করুন। আপনার প্যাকেজের পরে এটির নাম দিন।
পরবর্তী কমান্ডগুলি সম্পাদন করে এগিয়ে যান:
git init git add . git commit -m "first commit" git branch -M main git remote add origin [email protected]:<your_github_username>/tokky.git git push -u origin main
এর পরে, আসুন একটি মৌলিক অ্যাপ্লিকেশন তৈরি করি এবং এটি নির্মাণের জন্য সেট আপ করি। src
ফোল্ডারের ভিতরে, একটি index.js
ফাইল তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু দিয়ে এটি পপুলেট করুন:
#!/usr/bin/env node const os = require('os'); const username = os.userInfo().username; if (process.argv[2] === 'hi') { console.log(`Hello ${username}`); }
প্যাকেজ উদাহরণের জন্য সহজ স্ক্রিপ্ট
ধারণাটি সহজবোধ্য: my_package_name hi
চালানো হলে "হ্যালো [ব্যবহারকারীর নাম]" প্রদর্শন করা উচিত।
এই কার্যকারিতা যাচাই করতে, কমান্ডটি সরাসরি আপনার সংগ্রহস্থল থেকে ব্যবহার করে চালান:
node src/index.js hi
যদি আউটপুট প্রত্যাশার সাথে সারিবদ্ধ হয়, তবে উত্সটি তৈরি করার সময় এসেছে:
npm run build
এই কমান্ডটি সফলভাবে চালানোর ফলে একটি minified index.js
ফাইল ধারণকারী একটি dist
ফোল্ডার তৈরি হবে।
সিমান্টিক রিলিজ এক্সিকিউট করুন, যা ভার্সন বাম্প নির্ধারণ করবে এবং কমিট মেসেজের উপর ভিত্তি করে রিলিজ প্রক্রিয়া পরিচালনা করবে, সঠিকভাবে কাজ করার জন্য এনভায়রনমেন্ট ভেরিয়েবল ( GITHUB_TOKEN
, NPM_TOKEN
) প্রয়োজন। টোকেনগুলি GitHub গোপনীয়তা থেকে আনা হয়, নিশ্চিত করে যে সেগুলি গোপনীয় থাকবে৷
GITHUB_TOKEN
সেট করতে, এখানে নেভিগেট করুন:
একটি ড্রপডাউন ব্যবহার করে টোকেন তৈরি করুন। নতুন ব্যক্তিগত অ্যাক্সেস টোকেনে ক্লিক করুন (ক্লাসিক) এবং ছবির মতো অনুমতি সেট করুন।
নীচে দেখানো হিসাবে আপনার প্যাকেজ নাম ব্যবহার করুন:
একবার তৈরি হয়ে গেলে, টোকেন মানটি অনুলিপি করুন এবং এটি গোপনীয় রাখুন — এটি অন্যদের সাথে শেয়ার না করা গুরুত্বপূর্ণ। সাময়িকভাবে এই টোকেনটি নিরাপদে সংরক্ষণ করুন, কারণ শব্দার্থিক রিলিজ CLI-এর জন্য আমাদের শীঘ্রই এটির প্রয়োজন হবে।
NPM_TOKEN
জেনারেট করতে আপনার প্রথমে একটি অ্যাকাউন্ট চালু করতে হবে৷
https://www.npmjs.com/settings/<your_user_name>/tokens/new
এবং "প্রকাশ" বিকল্পের সাথে একটি "ক্লাসিক" টোকেন তৈরি করুন।
টোকেনের উত্পন্ন মান অনুলিপি করুন এবং GitHub গোপনীয়তায় নেভিগেট করুন:
https://github.com/<your_user_name>/<your_repo_name>/settings/secrets/actions/new
এবং সংগ্রহস্থলের গোপনীয়তায় NPM_TOKEN
হিসাবে নতুন গোপন রাখুন:
আমাদের গোপনীয়তাগুলি এখন সেট আপ করার সাথে, আমরা গিটহাব অ্যাকশনগুলি কনফিগার করতে পারি।
আমাদের প্রক্রিয়াগুলি স্বয়ংক্রিয় করতে, আমরা গিটহাব অ্যাকশন ব্যবহার করতে যাচ্ছি। এটি একটি CI/CD টুল যা GitHub-এর মধ্যে সংহত। এটি ডেভেলপারদের তাদের গিটহাব রিপোজিটরি থেকে সরাসরি ওয়ার্কফ্লো স্বয়ংক্রিয় করতে দেয়, যেমন অ্যাপ্লিকেশন তৈরি করা, পরীক্ষা করা এবং স্থাপন করা। YAML ফাইলগুলিতে ওয়ার্কফ্লোগুলি সংজ্ঞায়িত করে, ব্যবহারকারীরা নির্দিষ্ট ইভেন্টগুলির উপর ভিত্তি করে কাজগুলি ট্রিগার করতে পারে যেমন পুশ এবং পুল অনুরোধ বা নির্ধারিত সময়ের, সফ্টওয়্যার বিকাশ প্রক্রিয়াটিকে আরও দক্ষ এবং স্বয়ংক্রিয় করে তোলে।
শুরু করতে, আপনার প্রকল্পের মূলে একটি .github
ডিরেক্টরি তৈরি করুন। এই ডিরেক্টরির মধ্যে, একটি workflows
সাবফোল্ডার স্থাপন করুন।
এখানে, release.yml
নামে আমাদের কনফিগারেশন ফাইলটি তৈরি করুন এবং এটিকে নিম্নলিখিত বিষয়বস্তু দিয়ে পূরণ করুন:
name: Release package on: push: branches: - main jobs: release: runs-on: ubuntu-latest if: ${{ github.ref == 'refs/heads/main' }} steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: "18" - name: Install dependencies run: npm ci - name: Build run: npm run build - name: Semantic Release run: npm run semantic-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
এই কর্মপ্রবাহ মূল শাখায় একটি পুশ ইভেন্টকে ট্রিগার করে। এটি সর্বশেষ উবুন্টু ভার্চুয়াল মেশিন গিটহাবের অফারগুলিতে কাজ চালানোর জন্য কনফিগার করা হয়েছে। যদিও প্রতিটি কাজের মধ্যে অনুসন্ধান করা জরুরী নয়, আসুন কিছু নির্দিষ্ট বিষয়ের উপর আলোকপাত করা যাক। শেষের দিকে, লক্ষ্য করুন আমরা কীভাবে npm run semantic-release
মনোনীত টোকেন ব্যবহার করে আহ্বান করি।
স্বয়ংক্রিয় রিলিজ প্রক্রিয়ার জন্য, আমরা শব্দার্থিক রিলিজ ব্যবহার করতে যাচ্ছি। এই টুলটি কমিট মেসেজ শব্দার্থবিদ্যার উপর ভিত্তি করে সংস্করণ এবং প্যাকেজ প্রকাশনা পরিচালনা করে। এটি সংস্করণ বাম্প (প্রধান, ছোট বা প্যাচ) নির্ধারণের জন্য শব্দার্থিক সংস্করণ (SemVer) এর নিয়ম অনুসরণ করে। প্রতিশ্রুতি বার্তাগুলি বিশ্লেষণ করে এটি সংস্করণের ম্যানুয়াল পদক্ষেপগুলিকে সরিয়ে দেয়, সামঞ্জস্যপূর্ণ সংস্করণ নম্বরগুলি নিশ্চিত করে এবং প্রকাশের প্রক্রিয়াটিকে স্ট্রিমলাইন করে। এটা সেট আপ করা যাক.
যে সেটআপের জন্য, আমরা ব্যবহার করব
npx semantic-release-cli setup
এবং প্রশ্নগুলি অনুসরণ করুন:
% npx semantic-release-cli setup ? What is your npm registry? https://registry.npmjs.org/ ? What is your npm username? your_user_name ? What is your npm password? [hidden] ? What is your NPM two-factor authentication code? 00000000 ? Provide a GitHub Personal Access Token (create a token at https://github.com/s ettings/tokens/new?scopes=repo) ghp_your_token_here ? What CI are you using? Github Actions
আপনার কাছে ইতিমধ্যেই আপনার ব্যক্তিগত টোকেন থাকা উচিত। অনুরোধ করা হলে কেবল এটি ইনপুট করুন। একইভাবে, আমরা যে GitHub অ্যাকশনগুলি সেট আপ করেছি তা NPM_TOKEN
ব্যবহার করবে যা আমরা পূর্বে সংগ্রহস্থলের গোপনীয়তায় প্রতিষ্ঠিত করেছি। আপনি যদি এখন আপনার package.json
চেক করেন, তাহলে সংস্করণটি এইভাবে প্রদর্শিত হবে:
"version": "0.0.0-development",
এবং নতুন স্ক্রিপ্ট:
"semantic-release": "semantic-release"
যেটি সিমান্টিক রিলিজ CLI দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল। আমাদের এই স্ক্রিপ্টটি নিম্নরূপ উন্নত করতে হবে:
"semantic-release": "semantic-release --branches main"
এটি নির্দেশ করে যে রিলিজগুলি শুধুমাত্র প্রধান শাখা থেকে তৈরি করা হবে।
অতিরিক্তভাবে, শব্দার্থিক রিলিজ আপনার package.json
এ repository
ক্ষেত্রের উপর ভিত্তি করে একটি বিবরণ তৈরি করে। এই ক্ষেত্রটি প্যাকেজের সোর্স কোডের অবস্থান সম্পর্কে বিশদ বিবরণ প্রদান করে।
"repository": { "type": "git", "url": "https://github.com/<your_github_username>/your_github_repo.git" }
এখন, এর সাথে আমাদের সমস্ত পরিবর্তনগুলিকে এগিয়ে দেওয়া যাক:
git add . && git commit -m "semantic release" && git push
শব্দার্থিক রিলিজ ভার্সন বাম্পের ধরন (মেজর, মাইনর, বা প্যাচ) নির্ধারণ করতে এবং চেঞ্জলগ তৈরি করতে কাঠামোবদ্ধ কমিট বার্তার কনভেনশনের উপর নির্ভর করে। এই কমিট কনভেনশনকে প্রায়ই "প্রচলিত কমিট" ফরম্যাট বলা হয়।
এই কনফিগারেশনের জন্য, আমাদের বেশ কয়েকটি প্লাগইন লাগবে। নিশ্চিত করুন যে আপনার package.json
নিম্নলিখিত সামগ্রী রয়েছে:
"release": { "branches": [ { "name": "main" } ], "plugins": [ [ "@semantic-release/commit-analyzer", { "releaseRules": [ { "type": "feat", "release": "minor" }, { "type": "fix", "release": "patch" }, { "type": "refactor", "release": "patch" }, { "type": "build", "release": "patch" }, { "type": "chore", "release": "patch" }, { "type": "minor", "release": "patch" } ] } ], "@semantic-release/release-notes-generator", "@semantic-release/npm", "@semantic-release/github", [ "@semantic-release/changelog", { "changelogFile": "CHANGELOG.md" } ] ] }
package.json
সেটআপ কমিট ফরম্যাট টুলের জন্য, আমরা ব্যবহার করতে যাচ্ছি
npx commitizen init cz-conventional-changelog --save-dev --save-exact
এই কমান্ডটি কয়েক মিনিট সময় নেবে। তারপর একটি নতুন স্ক্রিপ্ট দিয়ে আপনার package.json
আপডেট করুন:
"scripts": { // ... "commit": "cz" },
এবং এটি সেই স্ক্রিপ্টটি ব্যবহার করার সময়। git add .
, তারপর npm run commit
চালান এবং আপনার প্রতিশ্রুতির জন্য প্রয়োজনীয় বিবরণ প্রদান করুন।
এটি দেখতে কেমন তা এখানে:
? Select the type of change that you're committing: feat: A new feature ? What is the scope of this change (eg component or file name): (press enter to skip) commit ? Write a short, imperative tense description of the change (max 86 chars): (14) add commitizen ? Provide a longer description of the change: (press enter to skip) ? Are there any breaking changes? No ? Does this change affect any open issues? No
এর পরে, একটি git push
করুন।
GitHub অ্যাকশনে, আপনি দেখতে পাবেন যে আমাদের প্রতিশ্রুতি ব্যর্থ হয়েছে কারণ আমরা এখনও স্বয়ংক্রিয় প্রতিশ্রুতি বার্তা প্রক্রিয়ার জন্য বাকি প্যাকেজগুলি ইনস্টল করিনি।
npm i -D @semantic-release/commit-analyzer @semantic-release/release-notes-generator @semantic-release/npm @semantic-release/changelog
একটি গুরুত্বপূর্ণ পদক্ষেপ, প্রায়শই বেশিরভাগ রেফারেন্সে উপেক্ষা করা হয়, কর্মপ্রবাহের অনুমতিগুলি সেট করা হয়। https://github.com/<your_user_name>/tokky/settings/actions
এ নেভিগেট করুন এবং GitHub ক্রিয়াকলাপ পড়তে এবং লিখতে উভয়ের অনুমতি দেওয়ার জন্য অনুমতিগুলি কনফিগার করুন।
এর পরে, আসুন কিছু পরিবর্তন করি। একটি নির্দিষ্ট কীওয়ার্ড দিয়ে প্রতিশ্রুতিবদ্ধ, feat:
, আপনার বার্তা অনুসরণ করুন।
git add . && git commit -m "feat: my feature commit" && git push
আপনি কি package.json
এর মধ্যে releaseRules
স্মরণ করেন? এই নিয়মগুলি নির্দেশ করে যে আমরা কীভাবে আমাদের প্যাকেজ প্রকাশের সংস্করণ বৃদ্ধি করি। এটির সাথে, আপনি বিশেষ কীওয়ার্ড যেমন feat
, fix
, refactor
, ইত্যাদি ব্যবহার করে একটি পুল অনুরোধ তৈরি করতে পারেন। একবার এই পুল অনুরোধটি অনুমোদিত হয়ে গেলে এবং পরবর্তীতে প্রধান শাখায় একত্রিত হলে, এটি একটি ট্রিগার শুরু করবে। এই ট্রিগার তারপর GitHub অ্যাকশন সক্রিয় করে, রিলিজ প্রক্রিয়া স্বয়ংক্রিয় করে এবং নিশ্চিত করে যে আপনার প্যাকেজ নির্বিঘ্নে আপডেট করা হয়েছে।
প্যাকেজটি সফলভাবে প্রকাশিত হয়েছে, এবং সম্পূর্ণ প্রক্রিয়াটি দক্ষতার জন্য স্বয়ংক্রিয়ভাবে করা হয়েছে। প্রকাশনা নিশ্চিত করতে, আপনার npm সেটিংসে যান https://www.npmjs.com/settings/<your_user_name>/packages
এবং প্যাকেজ বিভাগের নীচে দেখুন; সেখানে, আপনি আপনার সদ্য প্রকাশিত প্যাকেজ পাবেন।
এখন, npx your_package_name hi
এর মতো একটি সাধারণ কমান্ডের সাহায্যে আপনি আমাদের ডেভেলপমেন্ট পরীক্ষার ফলাফল অবিলম্বে দেখতে পাবেন। উপরন্তু, প্যাকেজটি npm i -g your_package_name
কমান্ড ব্যবহার করে বিশ্বব্যাপী ইনস্টল করা যেতে পারে।
আমরা এই নিবন্ধটি জুড়ে দেখেছি, যদিও প্রাথমিক সেটআপগুলি চ্যালেঞ্জের সাথে ধাঁধাঁযুক্ত হতে পারে, পুরস্কারটি একটি সুবিন্যস্ত এবং সামঞ্জস্যপূর্ণ রিলিজ প্রক্রিয়া প্রতিষ্ঠার মধ্যে রয়েছে। গিটহাব অ্যাকশনগুলি ব্যবহার করা এই জটিলতাগুলিকে সরল করে, ডেভেলপাররা যৌক্তিক জটিলতার পরিবর্তে কোডের মানের উপর ফোকাস করতে পারে তা নিশ্চিত করে।
আপনি সবেমাত্র পাবলিক প্যাকেজ নিয়ে আপনার যাত্রা শুরু করছেন বা আপনার প্রকাশনার প্রচেষ্টায় বাধার সম্মুখীন হয়েছেন কিনা, একটি কাঠামোগত, স্বয়ংক্রিয় কর্মপ্রবাহ গ্রহণ করার ক্ষেত্রে অনস্বীকার্য মূল্য রয়েছে। সিমেন্টিক রিলিজকে একীভূত করার মাধ্যমে, আপনি ধারাবাহিক সংস্করণ নিশ্চিত করছেন এবং সফ্টওয়্যার বিকাশের জন্য একটি ভবিষ্যত-অগ্রগতি পদ্ধতিকে চ্যাম্পিয়ন করছেন।
এখানে নিরবচ্ছিন্ন প্রকাশনা, কম মাথাব্যথা, এবং কোডটি নিখুঁত করতে আরও বেশি সময় ব্যয় করা হয়েছে যা আমাদের ডিজিটাল বিশ্বকে এগিয়ে নিয়ে যায়।
মনে রাখবেন, NPM_TOKEN
এবং GITHUB_TOKEN
উভয়কেই GitHub অ্যাকশনের মধ্যে উপযুক্ত অনুমতি দেওয়া অপরিহার্য। উপরন্তু, আপনার package.json
publishConfig
অ্যাক্সেসের জন্য সেটিংসের সাথে সঠিকভাবে কনফিগার করা উচিত এবং নিশ্চিত করা উচিত যে private
কনফিগারটি false
তে সেট করা আছে। আপনি যদি কোনো সমস্যার সম্মুখীন হন বা অন্তর্দৃষ্টি থাকে, অনুগ্রহ করে মন্তব্য করতে দ্বিধা করবেন না।
সংগ্রহস্থল:
শব্দার্থিক রিলিজ CLI:
প্রতিশ্রুতিবদ্ধ: