loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

+87 -12
+20
models/fixtures/action_run.yml
··· 413 413 }, 414 414 "total_commits": 0 415 415 } 416 + - 417 + id: 891 418 + title: "update actions" 419 + repo_id: 1 420 + owner_id: 1 421 + workflow_id: "artifact.yaml" 422 + index: 187 423 + trigger_user_id: 1 424 + ref: "refs/heads/branch2" 425 + commit_sha: "985f0301dba5e7b34be866819cd15ad3d8f508ee" 426 + event: "push" 427 + is_fork_pull_request: 0 428 + status: 1 # success 429 + started: 1683636528 430 + stopped: 1683636626 431 + created: 1683636108 432 + updated: 1683636626 433 + need_approval: 0 434 + approved_by: 0 435 + event_payload: '{"head_commit":{"id":"5f22f7d0d95d614d25a5b68592adb345a4b5c7fd"}}'
+14
models/fixtures/action_run_job.yml
··· 26 26 status: 1 27 27 started: 1683636528 28 28 stopped: 1683636626 29 + - 30 + id: 292 31 + run_id: 891 32 + repo_id: 1 33 + owner_id: 1 34 + commit_sha: 985f0301dba5e7b34be866819cd15ad3d8f508ee 35 + is_fork_pull_request: 0 36 + name: job_2 37 + attempt: 1 38 + job_id: job_2 39 + task_id: 47 40 + status: 1 41 + started: 1683636528 42 + stopped: 1683636626
+5 -12
services/actions/commit_status.go
··· 12 12 "code.gitea.io/gitea/models/db" 13 13 git_model "code.gitea.io/gitea/models/git" 14 14 user_model "code.gitea.io/gitea/models/user" 15 - git "code.gitea.io/gitea/modules/git" 16 15 "code.gitea.io/gitea/modules/log" 17 16 api "code.gitea.io/gitea/modules/structs" 18 17 webhook_module "code.gitea.io/gitea/modules/webhook" 18 + commitstatus_service "code.gitea.io/gitea/services/repository/commitstatus" 19 19 20 20 "github.com/nektos/act/pkg/jobparser" 21 21 ) ··· 118 118 } 119 119 120 120 creator := user_model.NewActionsUser() 121 - commitID, err := git.NewIDFromString(sha) 122 - if err != nil { 123 - return fmt.Errorf("HashTypeInterfaceFromHashString: %w", err) 124 - } 125 - if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{ 126 - Repo: repo, 127 - SHA: commitID, 128 - Creator: creator, 129 - CommitStatus: &git_model.CommitStatus{ 121 + if err := commitstatus_service.CreateCommitStatus(ctx, repo, creator, 122 + sha, 123 + &git_model.CommitStatus{ 130 124 SHA: sha, 131 125 TargetURL: fmt.Sprintf("%s/jobs/%d", run.Link(), index), 132 126 Description: description, 133 127 Context: ctxname, 134 128 CreatorID: creator.ID, 135 129 State: state, 136 - }, 137 - }); err != nil { 130 + }); err != nil { 138 131 return fmt.Errorf("NewCommitStatus: %w", err) 139 132 } 140 133
+48
tests/integration/actions_commit_status_test.go
··· 1 + // Copyright 20124 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package integration 5 + 6 + import ( 7 + "net/url" 8 + "testing" 9 + 10 + actions_model "code.gitea.io/gitea/models/actions" 11 + "code.gitea.io/gitea/models/db" 12 + issues_model "code.gitea.io/gitea/models/issues" 13 + repo_model "code.gitea.io/gitea/models/repo" 14 + "code.gitea.io/gitea/models/unittest" 15 + user_model "code.gitea.io/gitea/models/user" 16 + "code.gitea.io/gitea/modules/setting" 17 + "code.gitea.io/gitea/services/actions" 18 + "code.gitea.io/gitea/services/automerge" 19 + 20 + "github.com/stretchr/testify/assert" 21 + ) 22 + 23 + func TestActionsAutomerge(t *testing.T) { 24 + onGiteaRun(t, func(t *testing.T, u *url.URL) { 25 + assert.True(t, setting.Actions.Enabled, "Actions should be enabled") 26 + 27 + ctx := db.DefaultContext 28 + 29 + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) 30 + pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) 31 + job := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionRunJob{ID: 292}) 32 + 33 + assert.False(t, pr.HasMerged, "PR should not be merged") 34 + assert.Equal(t, issues_model.PullRequestStatusMergeable, pr.Status, "PR should be mergable") 35 + 36 + scheduled, err := automerge.ScheduleAutoMerge(ctx, user, pr, repo_model.MergeStyleMerge, "Dummy") 37 + 38 + assert.NoError(t, err, "PR should be scheduled for automerge") 39 + assert.True(t, scheduled, "PR should be scheduled for automerge") 40 + 41 + actions.CreateCommitStatus(ctx, job) 42 + 43 + pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) 44 + 45 + assert.True(t, pr.HasMerged, "PR should be merged") 46 + }, 47 + ) 48 + }