পাইথন প্রজেক্টস ও লাইব্রেরি

Agent 8: GitHub Repo Monitor Agent

১. এই এজেন্ট কী কাজ করবে?

যারা পাইথন বা ওয়েব ডেভেলপমেন্ট করেন, তারা প্রতিনিয়ত নতুন লাইব্রেরি (যেমন: React, Django, Pandas) ব্যবহার করেন। যখন এই লাইব্রেরিগুলোর নতুন ভার্সন বা আপডেট আসে, তখন আমাদের জানা থাকা দরকার। এই এজেন্ট প্রতিদিন আপনার দেওয়া GitHub রেপোজিটরিগুলো চেক করবে এবং নতুন কোনো ভার্সন (Release) রিলিজ হলে আপনাকে সাথে সাথে জানাবে।

২. কী কী টুলস এবং লাইব্রেরি লাগবে?

  • requests: GitHub API কল করার জন্য।
  • json: পূর্বের রিলিজ ভার্সন সেভ করে রাখার জন্য (যাতে নতুনের সাথে তুলনা করা যায়)।

৩. এ টু জেড কোড (A to Z Code)

GitHub এর API একদম ফ্রি। নিচের কোডটি agent_github_monitor.py নামে সেভ করুন।

import requests
import json
import os

class GitHubMonitorAgent:
    def __init__(self, repos):
        # repos হলো একটি লিস্ট, যেখানে আপনি আপনার পছন্দের রেপোর নাম দেবেন
        self.repos = repos
        self.data_file = "github_releases.json"

    def fetch_latest_release(self, repo):
        # GitHub API থেকে লেটেস্ট রিলিজ বের করার URL
        url = f"https://api.github.com/repos/{repo}/releases/latest"
        response = requests.get(url)
        
        if response.status_code == 200:
            data = response.json()
            return data.get("tag_name") # যেমন: "v2.5.1"
        else:
            return None

    def monitor(self):
        print("[Agent] GitHub রেপোজিটরিগুলো চেক করা হচ্ছে...")
        
        # আগের ডেটা লোড করা
        if os.path.exists(self.data_file):
            with open(self.data_file, "r") as f:
                old_releases = json.load(f)
        else:
            old_releases = {}

        new_releases = {}
        changes_found = False

        for repo in self.repos:
            latest_version = self.fetch_latest_release(repo)
            
            if not latest_version:
                print(f"[Agent] ⚠️ {repo} এর কোনো রিলিজ পাওয়া যায়নি।")
                continue
                
            new_releases[repo] = latest_version

            # চেক করা যে নতুন রিলিজ এসেছে কি না
            if repo not in old_releases:
                print(f"[{repo}] ট্র্যাক করা শুরু হলো: {latest_version}")
            elif old_releases[repo] != latest_version:
                print(f"🚀 [নতুন আপডেট] {repo} এর নতুন ভার্সন এসেছে: {latest_version} (আগে ছিল {old_releases[repo]})")
                changes_found = True
            else:
                pass # কোনো আপডেট নেই

        if not changes_found:
            print("[Agent] আজকে কোনো রেপোতে নতুন রিলিজ নেই।")

        # নতুন ডেটা সেভ করে রাখা
        with open(self.data_file, "w") as f:
            json.dump(new_releases, f, indent=4)

if __name__ == "__main__":
    # আপনার পছন্দের GitHub রেপোগুলোর নাম (Format: username/repository)
    my_favorite_repos = [
        "pallets/flask",
        "tiangolo/fastapi",
        "pandas-dev/pandas"
    ]
    
    agent = GitHubMonitorAgent(my_favorite_repos)
    agent.monitor()

৪. কীভাবে এটি আরও অ্যাডভান্সড করবেন?

  • আপনি চাইলে smtplib ব্যবহার করে নতুন আপডেট আসার সাথে সাথে আপনাকে ইমেইল পাঠানোর ব্যবস্থা করতে পারেন।
  • শুধু রিলিজ ভার্সন না, রিলিজ নোটে (Release Notes) কী কী ফিচার অ্যাড হয়েছে, সেটিও API থেকে এক্সট্র্যাক্ট করতে পারেন।