@@ -86,7 +86,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
86
86
h .handlePullRequestReview (& logger , githubID , body , w )
87
87
return
88
88
case "push" :
89
- h .handlePush (& logger , githubID , baseRequest , w )
89
+ h .handlePush (& logger , githubID , body , w )
90
90
return
91
91
case "status" :
92
92
h .handleStatus (& logger , githubID , baseRequest , w )
@@ -325,24 +325,40 @@ func (h *Handler) handlePullRequestReview(logger *zerolog.Logger, eventID string
325
325
h .respond (w , http .StatusOK , "ok" )
326
326
}
327
327
328
- //nolint:dupl // very similar to handleStatus but keep it separated for readability
329
- func (h * Handler ) handlePush (logger * zerolog.Logger , eventID string , baseRequest * BaseRequest , w http.ResponseWriter ) {
328
+ func (h * Handler ) handlePush (logger * zerolog.Logger , eventID string , body []byte , w http.ResponseWriter ) {
329
+ var req struct {
330
+ BaseRequest
331
+ Deleted bool `json:"deleted"`
332
+ }
333
+
334
+ if err := json .Unmarshal (body , & req ); err != nil {
335
+ logger .Error ().Err (err ).Msg ("unable to decode request" )
336
+ h .respond (w , http .StatusBadRequest , "bad request" )
337
+ return
338
+ }
339
+
340
+ if req .Deleted {
341
+ // no need to handle delete operations
342
+ h .respond (w , http .StatusOK , "ok" )
343
+ return
344
+ }
345
+
330
346
err := common .QueueMessage (
331
347
logger ,
332
348
h .JetStreamContext ,
333
349
h .RateLimitKV ,
334
350
h .RateLimitInterval ,
335
351
h .PushSubject + "." + eventID ,
336
- fmt .Sprintf ("push.%d.%s" , baseRequest .Installation .ID , baseRequest .Repository .NodeID ),
352
+ fmt .Sprintf ("push.%d.%s" , req .Installation .ID , req .Repository .NodeID ),
337
353
& common.QueuePushMessage {
338
354
BaseMessage : common.BaseMessage {
339
- InstallationID : baseRequest .Installation .ID ,
355
+ InstallationID : req .Installation .ID ,
340
356
Repository : common.Repository {
341
- NodeID : baseRequest .Repository .NodeID ,
342
- FullName : baseRequest .Repository .FullName ,
343
- Name : baseRequest .Repository .Name ,
344
- OwnerName : baseRequest .Repository .Owner .Login ,
345
- Private : baseRequest .Repository .Private ,
357
+ NodeID : req .Repository .NodeID ,
358
+ FullName : req .Repository .FullName ,
359
+ Name : req .Repository .Name ,
360
+ OwnerName : req .Repository .Owner .Login ,
361
+ Private : req .Repository .Private ,
346
362
},
347
363
},
348
364
})
@@ -354,7 +370,6 @@ func (h *Handler) handlePush(logger *zerolog.Logger, eventID string, baseRequest
354
370
h .respond (w , http .StatusOK , "ok" )
355
371
}
356
372
357
- //nolint:dupl // very similar to handlePush but keep it separated for readability
358
373
func (h * Handler ) handleStatus (logger * zerolog.Logger , eventID string , baseRequest * BaseRequest , w http.ResponseWriter ) {
359
374
err := common .QueueMessage (
360
375
logger ,
0 commit comments