Merge pull request 'fix(actions): call automerge service on successful commit state' (#3231) from viceice/forgejo:fix/actions/automerge-head into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3231 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
		
				commit
				
					
						51c2daec6e
					
				
			
		
					 4 changed files with 87 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -413,3 +413,23 @@
 | 
			
		|||
      },
 | 
			
		||||
      "total_commits": 0
 | 
			
		||||
    }
 | 
			
		||||
-
 | 
			
		||||
  id: 891
 | 
			
		||||
  title: "update actions"
 | 
			
		||||
  repo_id: 1
 | 
			
		||||
  owner_id: 1
 | 
			
		||||
  workflow_id: "artifact.yaml"
 | 
			
		||||
  index: 187
 | 
			
		||||
  trigger_user_id: 1
 | 
			
		||||
  ref: "refs/heads/branch2"
 | 
			
		||||
  commit_sha: "985f0301dba5e7b34be866819cd15ad3d8f508ee"
 | 
			
		||||
  event: "push"
 | 
			
		||||
  is_fork_pull_request: 0
 | 
			
		||||
  status: 1 # success
 | 
			
		||||
  started: 1683636528
 | 
			
		||||
  stopped: 1683636626
 | 
			
		||||
  created: 1683636108
 | 
			
		||||
  updated: 1683636626
 | 
			
		||||
  need_approval: 0
 | 
			
		||||
  approved_by: 0
 | 
			
		||||
  event_payload: '{"head_commit":{"id":"5f22f7d0d95d614d25a5b68592adb345a4b5c7fd"}}'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,3 +26,17 @@
 | 
			
		|||
  status: 1
 | 
			
		||||
  started: 1683636528
 | 
			
		||||
  stopped: 1683636626
 | 
			
		||||
-
 | 
			
		||||
  id: 292
 | 
			
		||||
  run_id: 891
 | 
			
		||||
  repo_id: 1
 | 
			
		||||
  owner_id: 1
 | 
			
		||||
  commit_sha: 985f0301dba5e7b34be866819cd15ad3d8f508ee
 | 
			
		||||
  is_fork_pull_request: 0
 | 
			
		||||
  name: job_2
 | 
			
		||||
  attempt: 1
 | 
			
		||||
  job_id: job_2
 | 
			
		||||
  task_id: 47
 | 
			
		||||
  status: 1
 | 
			
		||||
  started: 1683636528
 | 
			
		||||
  stopped: 1683636626
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,10 +12,10 @@ import (
 | 
			
		|||
	"code.gitea.io/gitea/models/db"
 | 
			
		||||
	git_model "code.gitea.io/gitea/models/git"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	git "code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	api "code.gitea.io/gitea/modules/structs"
 | 
			
		||||
	webhook_module "code.gitea.io/gitea/modules/webhook"
 | 
			
		||||
	commitstatus_service "code.gitea.io/gitea/services/repository/commitstatus"
 | 
			
		||||
 | 
			
		||||
	"github.com/nektos/act/pkg/jobparser"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -118,23 +118,16 @@ func createCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) er
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	creator := user_model.NewActionsUser()
 | 
			
		||||
	commitID, err := git.NewIDFromString(sha)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("HashTypeInterfaceFromHashString: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{
 | 
			
		||||
		Repo:    repo,
 | 
			
		||||
		SHA:     commitID,
 | 
			
		||||
		Creator: creator,
 | 
			
		||||
		CommitStatus: &git_model.CommitStatus{
 | 
			
		||||
	if err := commitstatus_service.CreateCommitStatus(ctx, repo, creator,
 | 
			
		||||
		sha,
 | 
			
		||||
		&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 {
 | 
			
		||||
		}); err != nil {
 | 
			
		||||
		return fmt.Errorf("NewCommitStatus: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										48
									
								
								tests/integration/actions_commit_status_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tests/integration/actions_commit_status_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
// Copyright 20124 The Forgejo Authors. All rights reserved.
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package integration
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	actions_model "code.gitea.io/gitea/models/actions"
 | 
			
		||||
	"code.gitea.io/gitea/models/db"
 | 
			
		||||
	issues_model "code.gitea.io/gitea/models/issues"
 | 
			
		||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
			
		||||
	"code.gitea.io/gitea/models/unittest"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/services/actions"
 | 
			
		||||
	"code.gitea.io/gitea/services/automerge"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestActionsAutomerge(t *testing.T) {
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, u *url.URL) {
 | 
			
		||||
		assert.True(t, setting.Actions.Enabled, "Actions should be enabled")
 | 
			
		||||
 | 
			
		||||
		ctx := db.DefaultContext
 | 
			
		||||
 | 
			
		||||
		user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
 | 
			
		||||
		pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2})
 | 
			
		||||
		job := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionRunJob{ID: 292})
 | 
			
		||||
 | 
			
		||||
		assert.False(t, pr.HasMerged, "PR should not be merged")
 | 
			
		||||
		assert.Equal(t, issues_model.PullRequestStatusMergeable, pr.Status, "PR should be mergable")
 | 
			
		||||
 | 
			
		||||
		scheduled, err := automerge.ScheduleAutoMerge(ctx, user, pr, repo_model.MergeStyleMerge, "Dummy")
 | 
			
		||||
 | 
			
		||||
		assert.NoError(t, err, "PR should be scheduled for automerge")
 | 
			
		||||
		assert.True(t, scheduled, "PR should be scheduled for automerge")
 | 
			
		||||
 | 
			
		||||
		actions.CreateCommitStatus(ctx, job)
 | 
			
		||||
 | 
			
		||||
		pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2})
 | 
			
		||||
 | 
			
		||||
		assert.True(t, pr.HasMerged, "PR should be merged")
 | 
			
		||||
	},
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue