From 4f5c96627b4622d64593db2d436b1f3befa5f3c3 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 20 Aug 2024 00:25:41 +0800 Subject: [PATCH] Fix actions notify bug (#31866) Try to fix https://github.com/go-gitea/gitea/issues/31757#issuecomment-2295131062 --- services/actions/notifier.go | 2 +- services/actions/notifier_helper.go | 25 ++++++++++++++--------- tests/integration/actions_trigger_test.go | 4 ++-- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/services/actions/notifier.go b/services/actions/notifier.go index 6551da39e7..a4ebdf9e88 100644 --- a/services/actions/notifier.go +++ b/services/actions/notifier.go @@ -386,7 +386,7 @@ func (n *actionsNotifier) ForkRepository(ctx context.Context, doer *user_model.U // Add to hook queue for created repo after session commit. if u.IsOrganization() { newNotifyInput(repo, doer, webhook_module.HookEventRepository). - WithRef(oldRepo.DefaultBranch). + WithRef(git.RefNameFromBranch(oldRepo.DefaultBranch).String()). WithPayload(&api.RepositoryPayload{ Action: api.HookRepoCreated, Repository: convert.ToRepo(ctx, repo, access_model.Permission{AccessMode: perm_model.AccessModeOwner}), diff --git a/services/actions/notifier_helper.go b/services/actions/notifier_helper.go index 1d09a222c0..0030ef9a91 100644 --- a/services/actions/notifier_helper.go +++ b/services/actions/notifier_helper.go @@ -65,7 +65,7 @@ type notifyInput struct { Event webhook_module.HookEventType // optional - Ref string + Ref git.RefName Payload api.Payloader PullRequest *issues_model.PullRequest } @@ -89,7 +89,7 @@ func (input *notifyInput) WithDoer(doer *user_model.User) *notifyInput { } func (input *notifyInput) WithRef(ref string) *notifyInput { - input.Ref = ref + input.Ref = git.RefName(ref) return input } @@ -101,7 +101,7 @@ func (input *notifyInput) WithPayload(payload api.Payloader) *notifyInput { func (input *notifyInput) WithPullRequest(pr *issues_model.PullRequest) *notifyInput { input.PullRequest = pr if input.Ref == "" { - input.Ref = pr.GetGitRefName() + input.Ref = git.RefName(pr.GetGitRefName()) } return input } @@ -144,20 +144,25 @@ func notify(ctx context.Context, input *notifyInput) error { defer gitRepo.Close() ref := input.Ref - if ref != input.Repo.DefaultBranch && actions_module.IsDefaultBranchWorkflow(input.Event) { + if ref.BranchName() != input.Repo.DefaultBranch && actions_module.IsDefaultBranchWorkflow(input.Event) { if ref != "" { log.Warn("Event %q should only trigger workflows on the default branch, but its ref is %q. Will fall back to the default branch", input.Event, ref) } - ref = input.Repo.DefaultBranch + ref = git.RefNameFromBranch(input.Repo.DefaultBranch) } if ref == "" { log.Warn("Ref of event %q is empty, will fall back to the default branch", input.Event) - ref = input.Repo.DefaultBranch + ref = git.RefNameFromBranch(input.Repo.DefaultBranch) + } + + commitID, err := gitRepo.GetRefCommitID(ref.String()) + if err != nil { + return fmt.Errorf("gitRepo.GetRefCommitID: %w", err) } // Get the commit object for the ref - commit, err := gitRepo.GetCommit(ref) + commit, err := gitRepo.GetCommit(commitID) if err != nil { return fmt.Errorf("gitRepo.GetCommit: %w", err) } @@ -168,7 +173,7 @@ func notify(ctx context.Context, input *notifyInput) error { var detectedWorkflows []*actions_module.DetectedWorkflow actionsConfig := input.Repo.MustGetUnit(ctx, unit_model.TypeActions).ActionsConfig() - shouldDetectSchedules := input.Event == webhook_module.HookEventPush && git.RefName(input.Ref).BranchName() == input.Repo.DefaultBranch + shouldDetectSchedules := input.Event == webhook_module.HookEventPush && input.Ref.BranchName() == input.Repo.DefaultBranch workflows, schedules, err := actions_module.DetectWorkflows(gitRepo, commit, input.Event, input.Payload, @@ -220,12 +225,12 @@ func notify(ctx context.Context, input *notifyInput) error { } if shouldDetectSchedules { - if err := handleSchedules(ctx, schedules, commit, input, ref); err != nil { + if err := handleSchedules(ctx, schedules, commit, input, ref.String()); err != nil { return err } } - return handleWorkflows(ctx, detectedWorkflows, commit, input, ref) + return handleWorkflows(ctx, detectedWorkflows, commit, input, ref.String()) } func skipWorkflows(input *notifyInput, commit *git.Commit) bool { diff --git a/tests/integration/actions_trigger_test.go b/tests/integration/actions_trigger_test.go index ed0c607374..c254c90958 100644 --- a/tests/integration/actions_trigger_test.go +++ b/tests/integration/actions_trigger_test.go @@ -427,7 +427,7 @@ func TestCreateDeleteRefEvent(t *testing.T) { Title: "add workflow", RepoID: repo.ID, Event: "delete", - Ref: "main", + Ref: "refs/heads/main", WorkflowID: "createdelete.yml", CommitSHA: branch.CommitID, }) @@ -442,7 +442,7 @@ func TestCreateDeleteRefEvent(t *testing.T) { Title: "add workflow", RepoID: repo.ID, Event: "delete", - Ref: "main", + Ref: "refs/heads/main", WorkflowID: "createdelete.yml", CommitSHA: branch.CommitID, })