File tree 2 files changed +25
-3
lines changed
2 files changed +25
-3
lines changed Original file line number Diff line number Diff line change @@ -359,21 +359,23 @@ def get_digest(secret, msg):
359
359
def handle_webhook (self ):
360
360
# Get event and trigger other webhook events
361
361
action = self .data .get ('action' , None )
362
+ deleted = self .data .get ('deleted' , False )
362
363
event = self .request .META .get (GITHUB_EVENT_HEADER , GITHUB_PUSH )
363
364
webhook_github .send (
364
365
Project ,
365
366
project = self .project ,
366
367
data = self .data ,
367
368
event = event ,
368
369
)
369
- # Handle push events and trigger builds
370
- if event == GITHUB_PUSH :
370
+ # Don't build a branch if it's a push that was actually a delete
371
+ # https://developer.github.com/v3/activity/events/types/#pushevent
372
+ if event == GITHUB_PUSH and not deleted :
371
373
try :
372
374
branches = [self ._normalize_ref (self .data ['ref' ])]
373
375
return self .get_response_push (self .project , branches )
374
376
except KeyError :
375
377
raise ParseError ('Parameter "ref" is required' )
376
- if event in (GITHUB_CREATE , GITHUB_DELETE ):
378
+ if event in (GITHUB_CREATE , GITHUB_DELETE ) or ( event == GITHUB_PUSH and deleted ) :
377
379
return self .sync_versions (self .project )
378
380
379
381
if (
Original file line number Diff line number Diff line change @@ -909,6 +909,26 @@ def test_github_webhook_for_tags(self, trigger_build):
909
909
[mock .call (force = True , version = self .version_tag , project = self .project )],
910
910
)
911
911
912
+ @mock .patch ('readthedocs.core.views.hooks.sync_repository_task' )
913
+ def test_github_webhook_no_build_on_delete (self , sync_repository_task , trigger_build ):
914
+ client = APIClient ()
915
+
916
+ payload = {'ref' : 'master' , 'deleted' : True }
917
+ headers = {GITHUB_EVENT_HEADER : GITHUB_PUSH }
918
+ resp = client .post (
919
+ '/api/v2/webhook/github/{}/' .format (self .project .slug ),
920
+ payload ,
921
+ format = 'json' ,
922
+ ** headers
923
+ )
924
+ self .assertEqual (resp .status_code , status .HTTP_200_OK )
925
+ self .assertFalse (resp .data ['build_triggered' ])
926
+ self .assertEqual (resp .data ['project' ], self .project .slug )
927
+ self .assertEqual (resp .data ['versions' ], [LATEST ])
928
+ trigger_build .assert_not_called ()
929
+ latest_version = self .project .versions .get (slug = LATEST )
930
+ sync_repository_task .delay .assert_called_with (latest_version .pk )
931
+
912
932
@mock .patch ('readthedocs.core.views.hooks.sync_repository_task' )
913
933
def test_github_create_event (self , sync_repository_task , trigger_build ):
914
934
client = APIClient ()
You can’t perform that action at this time.
0 commit comments