আমি সবসময় Static Site Generator পছন্দ করি কারণ এগুলো অনেক ফাস্ট এবং মাঝরাতে Database Crash করার কোনো ভয় থাকে না। তবে অনেকদিন ধরেই আমার ব্লগিং প্রসেসটা অনেকটা "ম্যানুয়াল ট্রান্সমিশন" গাড়ির মতো মনে হচ্ছিল। কোনো পোস্ট Publish করতে চাইলে Desktop-এ বসে Git Push করতে হতো এবং Build-এর জন্য অপেক্ষা করতে হতো। এই সমস্যা কাটাতে আমি Automating My Blog প্রজেক্টটি হাতে নেই।
Build-time Filter: তারিখ দিয়ে Scheduling
আমার এই সিস্টেমের প্রাণ হলো Vite-এর import.meta.glob। যখন আমি কোনো পোস্ট লিখি, তার Metadata-তে একটা তারিখ দিয়ে দেই। SvelteKit Build করার সময় চেক করে দেখে সেই তারিখটি বর্তমান সময়ের পরের কি না। তারিখ যদি ভবিষ্যতে হয়, তবে সেটি Production Build-এ Include হয় না।
const now = new Date().getTime(); // ... লুপের ভেতরে ... const isVisible = !post.metadata.hidden && postDate <= now;const now = new Date().getTime(); // ... লুপের ভেতরে ... const isVisible = !post.metadata.hidden && postDate <= now;
এখানে একটা বড় সমস্যা বা অভিযোগ হলো, এই Draftগুলো কিন্তু Git Repository-তে ঠিকই থেকে যায়। যদিও Repository Private, তবে এটি যদি কখনো Open-source করি, তখন Draftগুলো Hide করার জন্য আমাকে অন্য কোনো রাস্তা খুঁজতে হবে।
গিটহাব অ্যাকশনস: ক্রন জবের অবাস্তবতা
Schedule করা পোস্টগুলো Automatically Live করার জন্য আমি GitHub Actions-এ Cron Job Setup করেছি। প্রতিটি রাতে এটি একবার করে সাইট Rebuild করে।
on: schedule: - cron: '0 0 * * *'on: schedule: - cron: '0 0 * * *'
কিন্তু একটি জিনিস আমি শিখেছি যে, GitHub-এর এই schedule Commandটি আসলে একটি "সাজেশন" মাত্র। আমি অনেক সময় দেখেছি রাত ১২টার Build রাত ২টা বা ৩টায় Trigger হচ্ছে। এটি GitHub-এর Runner কতটুকু Busy তার ওপর নির্ভর করে। তোমার যদি একদম নিখুঁত Timing দরকার হয়, তবে এর ওপর ভরসা না করাই ভালো।
Nix এবং "আমার মেশিনে তো চলে" সমস্যা
আমার Build Environment Clean রাখতে আমি Nix Flakes ব্যবহার করি। GitHub Actions-এর ফাইলে আমি সরাসরি npm install Run না করে nix develop ব্যবহার করি যাতে Local Machine-এর মতো একই pnpm বা Node.js Version পাওয়া যায়।
আমি ভেবেছিলাম এটি সব CI Problem Solve করবে। কিন্তু আমি একবার একটা অদ্ভূত Bug Face করলাম যেখানে একটি Remark Plugin macOS-এ ঠিকঠাক কাজ করলেও Linux Runner-এ Fail করছিল। আমার মনে হয় Nix আমাদের ৯৫% পথ নিয়ে যায়, কিন্তু বাকি ৫% মেলাতে মাঝেমধ্যে পুরো বিকেলটাই নষ্ট হয়ে যায়।
প্রিভিউ মোড: একটি Quick Hack
বারবার pnpm dev Run না করে Draft দেখার জন্য আমি একটি Preview Mode Implement করেছি। URL-এ একটি Secret Token থাকলে আমার Filter সেটি Bypass করে সব Draft দেখিয়ে দেয়।
Automating My Blog নিয়ে এই পুরো Journey-টা আমার ব্লগিংয়ের "Deployment Anxiety" কমিয়ে দিয়েছে। এখন আমি Just পোস্ট লিখে তারিখ Set করে দিয়ে শান্তিতে ঘুমাতে পারি।
SvelteKit এবং GitHub Actions ব্যবহার করে Automating My Blog তৈরির Technical Process, তারিখ অনুযায়ী Scheduling এবং Nix Environment-এর Limitation নিয়ে বিস্তারিত জানো!