প্রতিদিন আমাদের অনেক পুনরাবৃত্তিমূলক কাজ করতে হয়। এবং সেগুলো কখনও কখনও বিরক্তিকর, কঠিন, এবং একঘেয়ে যেতে পারে।
কিন্তু সেই দৈনন্দিন কাজগুলো করতে থাকার বদলে, আপনি সেগুলো অন্যকে বা অন্য কিছুতে প্রত্যায়িত করতে পারেন যাতে সেগুলো আপনার জন্য করে দেয়। এভাবে আপনি আপনার পছন্দের কাজ করতে বেশি সময় পাবেন। আপনি বিশ্রাম নেওয়ার সময় পাবেন।
যদি কখনো অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপ করে থাকেন, তবে আপনি জানেন কিছু কাজ কতটুকু বিরক্তিকর হতে পারে:
- টেস্ট চালানো
- নিশ্চিত করা যে নতুন কোড মার্জ করলে অ্যাপ্লিকেশন কম্পাইল হচ্ছে
- অ্যাপ্লিকেশন বিল্ড এবং পাবলিশ করা।
তাহলে এই কাজগুলো কাকে সৌंपব? অন্য একজন সহকর্মী? তিনি আবার অন্য কারো কাছে দিয়ে দিতে পারেন এবং সেটা কারো সময় বাঁচাবে না। পлюস, আমরা আমাদের সহকর্মীদের উদাস করতে চাই না। সমাধান?
গিটহাব অ্যাকশনসকে হ্যালো বলুন। 👐
গিটহাব অ্যাকশনস কী?
গিটহাব অ্যাকশনস হল এমন কমান্ডসমূহ যা আমাদের রিপোজিটরিতে কিছু ঘটলে ট্রিগার হয়। এর মূলত, একটি অ্যাকশন হল একটি কনফিগারেশন ফাইল যাতে কমান্ডের একটি তালিকা থাকে যা বর্ণনা করে:
- কী হয় উচিত
- কখন হয় উচিত
এই কনফিগারেশন ফাইলটি YAML ফরম্যাটে (.yml) থাকে এবং একটি উদাহরণ এরকম দেখতে পারে:
name: My GitHub Action on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1
উপরোক্ত উদাহরণটি ভাঙে দেখি:
- আমরা আমাদের অ্যাকশনের একটি নাম দিই (My GitHub Action) [ঐচ্ছিক]
- এই অ্যাকশন কখন চলে তা নির্দেশ করি (যখন একটি পুল রিকোয়েস্ট খোলা হয়)
- একটি কাজের তালিকা (jobs) শুরু করি যা এই অ্যাকশন ট্রিগার হলে হবে
- প্রথমটি হল একটি build অ্যাকশন
- runs-on কমান্ডটি গিটহাবকে বলে যে কোন রানার এই জব এক্সিকিউট করবে (এটি একটি ভার্চুয়াল সার্ভার এবং আপনি উইন্ডোজ/ম্যাক/লিনাক্স যেকোনো একটি বেছে নিতে পারেন)
- প্রতিটি জবের অনেক ফেজ থাকতে পারে যা steps কীওয়ার্ড দ্বারা গোষ্ঠীভূত থাকে
- uses কীওয়ার্ডটি স্ক্রিপ্টকে বলে যে কোন অ্যাকশন এক্সিকিউট করতে হবে
এটি একটি খুব সংক্ষিপ্ত উদাহরণ যা গিটহাব অ্যাকশনসের সব ফিচার দেখাচ্ছে না, কিন্তু কনফিগারেশন ফাইলটির কাঠামোর একটি ঝলক দিয়ে দেয়।
পরবর্তী সেকশনগুলিতে, আমরা এমন অ্যাকশন তৈরি করব যা আমাদের ডেভেলপমেন্ট সাইকেলকে দক্ষ এবং কার্যকর রাখবে।
নোট করুন যে সব গিটহাব অ্যাকশনস ফাইল আপনার প্রজেক্টের মেন ফোল্ডারের নিচে .github/workflows পাথে থাকতে হবে:
পুল রিকোয়েস্টের জন্য গিটহাব অ্যাকশন তৈরি করার পদ্ধতি
আপনি একা কাজ করুন বা টিমের অংশ হোন, আপনার অ্যাপ্লিকেশন স্থির থাকা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। তাই পুল রিকোয়েস্ট মার্জ করার আগে নিশ্চিত করা বুদ্ধিমত্তা যে আপনার অ্যাপ্লিকেশন সঠিকভাবে কম্পাইল হচ্ছে এবং সব টেস্ট পাস করছে।
আমরা ইতিমধ্যে উদাহরণে দেখিয়েছি কিভাবে আমাদের রিপোজিটরির কোড চেকআউট করতে হয়। এই অ্যাকশনে আমরা নিচের ধাপগুলো অন্তর্ভুক্ত করব:
- JDK ভার্সন সেট আপ করা
- ভার্চুয়াল এনভায়রনমেন্টের পারমিশন পরিবর্তন করা
- টেস্ট চালানো (যদি থাকে)
- অ্যাপ্লিকেশন বিল্ড করা
name: Android Build on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set Up JDK // 1 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Change wrapper permissions // 2 run: chmod +x ./gradlew - name: Run Tests // 3 run: ./gradlew test - name: Build Project // 4 run: ./gradlew assemble
আপনি দেখতে পাচ্ছেন যে উপরে প্রতিটি স্টেপের নিজস্ব প্রপার্টি এবং অ্যাট্রিবিউট আছে যা সেটি নির্দিষ্ট।
আমি প্রতিটি সম্পর্কে বিস্তারিত বলব না, কারণ আপনি ডকুমেন্টেশন থেকে নিজে তা করতে পারেন। অধিকাংশ স্টেপের জন্য সাধারণ হল run কীওয়ার্ড। এই অ্যাট্রিবিউট বলে যে কোন কমান্ড এক্সিকিউট করতে হবে।
✋ আমাদের দ্বিতীয় স্টেপটি দরকার যাতে ভার্চুয়াল এনভায়রনমেন্ট গ্রেডল কমান্ড চালাতে পারে। সেটা ছাড়া এটি পারবে না।
অ্যাপ্লিকেশন পাবলিশ করার জন্য গিটহাব অ্যাকশন তৈরি করা
একবার অ্যাপ্লিকেশন পাবলিশ করলে, পুনরায় পাবলিশ করা একটি চোরা করার মতো হয়ে যায়।
আপনাকে নিশ্চিত করতে হয় ভার্সন আপগ্রেড হয়েছে, APK বিল্ড করতে হয়, গুগল প্লে কনসোলের মাধ্যমে জমা দিতে হয় এবং অন্যান্য বিরক্তিকর কাজ।
আমরা একটি অন্য গিটহাব অ্যাকশন দিয়ে এই প্রক্রিয়া অটোমেট করতে পারি। এই অ্যাকশনটি আগেরটির চেয়ে কিছুটা জটিল কারণ এতে গিটহাব সিক্রেটস ব্যবহার করতে হয়।
সংক্ষেপে, গিটহাব সিক্রেটস হল আপনার রিপোজিটরির এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সংবেদনশীল তথ্য সংরক্ষণ করার একটি পদ্ধতি। আমাদের এগুলো ব্যবহার করতে হবে কারণ:
- আমাদের অ্যাপ্লিকেশন সাইন করতে হবে
- আমরা এই অ্যাকশনে আমাদের বিল্ট অ্যাপ্লিকেশন গুগল প্লে স্টোরে জমা দিতে পারমিশন দিব
আসুন জানি কিভাবে গিটহাব সিক্রেটস তৈরি করা যায়।
- আপনার রিপোজিটরির মেন পেজে, Settings ট্যাবে ক্লিক করুন
- বাম হাতের মেনুতে Secrets নামে একটি অপশন থাকবে
- একটি সিক্রেট তৈরি করতে New repository secret বাটনে চাপুন
এখন যেহেতু সেটা হয়ে গেল, অ্যাপ্লিকেশন পাবলিশ করার স্ক্রিপ্টটি দেখি:
name: Android Publish on: workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set Up JDK uses: actions/setup-java@v1 with: java-version: 1.8 - name: Change wrapper permissions run: chmod +x ./gradlew - name: Run Tests run: ./gradlew test - name: Build Project run: ./gradlew build - name: Build Release AAB // 1 run: ./gradlew bundleRelease - name: Sign AAB // 2 uses: r0adkll/sign-android-release@v1 with: releaseDirectory: app/build/outputs/bundle/release signingKeyBase64: ${{ secrets.SIGN_KEY }} alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.STORE_KEY_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Deploy to Play Store // 3 uses: r0adkll/upload-google-play@v1 with: serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT}} packageName: com.tomerpacific.laundry releaseFiles: app/build/outputs/bundle/release/app-release.aab track: production
আপনি লক্ষ্য করতে পারেন এই অ্যাকশন on workflow_dispatch ট্রিগার হয়। এর মানে কী? মূলত এটি এই অ্যাকশনকে গিটহাব থেকে ম্যানুয়ালি ট্রিগার করার অনুমতি দেয়।
আপনি অবশ্যই ডিসাইড করতে পারেন যে আপনি চাইতে পারেন এই অ্যাকশন মেইন ব্রাঞ্চে পুশ হলে चले (উদাহরণস্বরূপ)।
উপরের স্নিপেটে ১ নম্বর দিয়ে চিহ্নিত স্টেপটি আমাদের অ্যাপ্লিকেশনের .aab ফাইল বিল্ড করতে ট্রিগার করে। তারপর, যেমন আমরা অ্যান্ড্রয়েড স্টুডিওতে বিল্ড করলে সাইন করি, এই .aab ফাইলটিও সাইন করতে হয়।
এখানেই প্রথমবার গিটহাব সিক্রেটস কাজে লাগে। আমাদের নিচের সিক্রেটস তৈরি করতে হবে:
- সাইনিং কী (secrets.SIGN_KEY)
- কী এলিয়াস (secrets.ALIAS)
- স্টোর কী পাসওয়ার্ড (secrets.STORE_KEY_PASSWORD)
- কী পাসওয়ার্ড (secrets.KEY_PASSWORD)
একবার .aab ফাইল সাইন হলে আমরা এটিকে গুগল প্লে স্টোরে ডিপ্লয় করতে পারি। এই ধাপে কিছুটা বেশি কাজ করতে হয় কারণ আমাদের এই গিটহাব অ্যাকশনকে গুগল প্লে এপ্লিকেশন ডিপ্লয় করার পারমিশন দিতে হবে। কিন্তু, কিভাবে করব? আমরা একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করব।
সার্ভিস অ্যাকাউন্ট তৈরি করার পদ্ধতি
এক সার্ভিস অ্যাকাউন্ট হল একটি এন্টিটি যা আপনি তৈরি করেন যা সার্ভিস বা অ্যাপ্লিকেশনকে বলে যে এটি আপনার পক্ষে অপারেট করছে।
আমাদের কেসে, আমাদের গিটহাব অ্যাকশন গুগল প্লে স্টোরের সাথে ইন্টারঅ্যাক্ট করবে যাতে আমাদের অ্যাপ্লিকেশনের একটি নতুন ভার্সন আপলোড করতে পারে।
একটি সার্ভিস অ্যাকাউন্ট তৈরি করতে, গুগল ক্লাউড কনসোলে যান। যদি সেখানে অ্যাকাউন্ট না থাকে, তবে তৈরি করুন। তারপর মেন পেজে, বাম হাতের মেনুতে Service Accounts নামে একটি লিস্ট আইটেম থাকবে।
এটি ক্লিক করলে, উইন্ডোর ডান পাশে আপনার ইতিমধ্যে থাকা সার্ভিস অ্যাকাউন্টগুলো দেখতে পাবেন।
আমরা একটি নতুন তৈরি করতে চাই এবং উইন্ডোর উপরের অংশে সেটার জন্য একটি বাটন আছে।
খোলা উইন্ডোতে, আপনাকে সার্ভিসের নাম দিতে হবে এবং আপনি একটি বিবরণও দিতে পারেন।
এখানে দেওয়া নামই এই সার্ভিস অ্যাকাউন্টের ইউনিক আইডেন্টিফায়ার হবে।
দ্বিতীয় ধাপে আপনাকে এই সার্ভিস অ্যাকাউন্টকে একটি রোল দিতে বলা হবে। Select A Role ড্রপডাউন থেকে Basic → Editor বেছে নিন।
শেষ ধাপে, "Grant users access to this service account" সেকশনের উভয় জায়গায় আপনার ইমেইল দিন:
Done বাটন চাপলে, আপনাকে এই সার্ভিস অ্যাকাউন্টের জন্য একটি কী তৈরি করতে হবে। অ্যাকশনটি এই কী ব্যবহার করে গুগল প্লে দ্বারা শনাক্ত হবে।
কী তৈরি করতে, মেন সার্ভিস অ্যাকাউন্ট স্ক্রিনে Actions লেবেলের নিচে তিনটি হোরিজন্টাল ডটে ক্লিক করুন। যে মেনু আসবে সেখান থেকে Manage keys সিলেক্ট করুন।
এই উইন্ডোতে, New Key বাটন সিলেক্ট করে এবং ظاهر হওয়া মেনু থেকে "Create new key" বেছে নেওয়ায় কী তৈরি করুন।
এখন আপনার নতুন কীয়ের ফরম্যাট বেছে নেওয়ার অপশন আছে – ডিফল্ট হল JSON এবং আমরা সেটি সিলেক্টই রেখে দিব। Create-এ ক্লিক করুন।
এটি করলে আপনার কম্পিউটারে একটি ফাইল ডাউনলোড হবে। এই ফাইলটি ভালোভাবে রাখুন কারণ এতে আপনার সার্ভিস অ্যাকাউন্টের সকল প্রাসঙ্গিক ডেটা আছে এবং আপনি আবার এটিকে ডাউনলোড করতে পারবেন না।
এই ফাইলের কন্টেন্ট নেওয়ায় একটি গিটহাব সিক্রেট তৈরি করুন (secrets.SERVICE_ACCOUNT)।
শেষ কিন্তু কম নয়, আমাদের গুগল প্লে কে এই সার্ভিস অ্যাকাউন্ট সম্পর্কে জানাতে হবে। সেটা করতে হলে আমাদের গুগল প্লে কনসোল অ্যাকাউন্টে লগইন করে Setup → API Access-এ যেতে হবে।
পেজটি নিচে স্ক্রোল করলে Service Accounts নামে একটি সেকশন দেখতে পাবেন। আপনার আগে তৈরি করা সার্ভিস অ্যাকাউন্টটি সেখানে দেখতে পাবেন। Grant Access লিংকে ক্লিক করুন
খোলা সেটিংসে, App permissions-এ যান। এখানে আপনি বেছে নেবেন কোন অ্যাপ্লিকেশন এই সার্ভিস অ্যাকাউন্টের সাথে ইন্টারঅ্যাক্ট করবে।
Account permissions-এ, releases সেকশনের অধীনে সব কিছু চেক করা উচিত। আমি পরামর্শ দিই অন্যান্য সব সেটিংসও দেখুন এবং নিজে ডিসাইড করুন কী চেক রাখবেন বা কী আনচেক করবেন।
হোয়া থাকলে, নিচে ডান কোণে Invite user বাটনে ক্লিক করুন।
আমন্ত্রণ পাঠানোর পর, আমরা পাবলিশ টু স্টোর অ্যাকশন চালাতে পারি।
গিটহাবে আমাদের অ্যাকশনها মনিটর করা
আপনার রিপোজিটরির জন্য কী অ্যাকশন ডিফাইন করা আছে তা দেখতে Actions ট্যাবে ক্লিক করুন। এই ট্যাবে সমস্ত ডিফাইন করা ওয়ার্কফ্লো এবং যেগুলো ইতিমধ্যে রান হয়েছে সেগুলো দেখাবে।
বাম পাশে আপনি ডিফাইন করা সব অ্যাকশন দেখতে পাবেন এবং ডান পাশে রান হয়েছে সেগুলো। আপনি যদি কোনো নির্দিষ্ট অ্যাকশন দেখতে চান, তবে সেটিতে ক্লিক করুন।
যদি অ্যাকশনটি workflow_dispatch-এ রান হওয়ার জন্য ডিফাইন করা থাকে, তবে আপনি একটি বাটন দেখবেন যা সেটি চালাতে দেবে (উপরোক্ত ছবির মতো)।
আপনি যদি কোনো নির্দিষ্ট ওয়ার্কফ্লো রান দেখতে চান, তবে মেন ওয়ার্কফ্লো পেজ থেকে রানগুলোর একটিতে ক্লিক করেও তা করতে পারেন। যদি কোনো অ্যাকশন রান করতে ব্যর্থ হয়, তবে সেটি যেন কী কারণে হয়েছে তা খুঁজে বের করার জন্য এটি সঠিক জায়গা।
আমাদের প্রথম অ্যাকশনটি পুল রিকোয়েস্ট খোলা হলে ট্রিগার হওয়ার জন্য সাপেক্ষ। যদি সেটি সঠিকভাবে কাজ করে, তবে আপনাকে এরকম দেখাবে:
বস, হয়ে গেলো!
শেষ কথা
এ পর্যন্ত পড়তে অনেক সময় লাগল, কিন্তু আমরা আপনার অ্যাপ্লিকেশনগুলির জন্য একটি কন্টিনিউয়াস ইন্টিগ্রেশন এবং কন্টিনিউয়াস ডিপ্লয়মেন্ট পাইপলাইন তৈরি শুরু করতে যা যা দরকার সেটা সব覆盖 করেছি।
আপনি যদি গিটহাব অ্যাকশন কিভাবে সেট আপ করা হয় সেটা দেখতে চান, তবে আমার একটি রিপোজিটরিতে চেক আউট করতে পারেন:
Actions · TomerPacific/LaundrySymbols
An application written in Kotlin showing the different laundry symbols with an explanation :cyclone: - Actions · TomerPacific/LaundrySymbols
TomerPacific
GitHub
গিটহাব অ্যাকশন সম্পর্কে আরও পড়তে এখানে যান:
GitHub Actions Documentation - GitHub Docs
Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you’d like, including CI/CD, and combine actions in a completely customized workflow.
GitHub Docs