From ffab745c64af483a58fcc74cbbb99da6a74091bf Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 20 Sep 2023 21:20:11 +0800 Subject: [PATCH 1/9] Add new event commit status creation and webhook implementation --- modules/repository/commits.go | 8 ++--- modules/structs/hook.go | 29 +++++++++++++---- services/notify/notifier.go | 3 ++ services/notify/notify.go | 7 ++++ services/notify/null.go | 4 +++ .../repository/commitstatus/commitstatus.go | 4 +++ services/webhook/notifier.go | 32 +++++++++++++++++++ 7 files changed, 76 insertions(+), 11 deletions(-) diff --git a/modules/repository/commits.go b/modules/repository/commits.go index ede60429a13fb..6e4b75d5cacea 100644 --- a/modules/repository/commits.go +++ b/modules/repository/commits.go @@ -42,8 +42,8 @@ func NewPushCommits() *PushCommits { return &PushCommits{} } -// toAPIPayloadCommit converts a single PushCommit to an api.PayloadCommit object. -func (pc *PushCommits) toAPIPayloadCommit(ctx context.Context, emailUsers map[string]*user_model.User, repoPath, repoLink string, commit *PushCommit) (*api.PayloadCommit, error) { +// ToAPIPayloadCommit converts a single PushCommit to an api.PayloadCommit object. +func ToAPIPayloadCommit(ctx context.Context, emailUsers map[string]*user_model.User, repoPath, repoLink string, commit *PushCommit) (*api.PayloadCommit, error) { var err error authorUsername := "" author, ok := emailUsers[commit.AuthorEmail] @@ -105,7 +105,7 @@ func (pc *PushCommits) ToAPIPayloadCommits(ctx context.Context, repoPath, repoLi emailUsers := make(map[string]*user_model.User) for i, commit := range pc.Commits { - apiCommit, err := pc.toAPIPayloadCommit(ctx, emailUsers, repoPath, repoLink, commit) + apiCommit, err := ToAPIPayloadCommit(ctx, emailUsers, repoPath, repoLink, commit) if err != nil { return nil, nil, err } @@ -117,7 +117,7 @@ func (pc *PushCommits) ToAPIPayloadCommits(ctx context.Context, repoPath, repoLi } if pc.HeadCommit != nil && headCommit == nil { var err error - headCommit, err = pc.toAPIPayloadCommit(ctx, emailUsers, repoPath, repoLink, pc.HeadCommit) + headCommit, err = ToAPIPayloadCommit(ctx, emailUsers, repoPath, repoLink, pc.HeadCommit) if err != nil { return nil, nil, err } diff --git a/modules/structs/hook.go b/modules/structs/hook.go index db8b20e7e5572..b431420a8840b 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -262,13 +262,6 @@ func (p *ReleasePayload) JSONPayload() ([]byte, error) { return json.MarshalIndent(p, "", " ") } -// __________ .__ -// \______ \__ __ _____| |__ -// | ___/ | \/ ___/ | \ -// | | | | /\___ \| Y \ -// |____| |____//____ >___| / -// \/ \/ - // PushPayload represents a payload information of push event. type PushPayload struct { Ref string `json:"ref"` @@ -509,3 +502,25 @@ type WorkflowDispatchPayload struct { func (p *WorkflowDispatchPayload) JSONPayload() ([]byte, error) { return json.MarshalIndent(p, "", " ") } + +// CommitStatusPayload represents a payload information of commit status event. +type CommitStatusPayload struct { + // TODO: add Branches + Commit *PayloadCommit `json:"commit"` + Context string `json:"context"` + CreatedAt time.Time `json:"created_at"` + Description string `json:"description"` + ID int64 `json:"id"` + // Name string `json:"name"` + Repo *Repository `json:"repository"` + Sender *User `json:"sender"` + SHA string `json:"sha"` + State string `json:"state"` + TargetURL string `json:"target_url"` + UpdatedAt *time.Time `json:"updated_at"` +} + +// JSONPayload implements Payload +func (p *CommitStatusPayload) JSONPayload() ([]byte, error) { + return json.MarshalIndent(p, "", " ") +} diff --git a/services/notify/notifier.go b/services/notify/notifier.go index ed053a812a6fd..29bbb5702b3bd 100644 --- a/services/notify/notifier.go +++ b/services/notify/notifier.go @@ -6,6 +6,7 @@ package notify import ( "context" + git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" packages_model "code.gitea.io/gitea/models/packages" repo_model "code.gitea.io/gitea/models/repo" @@ -74,4 +75,6 @@ type Notifier interface { PackageDelete(ctx context.Context, doer *user_model.User, pd *packages_model.PackageDescriptor) ChangeDefaultBranch(ctx context.Context, repo *repo_model.Repository) + + CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) } diff --git a/services/notify/notify.go b/services/notify/notify.go index 0c8262ef7a5d3..3b5f24340bb86 100644 --- a/services/notify/notify.go +++ b/services/notify/notify.go @@ -6,6 +6,7 @@ package notify import ( "context" + git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" packages_model "code.gitea.io/gitea/models/packages" repo_model "code.gitea.io/gitea/models/repo" @@ -367,3 +368,9 @@ func ChangeDefaultBranch(ctx context.Context, repo *repo_model.Repository) { notifier.ChangeDefaultBranch(ctx, repo) } } + +func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { + for _, notifier := range notifiers { + notifier.CreateCommitStatus(ctx, repo, commit, sender, status) + } +} diff --git a/services/notify/null.go b/services/notify/null.go index dddd421bef926..7354efd70157c 100644 --- a/services/notify/null.go +++ b/services/notify/null.go @@ -6,6 +6,7 @@ package notify import ( "context" + git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" packages_model "code.gitea.io/gitea/models/packages" repo_model "code.gitea.io/gitea/models/repo" @@ -208,3 +209,6 @@ func (*NullNotifier) PackageDelete(ctx context.Context, doer *user_model.User, p // ChangeDefaultBranch places a place holder function func (*NullNotifier) ChangeDefaultBranch(ctx context.Context, repo *repo_model.Repository) { } + +func (*NullNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { +} diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index adc59abed8f47..eb341a0fa8ef2 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -18,8 +18,10 @@ import ( "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/services/automerge" + "code.gitea.io/gitea/services/notify" ) func getCacheKey(repoID int64, brancheName string) string { @@ -114,6 +116,8 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato } } + notify.CreateCommitStatus(ctx, repo, repo_module.CommitToPushCommit(commit), creator, status) + if status.State.IsSuccess() { if err := automerge.StartPRCheckAndAutoMergeBySHA(ctx, sha, repo); err != nil { return fmt.Errorf("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err) diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go index 38fad7f5e8eed..415d3535c772b 100644 --- a/services/webhook/notifier.go +++ b/services/webhook/notifier.go @@ -6,6 +6,7 @@ package webhook import ( "context" + git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" packages_model "code.gitea.io/gitea/models/packages" "code.gitea.io/gitea/models/perm" @@ -15,6 +16,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/repository" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" webhook_module "code.gitea.io/gitea/modules/webhook" @@ -861,6 +863,36 @@ func (m *webhookNotifier) SyncPushCommits(ctx context.Context, pusher *user_mode } } +func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { + apiSender := convert.ToUser(ctx, sender, nil) + apiCommit, err := repo_module.ToAPIPayloadCommit(ctx, map[string]*user_model.User{}, repo.RepoPath(), repo.HTMLURL(), commit) + if err != nil { + log.Error("commits.ToAPIPayloadCommits failed: %v", err) + return + } + + payload := api.CommitStatusPayload{ + Context: status.Context, + CreatedAt: status.CreatedUnix.AsTime().UTC(), + Description: status.Description, + ID: status.ID, + SHA: commit.Sha1, + State: status.State.String(), + TargetURL: status.TargetURL, + + Commit: apiCommit, + Repo: convert.ToRepo(ctx, repo, access_model.Permission{AccessMode: perm.AccessModeOwner}), + Sender: apiSender, + } + if !status.UpdatedUnix.IsZero() { + t := status.UpdatedUnix.AsTime().UTC() + payload.UpdatedAt = &t + } + if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventPush, &payload); err != nil { + log.Error("PrepareWebhooks: %v", err) + } +} + func (m *webhookNotifier) SyncCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refFullName git.RefName, refID string) { m.CreateRef(ctx, pusher, repo, refFullName, refID) } From e3d899a5c6dd12b52d35152b2f98cfb51c26d71a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 21 Sep 2023 09:12:38 +0800 Subject: [PATCH 2/9] Fix lint --- services/webhook/notifier.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go index 415d3535c772b..ff964ccb7f2a8 100644 --- a/services/webhook/notifier.go +++ b/services/webhook/notifier.go @@ -16,7 +16,6 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/repository" - repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" webhook_module "code.gitea.io/gitea/modules/webhook" @@ -865,7 +864,7 @@ func (m *webhookNotifier) SyncPushCommits(ctx context.Context, pusher *user_mode func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { apiSender := convert.ToUser(ctx, sender, nil) - apiCommit, err := repo_module.ToAPIPayloadCommit(ctx, map[string]*user_model.User{}, repo.RepoPath(), repo.HTMLURL(), commit) + apiCommit, err := repository.ToAPIPayloadCommit(ctx, map[string]*user_model.User{}, repo.RepoPath(), repo.HTMLURL(), commit) if err != nil { log.Error("commits.ToAPIPayloadCommits failed: %v", err) return From 6e801aeeaeda8f261a14d4384eeafa66e3b72c37 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 22 Sep 2023 11:13:47 +0800 Subject: [PATCH 3/9] Fix lint --- modules/structs/hook.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/structs/hook.go b/modules/structs/hook.go index b431420a8840b..b3537382f7488 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -506,18 +506,20 @@ func (p *WorkflowDispatchPayload) JSONPayload() ([]byte, error) { // CommitStatusPayload represents a payload information of commit status event. type CommitStatusPayload struct { // TODO: add Branches - Commit *PayloadCommit `json:"commit"` - Context string `json:"context"` - CreatedAt time.Time `json:"created_at"` - Description string `json:"description"` - ID int64 `json:"id"` + Commit *PayloadCommit `json:"commit"` + Context string `json:"context"` + // swagger:strfmt date-time + CreatedAt time.Time `json:"created_at"` + Description string `json:"description"` + ID int64 `json:"id"` // Name string `json:"name"` Repo *Repository `json:"repository"` Sender *User `json:"sender"` SHA string `json:"sha"` State string `json:"state"` TargetURL string `json:"target_url"` - UpdatedAt *time.Time `json:"updated_at"` + // swagger:strfmt date-time + UpdatedAt *time.Time `json:"updated_at"` } // JSONPayload implements Payload From aaf1c932fbce8097d2bf0caa02246c3144a43866 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 8 Mar 2024 18:54:43 +0800 Subject: [PATCH 4/9] Fix actions trigger --- modules/structs/hook.go | 2 +- modules/webhook/type.go | 1 + services/actions/commit_status.go | 6 ++---- services/repository/commitstatus/commitstatus.go | 11 ++++------- services/webhook/notifier.go | 2 +- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/modules/structs/hook.go b/modules/structs/hook.go index b3537382f7488..52e41e27f512c 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -505,7 +505,7 @@ func (p *WorkflowDispatchPayload) JSONPayload() ([]byte, error) { // CommitStatusPayload represents a payload information of commit status event. type CommitStatusPayload struct { - // TODO: add Branches + // TODO: add Branches per https://docs.github.com/en/webhooks/webhook-events-and-payloads#status Commit *PayloadCommit `json:"commit"` Context string `json:"context"` // swagger:strfmt date-time diff --git a/modules/webhook/type.go b/modules/webhook/type.go index 0013691c02f47..fbec8892722b7 100644 --- a/modules/webhook/type.go +++ b/modules/webhook/type.go @@ -32,6 +32,7 @@ const ( HookEventRelease HookEventType = "release" HookEventPackage HookEventType = "package" HookEventSchedule HookEventType = "schedule" + HookEventStatus HookEventType = "status" ) // Event returns the HookEventType as an event string diff --git a/services/actions/commit_status.go b/services/actions/commit_status.go index 8d86ec4dfada9..7f52c9d31b590 100644 --- a/services/actions/commit_status.go +++ b/services/actions/commit_status.go @@ -128,18 +128,16 @@ func createCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) er if err != nil { return fmt.Errorf("HashTypeInterfaceFromHashString: %w", err) } - if err := commitstatus_service.CreateCommitStatus(ctx, repo, creator, commitID.String(), &git_model.CommitStatus{ + status := git_model.CommitStatus{ SHA: sha, TargetURL: fmt.Sprintf("%s/jobs/%d", run.Link(), index), Description: description, Context: ctxname, CreatorID: creator.ID, State: state, - }); err != nil { - return fmt.Errorf("NewCommitStatus: %w", err) } - return nil + return commitstatus_service.CreateCommitStatus(ctx, repo, creator, commitID.String(), &status) } func toCommitStatus(status actions_model.Status) api.CommitStatusState { diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index eb341a0fa8ef2..e42e9322d29ec 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -14,7 +14,6 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/cache" - "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" @@ -79,16 +78,10 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato } defer closer.Close() - objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName) - commit, err := gitRepo.GetCommit(sha) if err != nil { return fmt.Errorf("GetCommit[%s]: %w", sha, err) } - if len(sha) != objectFormat.FullLength() { - // use complete commit sha - sha = commit.ID.String() - } if err := db.WithTx(ctx, func(ctx context.Context) error { if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{ @@ -105,6 +98,10 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato return err } + pushCommit := repo_module.CommitToPushCommit(commit) + + notify.CreateCommitStatus(ctx, repo, pushCommit, creator, status) + defaultBranchCommit, err := gitRepo.GetBranchCommit(repo.DefaultBranch) if err != nil { return fmt.Errorf("GetBranchCommit[%s]: %w", repo.DefaultBranch, err) diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go index ff964ccb7f2a8..cc263947e9b90 100644 --- a/services/webhook/notifier.go +++ b/services/webhook/notifier.go @@ -887,7 +887,7 @@ func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_mod t := status.UpdatedUnix.AsTime().UTC() payload.UpdatedAt = &t } - if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventPush, &payload); err != nil { + if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventStatus, &payload); err != nil { log.Error("PrepareWebhooks: %v", err) } } From 9363b99f1ba24e3bbf0b34da44cba1025bfdabeb Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 4 Nov 2024 21:01:09 -0800 Subject: [PATCH 5/9] Remove unnecesary field --- modules/structs/hook.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/structs/hook.go b/modules/structs/hook.go index 52e41e27f512c..ce5742e5c7ce9 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -509,15 +509,14 @@ type CommitStatusPayload struct { Commit *PayloadCommit `json:"commit"` Context string `json:"context"` // swagger:strfmt date-time - CreatedAt time.Time `json:"created_at"` - Description string `json:"description"` - ID int64 `json:"id"` - // Name string `json:"name"` - Repo *Repository `json:"repository"` - Sender *User `json:"sender"` - SHA string `json:"sha"` - State string `json:"state"` - TargetURL string `json:"target_url"` + CreatedAt time.Time `json:"created_at"` + Description string `json:"description"` + ID int64 `json:"id"` + Repo *Repository `json:"repository"` + Sender *User `json:"sender"` + SHA string `json:"sha"` + State string `json:"state"` + TargetURL string `json:"target_url"` // swagger:strfmt date-time UpdatedAt *time.Time `json:"updated_at"` } From 2537c8ff9cc9fc1c7d6bd79dd212ab48eae24d78 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 4 Nov 2024 21:26:32 -0800 Subject: [PATCH 6/9] auto merge trigger by notifier --- services/automerge/notify.go | 11 +++++++++++ services/repository/commitstatus/commitstatus.go | 7 ------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/services/automerge/notify.go b/services/automerge/notify.go index cb078214f63b7..b48abdf5645c6 100644 --- a/services/automerge/notify.go +++ b/services/automerge/notify.go @@ -6,9 +6,12 @@ package automerge import ( "context" + git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" + repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/repository" notify_service "code.gitea.io/gitea/services/notify" ) @@ -44,3 +47,11 @@ func (n *automergeNotifier) PullReviewDismiss(ctx context.Context, doer *user_mo // as reviews could have blocked a pending automerge let's recheck StartPRCheckAndAutoMerge(ctx, review.Issue.PullRequest) } + +func (m *automergeNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { + if status.State.IsSuccess() { + if err := StartPRCheckAndAutoMergeBySHA(ctx, commit.Sha1, repo); err != nil { + log.Error("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, sender.ID, commit.Sha1, err) + } + } +} diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index e42e9322d29ec..2c6b9d659d40b 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -19,7 +19,6 @@ import ( "code.gitea.io/gitea/modules/log" repo_module "code.gitea.io/gitea/modules/repository" api "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/services/automerge" "code.gitea.io/gitea/services/notify" ) @@ -115,12 +114,6 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato notify.CreateCommitStatus(ctx, repo, repo_module.CommitToPushCommit(commit), creator, status) - if status.State.IsSuccess() { - if err := automerge.StartPRCheckAndAutoMergeBySHA(ctx, sha, repo); err != nil { - return fmt.Errorf("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err) - } - } - return nil } From 6061683f68eca53f43fcb3c428222a0dc644f61e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 4 Nov 2024 21:29:49 -0800 Subject: [PATCH 7/9] Fix duplicated notifier --- services/repository/commitstatus/commitstatus.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index 2c6b9d659d40b..0177a10bb778f 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -97,9 +97,7 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato return err } - pushCommit := repo_module.CommitToPushCommit(commit) - - notify.CreateCommitStatus(ctx, repo, pushCommit, creator, status) + notify.CreateCommitStatus(ctx, repo, repo_module.CommitToPushCommit(commit), creator, status) defaultBranchCommit, err := gitRepo.GetBranchCommit(repo.DefaultBranch) if err != nil { @@ -112,8 +110,6 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato } } - notify.CreateCommitStatus(ctx, repo, repo_module.CommitToPushCommit(commit), creator, status) - return nil } From a30ba0a6933175fbf7aaa0c19c9a1d285622e776 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 4 Nov 2024 22:35:27 -0800 Subject: [PATCH 8/9] revert unnecessary change --- services/repository/commitstatus/commitstatus.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index 0177a10bb778f..f369a303e6ce4 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -14,6 +14,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/cache" + "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" @@ -77,10 +78,16 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato } defer closer.Close() + objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName) + commit, err := gitRepo.GetCommit(sha) if err != nil { return fmt.Errorf("GetCommit[%s]: %w", sha, err) } + if len(sha) != objectFormat.FullLength() { + // use complete commit sha + sha = commit.ID.String() + } if err := db.WithTx(ctx, func(ctx context.Context) error { if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{ From 76694f14a0359ff43cc628a46aaa0e27c6b670e9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 4 Nov 2024 22:51:30 -0800 Subject: [PATCH 9/9] Fix lint --- services/automerge/notify.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/automerge/notify.go b/services/automerge/notify.go index b48abdf5645c6..b6bbca333b41d 100644 --- a/services/automerge/notify.go +++ b/services/automerge/notify.go @@ -48,7 +48,7 @@ func (n *automergeNotifier) PullReviewDismiss(ctx context.Context, doer *user_mo StartPRCheckAndAutoMerge(ctx, review.Issue.PullRequest) } -func (m *automergeNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { +func (n *automergeNotifier) CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, commit *repository.PushCommit, sender *user_model.User, status *git_model.CommitStatus) { if status.State.IsSuccess() { if err := StartPRCheckAndAutoMergeBySHA(ctx, commit.Sha1, repo); err != nil { log.Error("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, sender.ID, commit.Sha1, err)