]> source.dussan.org Git - gitea.git/commitdiff
Fix actions notify bug (#31866) (#31875)
authorGiteabot <teabot@gitea.io>
Mon, 19 Aug 2024 18:14:29 +0000 (02:14 +0800)
committerGitHub <noreply@github.com>
Mon, 19 Aug 2024 18:14:29 +0000 (02:14 +0800)
Backport #31866 by @lunny

Try to fix
https://github.com/go-gitea/gitea/issues/31757#issuecomment-2295131062

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
services/actions/notifier.go
services/actions/notifier_helper.go
tests/integration/actions_trigger_test.go

index 6551da39e7268d3809b7d6a9dc2bbe5cd07d3b3f..a4ebdf9e888ee2e0efe30ffc20eda85d1d55355e 100644 (file)
@@ -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}),
index 1d09a222c024c58fb19e7d26f1f396ce76b45fc9..0030ef9a9161d7e08c51abead8f6164e384ebfa5 100644 (file)
@@ -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 {
index ed0c607374374fcb6e69fa6dc7094991eed15e44..c254c90958314e03985f7a520c937dacc96a51d8 100644 (file)
@@ -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,
                })