From 70532b86ed52623a395e6b2f3578cb6301285f9a Mon Sep 17 00:00:00 2001 From: Gitea Date: Thu, 19 Sep 2019 22:42:25 +0800 Subject: [PATCH 1/8] 'update' --- go.mod | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.mod b/go.mod index f5d49294d436..d0e847ca98bf 100644 --- a/go.mod +++ b/go.mod @@ -75,6 +75,8 @@ require ( github.com/mattn/go-sqlite3 v1.11.0 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 From b2cfbe158634f0e522d90f3db215d5546b5951f6 Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Mon, 30 Sep 2019 21:01:16 +0800 Subject: [PATCH 2/8] Send push tag event when release created --- services/release/release.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/services/release/release.go b/services/release/release.go index 4451633798c0..332a718c3493 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -35,6 +35,31 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { return err } rel.LowerTagName = strings.ToLower(rel.TagName) + + // Prepare Webhook + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + } else { + var shaSum string + mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) + apiRepo := rel.Repo.APIFormat(mode) + apiPusher := rel.Publisher.APIFormat() + shaSum, err = gitRepo.GetTagCommitID(rel.TagName) + if err != nil { + log.Error("GetTagCommitID[%s]: %v", rel.TagName, err) + } + if err = models.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.CreatePayload{ + Ref: git.TagPrefix + rel.TagName, + Sha: shaSum, + RefType: "tag", + Repo: apiRepo, + Sender: apiPusher, + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } else { + go models.HookQueue.Add(rel.Repo.ID) + } + } } commit, err := gitRepo.GetTagCommit(rel.TagName) if err != nil { From b15aabdf387aa7dac66f8ab3ab5e462ad2330420 Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Mon, 30 Sep 2019 22:00:44 +0800 Subject: [PATCH 3/8] send tag create event while release created in UI --- services/release/release.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/services/release/release.go b/services/release/release.go index 96b79fecd78b..498e9791d07d 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" ) @@ -40,6 +41,11 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { if err := rel.LoadAttributes(); err != nil { log.Error("LoadAttributes: %v", err) } else { + + defer func() { + go models.HookQueue.Add(rel.Repo.ID) + }() + var shaSum string mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) apiRepo := rel.Repo.APIFormat(mode) @@ -48,16 +54,29 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { if err != nil { log.Error("GetTagCommitID[%s]: %v", rel.TagName, err) } - if err = models.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.CreatePayload{ + + // Tag Create + if err = models.PrepareWebhooks(rel.Repo, models.HookEventCreate, &api.CreatePayload{ Ref: git.TagPrefix + rel.TagName, Sha: shaSum, RefType: "tag", Repo: apiRepo, Sender: apiPusher, }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } else { - go models.HookQueue.Add(rel.Repo.ID) + return fmt.Errorf("PrepareWebhooks: %v", err) + } + // Tag Push + if err = models.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.PushPayload{ + Ref: git.TagPrefix + rel.TagName, + Before: git.EmptySHA, + After: shaSum, + CompareURL: setting.AppURL, + Commits: make([]*api.PayloadCommit, 0), + Repo: apiRepo, + Pusher: apiPusher, + Sender: apiPusher, + }); err != nil { + return fmt.Errorf("PrepareWebhooks: %v", err) } } } From 15e5ac686ced175de4c5ab5d79567fcfb299a5a5 Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Tue, 1 Oct 2019 23:27:00 +0800 Subject: [PATCH 4/8] update to go v1.13 --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 0606303cb685..c8a44da1b539 100644 --- a/go.mod +++ b/go.mod @@ -75,8 +75,6 @@ require ( github.com/mattn/go-sqlite3 v1.11.0 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 From 57146dc8dacbe40af43d84219956bd9ed0578516 Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Tue, 1 Oct 2019 23:42:43 +0800 Subject: [PATCH 5/8] fix gofmt error --- services/release/release.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/release/release.go b/services/release/release.go index 4d60bd5cc584..abd397489b45 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -12,8 +12,8 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/process" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" ) From 948cc25217feec9ba9d25859316e8783ba41592d Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Thu, 14 Nov 2019 22:48:29 +0800 Subject: [PATCH 6/8] update #8671 move release tag created hook to modules/notification/webhook due to #8802 refactoring --- modules/notification/base/notifier.go | 1 + modules/notification/base/null.go | 4 +++ modules/notification/notification.go | 7 ++++ modules/notification/webhook/webhook.go | 39 ++++++++++++++++++++ services/release/release.go | 47 +------------------------ 5 files changed, 52 insertions(+), 46 deletions(-) diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go index 9510afc97867..1cf1a6e5ab55 100644 --- a/modules/notification/base/notifier.go +++ b/modules/notification/base/notifier.go @@ -40,6 +40,7 @@ type Notifier interface { NotifyDeleteComment(*models.User, *models.Comment) NotifyNewRelease(rel *models.Release) + NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) NotifyUpdateRelease(doer *models.User, rel *models.Release) NotifyDeleteRelease(doer *models.User, rel *models.Release) diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go index 2341b8d2a754..c618d5d0e875 100644 --- a/modules/notification/base/null.go +++ b/modules/notification/base/null.go @@ -74,6 +74,10 @@ func (*NullNotifier) NotifyRenameRepository(doer *models.User, repo *models.Repo func (*NullNotifier) NotifyNewRelease(rel *models.Release) { } +// NotifyNewReleaseTag places a place holder function +func (m *NullNotifier) NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { +} + // NotifyUpdateRelease places a place holder function func (*NullNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) { } diff --git a/modules/notification/notification.go b/modules/notification/notification.go index fdfcc62ffe1e..672ad9375746 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -129,6 +129,13 @@ func NotifyNewRelease(rel *models.Release) { } } +// NotifyNewReleaseTag notifies new tag for release to notifiers +func NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { + for _, notifier := range notifiers { + notifier.NotifyNewReleaseTag(gitRepo, rel) + } +} + // NotifyUpdateRelease notifies update release to notifiers func NotifyUpdateRelease(doer *models.User, rel *models.Release) { for _, notifier := range notifiers { diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index 43be0d2e1cb4..148026f098de 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -646,6 +646,45 @@ func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookRele } } +func (m *webhookNotifier) NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + return + } + // Prepare Webhook + var shaSum string + mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) + apiRepo := rel.Repo.APIFormat(mode) + apiPusher := rel.Publisher.APIFormat() + shaSum, err := gitRepo.GetTagCommitID(rel.TagName) + if err != nil { + log.Error("GetTagCommitID[%s]: %v", rel.TagName, err) + } + // Tag Create + if err = webhook_module.PrepareWebhooks(rel.Repo, models.HookEventCreate, &api.CreatePayload{ + Ref: git.TagPrefix + rel.TagName, + Sha: shaSum, + RefType: "tag", + Repo: apiRepo, + Sender: apiPusher, + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } + // Tag Push + if err = webhook_module.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.PushPayload{ + Ref: git.TagPrefix + rel.TagName, + Before: git.EmptySHA, + After: shaSum, + CompareURL: setting.AppURL, + Commits: make([]*api.PayloadCommit, 0), + Repo: apiRepo, + Pusher: apiPusher, + Sender: apiPusher, + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } +} + func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { sendReleaseHook(rel.Publisher, rel, api.HookReleasePublished) } diff --git a/services/release/release.go b/services/release/release.go index d0f94ec50f1d..86b89b2dde7a 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -14,8 +14,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/process" - "code.gitea.io/gitea/modules/setting" - api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" ) @@ -39,49 +37,6 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { return err } rel.LowerTagName = strings.ToLower(rel.TagName) - - // Prepare Webhook - if err := rel.LoadAttributes(); err != nil { - log.Error("LoadAttributes: %v", err) - } else { - - defer func() { - go models.HookQueue.Add(rel.Repo.ID) - }() - - var shaSum string - mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) - apiRepo := rel.Repo.APIFormat(mode) - apiPusher := rel.Publisher.APIFormat() - shaSum, err = gitRepo.GetTagCommitID(rel.TagName) - if err != nil { - log.Error("GetTagCommitID[%s]: %v", rel.TagName, err) - } - - // Tag Create - if err = models.PrepareWebhooks(rel.Repo, models.HookEventCreate, &api.CreatePayload{ - Ref: git.TagPrefix + rel.TagName, - Sha: shaSum, - RefType: "tag", - Repo: apiRepo, - Sender: apiPusher, - }); err != nil { - return fmt.Errorf("PrepareWebhooks: %v", err) - } - // Tag Push - if err = models.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.PushPayload{ - Ref: git.TagPrefix + rel.TagName, - Before: git.EmptySHA, - After: shaSum, - CompareURL: setting.AppURL, - Commits: make([]*api.PayloadCommit, 0), - Repo: apiRepo, - Pusher: apiPusher, - Sender: apiPusher, - }); err != nil { - return fmt.Errorf("PrepareWebhooks: %v", err) - } - } } commit, err := gitRepo.GetTagCommit(rel.TagName) if err != nil { @@ -114,7 +69,7 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs if err = createTag(gitRepo, rel); err != nil { return err } - + notification.NotifyNewReleaseTag(gitRepo, rel) rel.LowerTagName = strings.ToLower(rel.TagName) if err = models.InsertRelease(rel); err != nil { return err From f54e4acfcac85746eda31ea8671aeef49d092a8c Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Tue, 19 Nov 2019 21:56:19 +0800 Subject: [PATCH 7/8] use NotifyCreateRef and NotifyPushCommits instead of NotifyNewReleaseTag --- modules/notification/base/notifier.go | 1 - modules/notification/base/null.go | 4 --- modules/notification/notification.go | 7 ----- modules/notification/webhook/webhook.go | 39 ------------------------- services/release/release.go | 11 ++++++- 5 files changed, 10 insertions(+), 52 deletions(-) diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go index 620525ac2c46..1935c305576f 100644 --- a/modules/notification/base/notifier.go +++ b/modules/notification/base/notifier.go @@ -41,7 +41,6 @@ type Notifier interface { NotifyDeleteComment(*models.User, *models.Comment) NotifyNewRelease(rel *models.Release) - NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) NotifyUpdateRelease(doer *models.User, rel *models.Release) NotifyDeleteRelease(doer *models.User, rel *models.Release) diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go index 0cd1993643d8..b9ecaed425e0 100644 --- a/modules/notification/base/null.go +++ b/modules/notification/base/null.go @@ -62,10 +62,6 @@ func (*NullNotifier) NotifyDeleteComment(doer *models.User, c *models.Comment) { func (*NullNotifier) NotifyNewRelease(rel *models.Release) { } -// NotifyNewReleaseTag places a place holder function -func (m *NullNotifier) NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { -} - // NotifyUpdateRelease places a place holder function func (*NullNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) { } diff --git a/modules/notification/notification.go b/modules/notification/notification.go index 54ba51089446..fa0b280e71db 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -108,13 +108,6 @@ func NotifyNewRelease(rel *models.Release) { } } -// NotifyNewReleaseTag notifies new tag for release to notifiers -func NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { - for _, notifier := range notifiers { - notifier.NotifyNewReleaseTag(gitRepo, rel) - } -} - // NotifyUpdateRelease notifies update release to notifiers func NotifyUpdateRelease(doer *models.User, rel *models.Release) { for _, notifier := range notifiers { diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index 148026f098de..43be0d2e1cb4 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -646,45 +646,6 @@ func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookRele } } -func (m *webhookNotifier) NotifyNewReleaseTag(gitRepo *git.Repository, rel *models.Release) { - if err := rel.LoadAttributes(); err != nil { - log.Error("LoadAttributes: %v", err) - return - } - // Prepare Webhook - var shaSum string - mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) - apiRepo := rel.Repo.APIFormat(mode) - apiPusher := rel.Publisher.APIFormat() - shaSum, err := gitRepo.GetTagCommitID(rel.TagName) - if err != nil { - log.Error("GetTagCommitID[%s]: %v", rel.TagName, err) - } - // Tag Create - if err = webhook_module.PrepareWebhooks(rel.Repo, models.HookEventCreate, &api.CreatePayload{ - Ref: git.TagPrefix + rel.TagName, - Sha: shaSum, - RefType: "tag", - Repo: apiRepo, - Sender: apiPusher, - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } - // Tag Push - if err = webhook_module.PrepareWebhooks(rel.Repo, models.HookEventPush, &api.PushPayload{ - Ref: git.TagPrefix + rel.TagName, - Before: git.EmptySHA, - After: shaSum, - CompareURL: setting.AppURL, - Commits: make([]*api.PayloadCommit, 0), - Repo: apiRepo, - Pusher: apiPusher, - Sender: apiPusher, - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } -} - func (m *webhookNotifier) NotifyNewRelease(rel *models.Release) { sendReleaseHook(rel.Publisher, rel, api.HookReleasePublished) } diff --git a/services/release/release.go b/services/release/release.go index 86b89b2dde7a..15e23be37329 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -49,6 +49,15 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { if err != nil { return fmt.Errorf("CommitsCount: %v", err) } + // Prepare Notify + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + return err + } + notification.NotifyPushCommits( + rel.Publisher, rel.Repo, git.TagPrefix+rel.TagName, + git.EmptySHA, commit.ID.String(), models.NewPushCommits()) + notification.NotifyCreateRef(rel.Publisher, rel.Repo, "tag", git.TagPrefix+rel.TagName) } else { rel.CreatedUnix = timeutil.TimeStampNow() } @@ -69,7 +78,7 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs if err = createTag(gitRepo, rel); err != nil { return err } - notification.NotifyNewReleaseTag(gitRepo, rel) + rel.LowerTagName = strings.ToLower(rel.TagName) if err = models.InsertRelease(rel); err != nil { return err From 10573a2944bde3225a659a27c1b358ebdaa7f517 Mon Sep 17 00:00:00 2001 From: Benno Lin Date: Tue, 19 Nov 2019 23:26:36 +0800 Subject: [PATCH 8/8] move tag notification to correct place --- services/release/release.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/services/release/release.go b/services/release/release.go index 15e23be37329..2f70bbb66580 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -37,6 +37,15 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { return err } rel.LowerTagName = strings.ToLower(rel.TagName) + // Prepare Notify + if err := rel.LoadAttributes(); err != nil { + log.Error("LoadAttributes: %v", err) + return err + } + notification.NotifyPushCommits( + rel.Publisher, rel.Repo, git.TagPrefix+rel.TagName, + git.EmptySHA, commit.ID.String(), models.NewPushCommits()) + notification.NotifyCreateRef(rel.Publisher, rel.Repo, "tag", git.TagPrefix+rel.TagName) } commit, err := gitRepo.GetTagCommit(rel.TagName) if err != nil { @@ -49,15 +58,6 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { if err != nil { return fmt.Errorf("CommitsCount: %v", err) } - // Prepare Notify - if err := rel.LoadAttributes(); err != nil { - log.Error("LoadAttributes: %v", err) - return err - } - notification.NotifyPushCommits( - rel.Publisher, rel.Repo, git.TagPrefix+rel.TagName, - git.EmptySHA, commit.ID.String(), models.NewPushCommits()) - notification.NotifyCreateRef(rel.Publisher, rel.Repo, "tag", git.TagPrefix+rel.TagName) } else { rel.CreatedUnix = timeutil.TimeStampNow() }