@@ -18,13 +18,15 @@ def webhook():
1818 """Handle incoming GitHub webhook events."""
1919 # https://docs.github.com/en/webhooks/webhook-events-and-payloads
2020 event_type = request .headers .get ('X-GitHub-Event' )
21+ # https://docs.github.com/en/webhooks/webhook-events-and-payloads#delivery-headers
22+ delivery_id = request .headers .get ('X-GitHub-Delivery' )
2123
2224 # Validate event type
2325 if not event_type or not isinstance (event_type , str ):
2426 logger .error ("Missing or invalid X-GitHub-Event header" )
2527 return jsonify ({'status' : 'error' , 'message' : 'Invalid event type' }), 400
2628
27- logger .info ("Received webhook event: %s" , event_type )
29+ logger .info ("Received webhook event: %s, delivery_id: %s " , event_type , delivery_id )
2830
2931 # Handle ping event
3032 if event_type == 'ping' :
@@ -34,36 +36,72 @@ def webhook():
3436 signature = request .headers .get ('X-Hub-Signature-256' )
3537
3638 if not verify_github_signature (request .data , signature ):
37- logger .error ("GitHub webhook signature not successfully verified! Ignoring webhook event." )
39+ logger .error (
40+ "GitHub webhook signature not successfully verified! "
41+ "Ignoring webhook event. delivery_id: %s" ,
42+ delivery_id ,
43+ )
3844 return jsonify ({'status' : 'forbidden' , 'message' : 'Invalid signature' }), 403
3945
4046 # Validate JSON payload
4147 try :
4248 payload = request .json
4349 if not payload :
44- logger .error ("Empty or invalid JSON payload" )
50+ logger .error ("Empty or invalid JSON payload, delivery_id: %s" , delivery_id )
4551 return jsonify ({'status' : 'error' , 'message' : 'Invalid JSON payload' }), 400
4652 except Exception as e :
47- logger .error ("Failed to parse JSON payload: %s" , str (e ))
53+ logger .error (
54+ "Failed to parse JSON payload: %s, delivery_id: %s" ,
55+ str (e ),
56+ delivery_id ,
57+ )
4858 return jsonify ({'status' : 'error' , 'message' : 'Invalid JSON' }), 400
4959
5060 # https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_job
5161 if event_type == 'workflow_job' :
52- return handle_workflow_job_event (payload )
62+ return handle_workflow_job_event (payload , delivery_id )
5363 else :
54- logger .warning ("Received unknown event type: %s" , event_type )
64+ logger .warning (
65+ "Received unknown event type: %s, delivery_id: %s" ,
66+ event_type ,
67+ delivery_id ,
68+ )
5569 return jsonify ({'status' : 'ignored' }), 200
5670
5771
58- def handle_workflow_job_event (payload ):
72+ def handle_workflow_job_event (payload , delivery_id = None ):
5973 """Handle workflow_job event."""
6074 try :
6175 webhook_service = WebhookService ()
62- webhook_service .handle_workflow_job (payload )
63- return jsonify ({'status' : 'success' }), 200
76+ result = webhook_service .handle_workflow_job (payload , delivery_id = delivery_id )
77+ logger .info (
78+ "Webhook processed successfully, action: %s, runner_name: %s, "
79+ "delivery_id: %s" ,
80+ result .get ("action" ),
81+ result .get ("runner_name" ),
82+ delivery_id ,
83+ )
84+ return (
85+ jsonify (
86+ {
87+ 'status' : 'success' ,
88+ 'action' : result .get ('action' ),
89+ 'runner_name' : result .get ('runner_name' ),
90+ }
91+ ),
92+ 200 ,
93+ )
6494 except ValueError as e :
65- logger .error ("[Webhook] Validation error: %s" , str (e ))
95+ logger .error (
96+ "[Webhook] Validation error: %s, delivery_id: %s" ,
97+ str (e ),
98+ delivery_id ,
99+ )
66100 return jsonify ({'status' : 'error' , 'message' : 'Invalid payload' }), 400
67101 except Exception as e :
68- logger .error ("[Webhook] Error handling webhook: %s" , str (e ))
102+ logger .error (
103+ "[Webhook] Error handling webhook: %s, delivery_id: %s" ,
104+ str (e ),
105+ delivery_id ,
106+ )
69107 return jsonify ({'status' : 'error' , 'message' : 'Internal error' }), 500
0 commit comments