import asyncio import json import os from pr_agent.agent.pr_agent import PRAgent from pr_agent.config_loader import get_settings from pr_agent.tools.pr_reviewer import PRReviewer async def run_action(): # Get environment variables GITHUB_EVENT_NAME = os.environ.get('GITHUB_EVENT_NAME') GITHUB_EVENT_PATH = os.environ.get('GITHUB_EVENT_PATH') OPENAI_KEY = os.environ.get('OPENAI_KEY') OPENAI_ORG = os.environ.get('OPENAI_ORG') GITHUB_TOKEN = os.environ.get('GITHUB_TOKEN') # Check if required environment variables are set if not GITHUB_EVENT_NAME: print("GITHUB_EVENT_NAME not set") return if not GITHUB_EVENT_PATH: print("GITHUB_EVENT_PATH not set") return if not OPENAI_KEY: print("OPENAI_KEY not set") return if not GITHUB_TOKEN: print("GITHUB_TOKEN not set") return # Set the environment variables in the settings get_settings().set("OPENAI.KEY", OPENAI_KEY) if OPENAI_ORG: get_settings().set("OPENAI.ORG", OPENAI_ORG) get_settings().set("GITHUB.USER_TOKEN", GITHUB_TOKEN) get_settings().set("GITHUB.DEPLOYMENT_TYPE", "user") # Load the event payload try: with open(GITHUB_EVENT_PATH, 'r') as f: event_payload = json.load(f) except json.decoder.JSONDecodeError as e: print(f"Failed to parse JSON: {e}") return # Handle pull request event if GITHUB_EVENT_NAME == "pull_request": action = event_payload.get("action") if action in ["opened", "reopened"]: pr_url = event_payload.get("pull_request", {}).get("url") if pr_url: await PRReviewer(pr_url).run() # Handle issue comment event elif GITHUB_EVENT_NAME == "issue_comment": action = event_payload.get("action") if action in ["created", "edited"]: comment_body = event_payload.get("comment", {}).get("body") if comment_body: pr_url = event_payload.get("issue", {}).get("pull_request", {}).get("url") if pr_url: body = comment_body.strip().lower() await PRAgent().handle_request(pr_url, body) if __name__ == '__main__': asyncio.run(run_action())