From fa4e892d9906da26bf73f31cb9c9b657805d76af Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 3 Nov 2019 16:54:12 +0800 Subject: [PATCH 1/4] Move release webhook to notification --- modules/notification/webhook/webhook.go | 47 +++++++++++++++++++++++++ services/release/release.go | 42 +++------------------- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index 6eb03d3ebc667..d7be82382782e 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -627,3 +627,50 @@ func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repo log.Error("PrepareWebhooks.(delete branch): %v", err) } } + +func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + return + } + + mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) + if err := webhook_module.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ + Action: api.HookReleasePublished, + Release: rel.APIFormat(), + Repository: rel.Repo.APIFormat(mode), + Sender: rel.Publisher.APIFormat(), + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } +} + +func (m *webhookNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) { + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + return + } + + // even if attachments added failed, hooks will be still triggered + mode, _ := models.AccessLevel(doer, rel.Repo) + if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ + Action: api.HookReleaseUpdated, + Release: rel.APIFormat(), + Repository: rel.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } +} + +func (m *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) { + mode, _ := models.AccessLevel(doer, rel.Repo) + if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ + Action: api.HookReleaseDeleted, + Release: rel.APIFormat(), + Repository: rel.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } +} diff --git a/services/release/release.go b/services/release/release.go index a3f027c949869..681e8c0d9aaa1 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -12,10 +12,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/process" - api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" - "code.gitea.io/gitea/modules/webhook" ) func createTag(gitRepo *git.Repository, rel *models.Release) error { @@ -81,19 +80,7 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs } if !rel.IsDraft { - if err := rel.LoadAttributes(); err != nil { - log.Error("LoadAttributes: %v", err) - } else { - mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) - if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleasePublished, - Release: rel.APIFormat(), - Repository: rel.Repo.APIFormat(mode), - Sender: rel.Publisher.APIFormat(), - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } - } + notification.NotifyNewRelease(rel) } return nil @@ -114,20 +101,7 @@ func UpdateRelease(doer *models.User, gitRepo *git.Repository, rel *models.Relea log.Error("AddReleaseAttachments: %v", err) } - if err = rel.LoadAttributes(); err != nil { - return err - } - - // even if attachments added failed, hooks will be still triggered - mode, _ := models.AccessLevel(doer, rel.Repo) - if err1 := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleaseUpdated, - Release: rel.APIFormat(), - Repository: rel.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - }); err1 != nil { - log.Error("PrepareWebhooks: %v", err) - } + notification.NotifyUpdateRelease(doer, rel) return err } @@ -183,15 +157,7 @@ func DeleteReleaseByID(id int64, doer *models.User, delTag bool) error { } } - mode, _ := models.AccessLevel(doer, rel.Repo) - if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleaseDeleted, - Release: rel.APIFormat(), - Repository: rel.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } + notification.NotifyDeleteRelease(doer, rel) return nil } From 3a4d54728474a5e24261f1cb38f13812fd9c83e9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 5 Nov 2019 09:35:28 +0800 Subject: [PATCH 2/4] Extract release webhook method --- modules/notification/webhook/webhook.go | 35 ++++++------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index d7be82382782e..e51ca89d97dd4 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -11,7 +11,6 @@ import ( "code.gitea.io/gitea/modules/notification/base" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/modules/webhook" webhook_module "code.gitea.io/gitea/modules/webhook" ) @@ -628,7 +627,7 @@ func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repo } } -func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { +func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookReleaseAction) { if err := rel.LoadAttributes(); err != nil { log.Error("LoadAttributes: %v", err) return @@ -636,7 +635,7 @@ func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) if err := webhook_module.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleasePublished, + Action: action, Release: rel.APIFormat(), Repository: rel.Repo.APIFormat(mode), Sender: rel.Publisher.APIFormat(), @@ -645,32 +644,14 @@ func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { } } -func (m *webhookNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) { - if err := rel.LoadAttributes(); err != nil { - log.Error("LoadAttributes: %v", err) - return - } +func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { + sendReleaseHook(rel.Publisher, rel, api.HookReleasePublished) +} - // even if attachments added failed, hooks will be still triggered - mode, _ := models.AccessLevel(doer, rel.Repo) - if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleaseUpdated, - Release: rel.APIFormat(), - Repository: rel.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } +func (m *webhookNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) { + sendReleaseHook(doer, rel, api.HookReleaseUpdated) } func (m *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) { - mode, _ := models.AccessLevel(doer, rel.Repo) - if err := webhook.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ - Action: api.HookReleaseDeleted, - Release: rel.APIFormat(), - Repository: rel.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } + sendReleaseHook(doer, rel, api.HookReleaseDeleted) } From bf2e2f25a85783196999c2b8d29d167004d91c2a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 5 Nov 2019 14:57:03 +0800 Subject: [PATCH 3/4] fix bug --- modules/notification/webhook/webhook.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index e51ca89d97dd4..1444dc8a8b8c4 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -288,7 +288,7 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest) { } mode, _ := models.AccessLevel(pull.Issue.Poster, pull.Issue.Repo) - if err := webhook.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ + if err := webhook_module.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ Action: api.HookIssueOpened, Index: pull.Issue.Index, PullRequest: pull.APIFormat(), From 738a0e0fbd40bf5a3b9641a5652fbaddb270c6e1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 5 Nov 2019 19:11:22 +0800 Subject: [PATCH 4/4] fix import --- modules/notification/webhook/webhook.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index 1444dc8a8b8c4..8059ec1c00f89 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -547,7 +547,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review log.Error("models.AccessLevel: %v", err) return } - if err := webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ + if err := webhook_module.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ Action: api.HookIssueSynchronized, Index: review.Issue.Index, PullRequest: pr.APIFormat(),