Skip to content

Commit 6fc129f

Browse files
authored
Fix repository create/delete event webhooks (#13008)
This small PR changes the webhook trigger behaviour to be more in line with what's expected. (When 'repository' events are enabled, of course) In other words: For system-wide or default webhooks, repository events will now trigger said webhook. Previously it had to be under an organization for create events to be visible - a tad unexpected! Deleting a repository will now fire its own defined webhooks, not just organisational and system ones. In order to enable the latter the webhook has to now be triggered before the actual repo undergoes deletion. I'm willing to tweak this to try and 'grab' the webhook model beforehand and trigger the webhook notifier directly afterwards, but this may make the code more complex for little benefit. Closes #11766, #9180.
1 parent 77f3dbe commit 6fc129f

File tree

2 files changed

+17
-23
lines changed

2 files changed

+17
-23
lines changed

modules/notification/webhook/webhook.go

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -99,30 +99,26 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo
9999

100100
func (m *webhookNotifier) NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository) {
101101
// Add to hook queue for created repo after session commit.
102-
if u.IsOrganization() {
103-
if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{
104-
Action: api.HookRepoCreated,
105-
Repository: repo.APIFormat(models.AccessModeOwner),
106-
Organization: u.APIFormat(),
107-
Sender: doer.APIFormat(),
108-
}); err != nil {
109-
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
110-
}
102+
if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{
103+
Action: api.HookRepoCreated,
104+
Repository: repo.APIFormat(models.AccessModeOwner),
105+
Organization: u.APIFormat(),
106+
Sender: doer.APIFormat(),
107+
}); err != nil {
108+
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
111109
}
112110
}
113111

114112
func (m *webhookNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
115113
u := repo.MustOwner()
116114

117-
if u.IsOrganization() {
118-
if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{
119-
Action: api.HookRepoDeleted,
120-
Repository: repo.APIFormat(models.AccessModeOwner),
121-
Organization: u.APIFormat(),
122-
Sender: doer.APIFormat(),
123-
}); err != nil {
124-
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
125-
}
115+
if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{
116+
Action: api.HookRepoDeleted,
117+
Repository: repo.APIFormat(models.AccessModeOwner),
118+
Organization: u.APIFormat(),
119+
Sender: doer.APIFormat(),
120+
}); err != nil {
121+
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
126122
}
127123
}
128124

services/repository/repository.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ func DeleteRepository(doer *models.User, repo *models.Repository) error {
6464
log.Error("CloseRepoBranchesPulls failed: %v", err)
6565
}
6666

67-
if err := models.DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil {
68-
return err
69-
}
70-
67+
// If the repo itself has webhooks, we need to trigger them before deleting it...
7168
notification.NotifyDeleteRepository(doer, repo)
7269

73-
return nil
70+
err := models.DeleteRepository(doer, repo.OwnerID, repo.ID)
71+
return err
7472
}
7573

7674
// PushCreateRepo creates a repository when a new repository is pushed to an appropriate namespace

0 commit comments

Comments
 (0)