Automation & Cloud

Mastering GitHub Actions: How to Run Free Automated Cron Jobs Daily

আপনি যদি কোনো ডাটা স্ক্র্যাপার, সোশ্যাল মিডিয়া মেম্বারশিপ বট বা রেগুলার ব্যাকআপ স্ক্রিপ্ট তৈরি করে থাকেন, তবে সেটি প্রতিদিন নির্দিষ্ট সময়ে রান করার জন্য সাধারণ নিয়মে একটি পেইড ভিপিএস (VPS) বা ২৪ ঘণ্টা কম্পিউটার অন রাখার প্রয়োজন পড়ে।

কিন্তু গিটহাব আমাদের সম্পূর্ণ ফ্রিতে তাদের ক্লাউড ইনফ্রাস্ট্রাকচার ব্যবহার করার সুযোগ দিচ্ছে। GitHub Actions-এর বিল্ট-ইন schedule (Cron) ফিচার ব্যবহার করে আপনি পকেট থেকে এক টাকাও খরচ না করে যেকোনো পাইথন বা নোড-জেএস স্ক্রিপ্ট প্রতিদিন অটোমেট করতে পারবেন। আজ আমরা জানবো এর কমপ্লিট সেটআপ প্রসেস।

ধাপ ১: প্রজেক্ট ডিরেক্টরি স্ট্রাকচার তৈরি

গিটহাব অ্যাকশনস সচল করার জন্য আপনার গিট রিপোজিটরিতে একটি নির্দিষ্ট ফোল্ডার স্ট্রাকচার মেইনটেইন করতে হবে। আপনার টার্মিনাল বা কোড এডিটরে গিয়ে প্রজেক্টের একদম রুট ডিরেক্টরিতে এই ফোল্ডারগুলো তৈরি করুন:

mkdir -p .github/workflows

এখন এই workflows ফোল্ডারের ভেতরে cron-job.yml নামে একটি কাস্টম কনফিগারেশন ফাইল তৈরি করুন।

ধাপ ২: ক্রন-জব ওয়ার্কফ্লো কনফিগার করা (YAML)

এবার তৈরি করা cron-job.yml ফাইলটি ওপেন করুন এবং নিচের ক্লাউড পাইপলাইন কোডটি হুবহু পেস্ট করে দিন। এটি প্রতিদিন রাত ১২টায় (UTC) আপনার স্ক্রিপ্টটিকে অটোমেটিকভাবে রান করাবে:

name: Daily Automated Script

on:
  schedule:
    # এটি POSIX Cron ফরম্যাট (মিনিট ঘন্টা দিন মাস সপ্তাহের-দিন)
    - cron: '0 0 * * *' 
  workflow_dispatch: # এই লাইনের ফলে আপনি চাইলে ম্যানুয়ালিও রান করতে পারবেন

jobs:
  run-automation:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout Repository Code
      uses: actions/checkout@v4

    - name: Set Up Python Environment
      uses: actions/setup-python@v5
      with:
          python-version: '3.10'

    - name: Install System Dependencies
      run: |
          python -m pip install --upgrade pip
          pip install requests python-dotenv

    - name: Execute Main Python Script
      run: python main.py

টাইম জোন এলার্ট: গিটহাবের ইন্টারনাল সার্ভার ঘড়ি স্ট্যান্ডার্ড UTC টাইম অনুসরণ করে। তাই বাংলাদেশ সময় (GMT+6) সকাল ৬টায় কোনো স্ক্রিপ্ট রান করতে চাইলে ক্রন টাইম লিখতে হবে '0 0 * * *'

ধাপ ৩: এপিআই কি এবং সিক্রেটস ম্যানেজমেন্ট

আপনার স্ক্রিপ্টে যদি কোনো সেনসিটিভ ডেটা বা এপিআই টোকেন (যেমন: টেলিগ্রাম বট টোকেন বা ফেসবুক সেশন আইডি) থাকে, তবে তা সরাসরি কোডের ভেতর ওপেন রাখা মারাত্মক ঝুঁকিপূর্ণ। এগুলো সুরক্ষিত রাখতে:

  • আপনার GitHub Repository-র Settings ট্যাবে যান।
  • বাম পাশের মেনু থেকে Secrets and variables ➔ Actions অপশনে ক্লিক করুন।
  • New repository secret-এ ক্লিক করে আপনার ভ্যারিয়েবল নাম (যেমন: API_KEY) এবং তার ভ্যালু সেভ করুন।

এরপর আপনার YAML ফাইলের স্ক্রিপ্ট এক্সিকিউশন স্টেপে এভাবে যুক্ত করে দিন:

env:
  API_KEY: ${{ secrets.API_KEY }}

ধাপ ৪: পুশ এবং লাইভ টেস্ট

এখন আপনার মেইন পাইথন ফাইলটি (main.py) এবং এই YAML ফাইলটি গিটহাবের মেইন ব্রাঞ্চে পুশ (Push) করে দিন। পুশ করার পর গিটহাব ড্যাশবোর্ডের Actions ট্যাবে গেলেই দেখতে পাবেন আপনার ক্রন-জব পাইপলাইনটি শিডিউল হয়ে গেছে এবং প্রতিদিন কোনো মানুষের স্পর্শ ছাড়াই আপনার দেওয়া কোড ব্যাকএন্ডে রান হতে থাকবে!