mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-29 09:31:11 -05:00
Move repofiles webhooks to notification (#8807)
This commit is contained in:
parent
36b8c081f6
commit
8a84d82d53
5 changed files with 77 additions and 68 deletions
|
@ -43,4 +43,6 @@ type Notifier interface {
|
||||||
NotifyDeleteRelease(doer *models.User, rel *models.Release)
|
NotifyDeleteRelease(doer *models.User, rel *models.Release)
|
||||||
|
|
||||||
NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits)
|
NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits)
|
||||||
|
NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string)
|
||||||
|
NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string)
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,3 +114,11 @@ func (*NullNotifier) NotifyMigrateRepository(doer *models.User, u *models.User,
|
||||||
// NotifyPushCommits notifies commits pushed to notifiers
|
// NotifyPushCommits notifies commits pushed to notifiers
|
||||||
func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits) {
|
func (*NullNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *models.PushCommits) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotifyCreateRef notifies branch or tag creation to notifiers
|
||||||
|
func (*NullNotifier) NotifyCreateRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotifyDeleteRef notifies branch or tag deleteion to notifiers
|
||||||
|
func (*NullNotifier) NotifyDeleteRef(doer *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
}
|
||||||
|
|
|
@ -199,3 +199,17 @@ func NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, ol
|
||||||
notifier.NotifyPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits)
|
notifier.NotifyPushCommits(pusher, repo, refName, oldCommitID, newCommitID, commits)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotifyCreateRef notifies branch or tag creation to notifiers
|
||||||
|
func NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
for _, notifier := range notifiers {
|
||||||
|
notifier.NotifyCreateRef(pusher, repo, refType, refFullName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotifyDeleteRef notifies branch or tag deletion to notifiers
|
||||||
|
func NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
for _, notifier := range notifiers {
|
||||||
|
notifier.NotifyDeleteRef(pusher, repo, refType, refFullName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ package webhook
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/notification/base"
|
"code.gitea.io/gitea/modules/notification/base"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
@ -562,6 +563,34 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
apiPusher := pusher.APIFormat()
|
||||||
|
apiRepo := repo.APIFormat(models.AccessModeNone)
|
||||||
|
refName := git.RefEndName(refFullName)
|
||||||
|
|
||||||
|
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
shaSum, err := gitRepo.GetBranchCommitID(refName)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetBranchCommitID[%s]: %v", refFullName, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = webhook_module.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
|
||||||
|
Ref: refName,
|
||||||
|
Sha: shaSum,
|
||||||
|
RefType: refType,
|
||||||
|
Repo: apiRepo,
|
||||||
|
Sender: apiPusher,
|
||||||
|
}); err != nil {
|
||||||
|
log.Error("PrepareWebhooks: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
|
func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
|
||||||
if err := pr.LoadIssue(); err != nil {
|
if err := pr.LoadIssue(); err != nil {
|
||||||
log.Error("pr.LoadIssue: %v", err)
|
log.Error("pr.LoadIssue: %v", err)
|
||||||
|
@ -572,7 +601,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
|
if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
|
||||||
Action: api.HookIssueSynchronized,
|
Action: api.HookIssueSynchronized,
|
||||||
Index: pr.Issue.Index,
|
Index: pr.Issue.Index,
|
||||||
PullRequest: pr.Issue.PullRequest.APIFormat(),
|
PullRequest: pr.Issue.PullRequest.APIFormat(),
|
||||||
|
@ -582,3 +611,19 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m
|
||||||
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
|
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) {
|
||||||
|
apiPusher := pusher.APIFormat()
|
||||||
|
apiRepo := repo.APIFormat(models.AccessModeNone)
|
||||||
|
refName := git.RefEndName(refFullName)
|
||||||
|
|
||||||
|
if err := webhook_module.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
|
||||||
|
Ref: refName,
|
||||||
|
RefType: "branch",
|
||||||
|
PusherType: api.PusherTypeUser,
|
||||||
|
Repo: apiRepo,
|
||||||
|
Sender: apiPusher,
|
||||||
|
}); err != nil {
|
||||||
|
log.Error("PrepareWebhooks.(delete branch): %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,8 +14,6 @@ import (
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/notification"
|
"code.gitea.io/gitea/modules/notification"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
|
||||||
"code.gitea.io/gitea/modules/webhook"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// CommitRepoActionOptions represent options of a new commit action.
|
// CommitRepoActionOptions represent options of a new commit action.
|
||||||
|
@ -113,81 +111,23 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
||||||
return fmt.Errorf("NotifyWatchers: %v", err)
|
return fmt.Errorf("NotifyWatchers: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
apiPusher := pusher.APIFormat()
|
var isHookEventPush = true
|
||||||
apiRepo := repo.APIFormat(models.AccessModeNone)
|
|
||||||
|
|
||||||
var shaSum string
|
|
||||||
var isHookEventPush = false
|
|
||||||
switch opType {
|
switch opType {
|
||||||
case models.ActionCommitRepo: // Push
|
case models.ActionCommitRepo: // Push
|
||||||
isHookEventPush = true
|
|
||||||
|
|
||||||
if isNewBranch {
|
if isNewBranch {
|
||||||
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
notification.NotifyCreateRef(pusher, repo, "branch", opts.RefFullName)
|
||||||
if err != nil {
|
|
||||||
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
|
|
||||||
}
|
|
||||||
|
|
||||||
shaSum, err = gitRepo.GetBranchCommitID(refName)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("GetBranchCommitID[%s]: %v", opts.RefFullName, err)
|
|
||||||
}
|
|
||||||
if err = webhook.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
|
|
||||||
Ref: refName,
|
|
||||||
Sha: shaSum,
|
|
||||||
RefType: "branch",
|
|
||||||
Repo: apiRepo,
|
|
||||||
Sender: apiPusher,
|
|
||||||
}); err != nil {
|
|
||||||
return fmt.Errorf("PrepareWebhooks: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case models.ActionDeleteBranch: // Delete Branch
|
case models.ActionDeleteBranch: // Delete Branch
|
||||||
isHookEventPush = true
|
notification.NotifyDeleteRef(pusher, repo, "branch", opts.RefFullName)
|
||||||
|
|
||||||
if err = webhook.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
|
|
||||||
Ref: refName,
|
|
||||||
RefType: "branch",
|
|
||||||
PusherType: api.PusherTypeUser,
|
|
||||||
Repo: apiRepo,
|
|
||||||
Sender: apiPusher,
|
|
||||||
}); err != nil {
|
|
||||||
return fmt.Errorf("PrepareWebhooks.(delete branch): %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case models.ActionPushTag: // Create
|
case models.ActionPushTag: // Create
|
||||||
isHookEventPush = true
|
notification.NotifyCreateRef(pusher, repo, "tag", opts.RefFullName)
|
||||||
|
|
||||||
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
|
||||||
if err != nil {
|
|
||||||
log.Error("OpenRepository[%s]: %v", repo.RepoPath(), err)
|
|
||||||
}
|
|
||||||
shaSum, err = gitRepo.GetTagCommitID(refName)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("GetTagCommitID[%s]: %v", opts.RefFullName, err)
|
|
||||||
}
|
|
||||||
if err = webhook.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{
|
|
||||||
Ref: refName,
|
|
||||||
Sha: shaSum,
|
|
||||||
RefType: "tag",
|
|
||||||
Repo: apiRepo,
|
|
||||||
Sender: apiPusher,
|
|
||||||
}); err != nil {
|
|
||||||
return fmt.Errorf("PrepareWebhooks: %v", err)
|
|
||||||
}
|
|
||||||
case models.ActionDeleteTag: // Delete Tag
|
case models.ActionDeleteTag: // Delete Tag
|
||||||
isHookEventPush = true
|
notification.NotifyDeleteRef(pusher, repo, "tag", opts.RefFullName)
|
||||||
|
default:
|
||||||
if err = webhook.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{
|
isHookEventPush = false
|
||||||
Ref: refName,
|
|
||||||
RefType: "tag",
|
|
||||||
PusherType: api.PusherTypeUser,
|
|
||||||
Repo: apiRepo,
|
|
||||||
Sender: apiPusher,
|
|
||||||
}); err != nil {
|
|
||||||
return fmt.Errorf("PrepareWebhooks.(delete tag): %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if isHookEventPush {
|
if isHookEventPush {
|
||||||
|
|
Loading…
Reference in a new issue