Skip to content

Commit 02f7298

Browse files
committed
Merge remote-tracking branch 'giteaoffical/main'
* giteaoffical/main: Fix db.Find bug (go-gitea#23115) Avoid warning for system setting when start up (go-gitea#23054) Require approval to run actions for fork pull request (go-gitea#22803) Fix nil context in RenderMarkdownToHtml (go-gitea#23092) Add HesterG to maintainers (go-gitea#23104) improve FindProjects (go-gitea#23085)
2 parents 514311a + a8c4f8c commit 02f7298

File tree

37 files changed

+276
-86
lines changed

37 files changed

+276
-86
lines changed

MAINTAINERS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ Jason Song <i@wolfogre.com> (@wolfogre)
4949
Yarden Shoham <hrsi88@gmail.com> (@yardenshoham)
5050
Yu Tian <zettat123@gmail.com> (@Zettat123)
5151
Eddie Yang <576951401@qq.com> (@yp05327)
52-
Dong Ge <gedong_1994@163.com> (@sillyguodong)
52+
Dong Ge <gedong_1994@163.com> (@sillyguodong)
53+
Xinyi Gong <hestergong@gmail.com> (@HesterG)

models/actions/run.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ type ActionRun struct {
3232
OwnerID int64 `xorm:"index"`
3333
WorkflowID string `xorm:"index"` // the name of workflow file
3434
Index int64 `xorm:"index unique(repo_index)"` // a unique number for each run of a repository
35-
TriggerUserID int64
36-
TriggerUser *user_model.User `xorm:"-"`
35+
TriggerUserID int64 `xorm:"index"`
36+
TriggerUser *user_model.User `xorm:"-"`
3737
Ref string
3838
CommitSHA string
3939
IsForkPullRequest bool
40+
NeedApproval bool // may need approval if it's a fork pull request
41+
ApprovedBy int64 `xorm:"index"` // who approved
4042
Event webhook_module.HookEventType
4143
EventPayload string `xorm:"LONGTEXT"`
4244
Status Status `xorm:"index"`
@@ -164,10 +166,6 @@ func InsertRun(ctx context.Context, run *ActionRun, jobs []*jobparser.SingleWork
164166
}
165167
run.Index = index
166168

167-
if run.Status.IsUnknown() {
168-
run.Status = StatusWaiting
169-
}
170-
171169
if err := db.Insert(ctx, run); err != nil {
172170
return err
173171
}
@@ -191,7 +189,7 @@ func InsertRun(ctx context.Context, run *ActionRun, jobs []*jobparser.SingleWork
191189
job.EraseNeeds()
192190
payload, _ := v.Marshal()
193191
status := StatusWaiting
194-
if len(needs) > 0 {
192+
if len(needs) > 0 || run.NeedApproval {
195193
status = StatusBlocked
196194
}
197195
runJobs = append(runJobs, &ActionRunJob{

models/actions/run_list.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ type FindRunOptions struct {
6868
OwnerID int64
6969
IsClosed util.OptionalBool
7070
WorkflowFileName string
71+
TriggerUserID int64
72+
Approved bool // not util.OptionalBool, it works only when it's true
7173
}
7274

7375
func (opts FindRunOptions) toConds() builder.Cond {
@@ -89,6 +91,12 @@ func (opts FindRunOptions) toConds() builder.Cond {
8991
if opts.WorkflowFileName != "" {
9092
cond = cond.And(builder.Eq{"workflow_id": opts.WorkflowFileName})
9193
}
94+
if opts.TriggerUserID > 0 {
95+
cond = cond.And(builder.Eq{"trigger_user_id": opts.TriggerUserID})
96+
}
97+
if opts.Approved {
98+
cond = cond.And(builder.Gt{"approved_by": 0})
99+
}
92100
return cond
93101
}
94102

models/actions/status.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ func (s Status) IsRunning() bool {
8282
return s == StatusRunning
8383
}
8484

85+
func (s Status) IsBlocked() bool {
86+
return s == StatusBlocked
87+
}
88+
8589
// In returns whether s is one of the given statuses
8690
func (s Status) In(statuses ...Status) bool {
8791
for _, v := range statuses {

models/avatars/avatar.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func generateEmailAvatarLink(ctx context.Context, email string, size int, final
153153
return DefaultAvatarLink()
154154
}
155155

156-
enableFederatedAvatar := system_model.GetSettingBool(ctx, system_model.KeyPictureEnableFederatedAvatar)
156+
enableFederatedAvatar := system_model.GetSettingWithCacheBool(ctx, system_model.KeyPictureEnableFederatedAvatar)
157157

158158
var err error
159159
if enableFederatedAvatar && system_model.LibravatarService != nil {
@@ -174,7 +174,7 @@ func generateEmailAvatarLink(ctx context.Context, email string, size int, final
174174
return urlStr
175175
}
176176

177-
disableGravatar := system_model.GetSettingBool(ctx, system_model.KeyPictureDisableGravatar)
177+
disableGravatar := system_model.GetSettingWithCacheBool(ctx, system_model.KeyPictureDisableGravatar)
178178
if !disableGravatar {
179179
// copy GravatarSourceURL, because we will modify its Path.
180180
avatarURLCopy := *system_model.GravatarSourceURL

models/avatars/avatar_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func enableGravatar(t *testing.T) {
2828
err := system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureDisableGravatar, "false")
2929
assert.NoError(t, err)
3030
setting.GravatarSource = gravatarSource
31-
err = system_model.Init()
31+
err = system_model.Init(db.DefaultContext)
3232
assert.NoError(t, err)
3333
}
3434

models/db/list_options.go renamed to models/db/list.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func Find[T any](ctx context.Context, opts FindOptions, objects *[]T) error {
134134
if !opts.IsListAll() {
135135
sess.Limit(opts.GetSkipTake())
136136
}
137-
return sess.Find(&objects)
137+
return sess.Find(objects)
138138
}
139139

140140
// Count represents a common count function which accept an options interface
@@ -148,5 +148,5 @@ func FindAndCount[T any](ctx context.Context, opts FindOptions, objects *[]T) (i
148148
if !opts.IsListAll() {
149149
sess.Limit(opts.GetSkipTake())
150150
}
151-
return sess.FindAndCount(&objects)
151+
return sess.FindAndCount(objects)
152152
}

models/db/list_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package db_test
5+
6+
import (
7+
"testing"
8+
9+
"code.gitea.io/gitea/models/db"
10+
repo_model "code.gitea.io/gitea/models/repo"
11+
"code.gitea.io/gitea/models/unittest"
12+
13+
"github.com/stretchr/testify/assert"
14+
"xorm.io/builder"
15+
)
16+
17+
type mockListOptions struct {
18+
db.ListOptions
19+
}
20+
21+
func (opts *mockListOptions) IsListAll() bool {
22+
return true
23+
}
24+
25+
func (opts *mockListOptions) ToConds() builder.Cond {
26+
return builder.NewCond()
27+
}
28+
29+
func TestFind(t *testing.T) {
30+
assert.NoError(t, unittest.PrepareTestDatabase())
31+
xe := unittest.GetXORMEngine()
32+
assert.NoError(t, xe.Sync(&repo_model.RepoUnit{}))
33+
34+
opts := mockListOptions{}
35+
var repoUnits []repo_model.RepoUnit
36+
err := db.Find(db.DefaultContext, &opts, &repoUnits)
37+
assert.NoError(t, err)
38+
assert.EqualValues(t, 83, len(repoUnits))
39+
40+
cnt, err := db.Count(db.DefaultContext, &opts, new(repo_model.RepoUnit))
41+
assert.NoError(t, err)
42+
assert.EqualValues(t, 83, cnt)
43+
44+
repoUnits = make([]repo_model.RepoUnit, 0, 10)
45+
newCnt, err := db.FindAndCount(db.DefaultContext, &opts, &repoUnits)
46+
assert.NoError(t, err)
47+
assert.EqualValues(t, cnt, newCnt)
48+
}

models/migrations/migrations.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"code.gitea.io/gitea/models/migrations/v1_17"
2020
"code.gitea.io/gitea/models/migrations/v1_18"
2121
"code.gitea.io/gitea/models/migrations/v1_19"
22+
"code.gitea.io/gitea/models/migrations/v1_20"
2223
"code.gitea.io/gitea/models/migrations/v1_6"
2324
"code.gitea.io/gitea/models/migrations/v1_7"
2425
"code.gitea.io/gitea/models/migrations/v1_8"
@@ -463,6 +464,9 @@ var migrations = []Migration{
463464
NewMigration("Add exclusive label", v1_19.AddExclusiveLabel),
464465

465466
// Gitea 1.19.0 ends at v244
467+
468+
// v244 -> v245
469+
NewMigration("Add NeedApproval to actions tables", v1_20.AddNeedApprovalToActionRun),
466470
}
467471

468472
// GetCurrentDBVersion returns the current db version

models/migrations/v1_20/v244.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_20 //nolint
5+
6+
import (
7+
"xorm.io/xorm"
8+
)
9+
10+
func AddNeedApprovalToActionRun(x *xorm.Engine) error {
11+
/*
12+
New index: TriggerUserID
13+
New fields: NeedApproval, ApprovedBy
14+
*/
15+
type ActionRun struct {
16+
TriggerUserID int64 `xorm:"index"`
17+
NeedApproval bool // may need approval if it's a fork pull request
18+
ApprovedBy int64 `xorm:"index"` // who approved
19+
}
20+
21+
return x.Sync(new(ActionRun))
22+
}

0 commit comments

Comments
 (0)