mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-02 03:40:38 +08:00
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import logging
|
|
|
|
import uvicorn
|
|
from fastapi import APIRouter, FastAPI, Request, status
|
|
from fastapi.encoders import jsonable_encoder
|
|
from fastapi.responses import JSONResponse
|
|
from starlette.background import BackgroundTasks
|
|
|
|
from pr_agent.agent.pr_agent import PRAgent
|
|
from pr_agent.config_loader import get_settings
|
|
|
|
app = FastAPI()
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/webhook")
|
|
async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request):
|
|
data = await request.json()
|
|
if data.get('object_kind') == 'merge_request' and data['object_attributes'].get('action') in ['open', 'reopen']:
|
|
logging.info(f"A merge request has been opened: {data['object_attributes'].get('title')}")
|
|
url = data['object_attributes'].get('url')
|
|
background_tasks.add_task(PRAgent().handle_request, url, "/review")
|
|
elif data.get('object_kind') == 'note' and data['event_type'] == 'note':
|
|
if 'merge_request' in data:
|
|
mr = data['merge_request']
|
|
url = mr.get('url')
|
|
body = data.get('object_attributes', {}).get('note')
|
|
background_tasks.add_task(PRAgent().handle_request, url, body)
|
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"}))
|
|
|
|
def start():
|
|
gitlab_url = get_settings().get("GITLAB.URL", None)
|
|
if not gitlab_url:
|
|
raise ValueError("GITLAB.URL is not set")
|
|
gitlab_token = get_settings().get("GITLAB.PERSONAL_ACCESS_TOKEN", None)
|
|
if not gitlab_token:
|
|
raise ValueError("GITLAB.PERSONAL_ACCESS_TOKEN is not set")
|
|
get_settings().config.git_provider = "gitlab"
|
|
|
|
app = FastAPI()
|
|
app.include_router(router)
|
|
|
|
uvicorn.run(app, host="0.0.0.0", port=3000)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
start()
|