Skip to content

Commit

Permalink
fix(actions): call automerge service on successful commit state
Browse files Browse the repository at this point in the history
- Backport of go-gitea/gitea#30225
  • Loading branch information
viceice committed Apr 15, 2024
1 parent 6f4827b commit 36f4732
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 12 deletions.
20 changes: 20 additions & 0 deletions models/fixtures/action_run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"}}'
14 changes: 14 additions & 0 deletions models/fixtures/action_run_job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
17 changes: 5 additions & 12 deletions services/actions/commit_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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)
}

Expand Down
48 changes: 48 additions & 0 deletions tests/integration/actions_commit_status_test.go
Original file line number Diff line number Diff line change
@@ -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")
},
)
}

0 comments on commit 36f4732

Please sign in to comment.