Enhanced webhook handling for push events without object_attributes

This commit is contained in:
GOOD21
2025-02-20 10:47:21 +08:00
parent 29a350b4f8
commit 5e1cc12df4

View File

@ -24,7 +24,6 @@ router = APIRouter()
secret_provider = get_secret_provider() if get_settings().get("CONFIG.SECRET_PROVIDER") else None
async def get_mr_url_from_commit_sha(commit_sha, gitlab_token, project_id):
try:
import requests
@ -64,7 +63,8 @@ async def _perform_commands_gitlab(commands_conf: str, agent: PRAgent, api_url:
if commands_conf == "pr_commands" and get_settings().config.disable_auto_feedback: # auto commands for PR, and auto feedback is disabled
get_logger().info(f"Auto feedback is disabled, skipping auto commands for PR {api_url=}", **log_context)
return
if not should_process_pr_logic(data): # Here we already updated the configurations
if commands_conf != "push_commands" and not should_process_pr_logic(data):
get_logger().info(f"Skipping auto commands for PR {api_url=}", **log_context)
return
commands = get_settings().get(f"gitlab.{commands_conf}", {})
get_settings().set("config.is_auto_command", True)
@ -98,6 +98,7 @@ def is_bot_user(data) -> bool:
def should_process_pr_logic(data) -> bool:
try:
if not data.get('object_attributes', {}):
get_logger().info("No object attributes found in the data")
return False
title = data['object_attributes'].get('title')
sender = data.get("user", {}).get("username", "")
@ -190,8 +191,9 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request):
# ignore bot users
if is_bot_user(data):
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"}))
if data.get('event_type') != 'note': # not a comment
if data.get('event_type') != 'note' and data.get('object_kind') != 'push': # not a comment
# ignore MRs based on title, labels, source and target branches
get_logger().info(f"Processing {data.get('object_kind')} event")
if not should_process_pr_logic(data):
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"}))
@ -246,7 +248,6 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request):
get_logger().info(f"Processing time: {end_time - start_time}", request=request_json)
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"}))
def handle_ask_line(body, data):
try:
line_range_ = data['object_attributes']['position']['line_range']