Skip to content

Commit b622c94

Browse files
authored
Merge branch 'main' into flake-bump
2 parents 25c7e27 + 59df03b commit b622c94

File tree

7 files changed

+135
-21
lines changed

7 files changed

+135
-21
lines changed

models/migrations/v1_23/v302.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,8 @@ func AddIndexToActionTaskStoppedLogExpired(x *xorm.Engine) error {
1414
Stopped timeutil.TimeStamp `xorm:"index(stopped_log_expired)"`
1515
LogExpired bool `xorm:"index(stopped_log_expired)"`
1616
}
17-
return x.Sync(new(ActionTask))
17+
_, err := x.SyncWithOptions(xorm.SyncOptions{
18+
IgnoreDropIndices: true,
19+
}, new(ActionTask))
20+
return err
1821
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright 2025 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_23 //nolint
5+
6+
import (
7+
"testing"
8+
9+
"code.gitea.io/gitea/models/migrations/base"
10+
"code.gitea.io/gitea/modules/timeutil"
11+
12+
"github.com/stretchr/testify/assert"
13+
)
14+
15+
func Test_AddIndexToActionTaskStoppedLogExpired(t *testing.T) {
16+
type ActionTask struct {
17+
ID int64
18+
JobID int64
19+
Attempt int64
20+
RunnerID int64 `xorm:"index"`
21+
Status int `xorm:"index"`
22+
Started timeutil.TimeStamp `xorm:"index"`
23+
Stopped timeutil.TimeStamp `xorm:"index(stopped_log_expired)"`
24+
25+
RepoID int64 `xorm:"index"`
26+
OwnerID int64 `xorm:"index"`
27+
CommitSHA string `xorm:"index"`
28+
IsForkPullRequest bool
29+
30+
Token string `xorm:"-"`
31+
TokenHash string `xorm:"UNIQUE"` // sha256 of token
32+
TokenSalt string
33+
TokenLastEight string `xorm:"index token_last_eight"`
34+
35+
LogFilename string // file name of log
36+
LogInStorage bool // read log from database or from storage
37+
LogLength int64 // lines count
38+
LogSize int64 // blob size
39+
LogIndexes []int64 `xorm:"LONGBLOB"` // line number to offset
40+
LogExpired bool `xorm:"index(stopped_log_expired)"` // files that are too old will be deleted
41+
42+
Created timeutil.TimeStamp `xorm:"created"`
43+
Updated timeutil.TimeStamp `xorm:"updated index"`
44+
}
45+
46+
// Prepare and load the testing database
47+
x, deferable := base.PrepareTestEnv(t, 0, new(ActionTask))
48+
defer deferable()
49+
50+
assert.NoError(t, AddIndexToActionTaskStoppedLogExpired(x))
51+
}

models/migrations/v1_23/v304.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ func AddIndexForReleaseSha1(x *xorm.Engine) error {
99
type Release struct {
1010
Sha1 string `xorm:"INDEX VARCHAR(64)"`
1111
}
12-
return x.Sync(new(Release))
12+
_, err := x.SyncWithOptions(xorm.SyncOptions{
13+
IgnoreDropIndices: true,
14+
}, new(Release))
15+
return err
1316
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2025 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_23 //nolint
5+
6+
import (
7+
"testing"
8+
9+
"code.gitea.io/gitea/models/migrations/base"
10+
"code.gitea.io/gitea/modules/timeutil"
11+
12+
"github.com/stretchr/testify/assert"
13+
)
14+
15+
func Test_AddIndexForReleaseSha1(t *testing.T) {
16+
type Release struct {
17+
ID int64 `xorm:"pk autoincr"`
18+
RepoID int64 `xorm:"INDEX UNIQUE(n)"`
19+
PublisherID int64 `xorm:"INDEX"`
20+
TagName string `xorm:"INDEX UNIQUE(n)"`
21+
OriginalAuthor string
22+
OriginalAuthorID int64 `xorm:"index"`
23+
LowerTagName string
24+
Target string
25+
Title string
26+
Sha1 string `xorm:"VARCHAR(64)"`
27+
NumCommits int64
28+
Note string `xorm:"TEXT"`
29+
IsDraft bool `xorm:"NOT NULL DEFAULT false"`
30+
IsPrerelease bool `xorm:"NOT NULL DEFAULT false"`
31+
IsTag bool `xorm:"NOT NULL DEFAULT false"` // will be true only if the record is a tag and has no related releases
32+
CreatedUnix timeutil.TimeStamp `xorm:"INDEX"`
33+
}
34+
35+
// Prepare and load the testing database
36+
x, deferable := base.PrepareTestEnv(t, 0, new(Release))
37+
defer deferable()
38+
39+
assert.NoError(t, AddIndexForReleaseSha1(x))
40+
}

routers/api/v1/shared/runners.go

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,28 @@ func ListRunners(ctx *context.APIContext, ownerID, repoID int64) {
6767
ctx.JSON(http.StatusOK, &res)
6868
}
6969

70+
func getRunnerByID(ctx *context.APIContext, ownerID, repoID, runnerID int64) (*actions_model.ActionRunner, bool) {
71+
if ownerID != 0 && repoID != 0 {
72+
setting.PanicInDevOrTesting("ownerID and repoID should not be both set")
73+
}
74+
75+
runner, err := actions_model.GetRunnerByID(ctx, runnerID)
76+
if err != nil {
77+
if errors.Is(err, util.ErrNotExist) {
78+
ctx.APIErrorNotFound("Runner not found")
79+
} else {
80+
ctx.APIErrorInternal(err)
81+
}
82+
return nil, false
83+
}
84+
85+
if !runner.EditableInContext(ownerID, repoID) {
86+
ctx.APIErrorNotFound("No permission to access this runner")
87+
return nil, false
88+
}
89+
return runner, true
90+
}
91+
7092
// GetRunner get the runner for api route validated ownerID and repoID
7193
// ownerID == 0 and repoID == 0 means any runner including global runners
7294
// ownerID == 0 and repoID != 0 means any runner for the given repo
@@ -77,13 +99,8 @@ func GetRunner(ctx *context.APIContext, ownerID, repoID, runnerID int64) {
7799
if ownerID != 0 && repoID != 0 {
78100
setting.PanicInDevOrTesting("ownerID and repoID should not be both set")
79101
}
80-
runner, err := actions_model.GetRunnerByID(ctx, runnerID)
81-
if err != nil {
82-
ctx.APIErrorNotFound(err)
83-
return
84-
}
85-
if !runner.EditableInContext(ownerID, repoID) {
86-
ctx.APIErrorNotFound("No permission to get this runner")
102+
runner, ok := getRunnerByID(ctx, ownerID, repoID, runnerID)
103+
if !ok {
87104
return
88105
}
89106
ctx.JSON(http.StatusOK, convert.ToActionRunner(ctx, runner))
@@ -96,20 +113,12 @@ func GetRunner(ctx *context.APIContext, ownerID, repoID, runnerID int64) {
96113
// ownerID != 0 and repoID != 0 undefined behavior
97114
// Access rights are checked at the API route level
98115
func DeleteRunner(ctx *context.APIContext, ownerID, repoID, runnerID int64) {
99-
if ownerID != 0 && repoID != 0 {
100-
setting.PanicInDevOrTesting("ownerID and repoID should not be both set")
101-
}
102-
runner, err := actions_model.GetRunnerByID(ctx, runnerID)
103-
if err != nil {
104-
ctx.APIErrorInternal(err)
105-
return
106-
}
107-
if !runner.EditableInContext(ownerID, repoID) {
108-
ctx.APIErrorNotFound("No permission to delete this runner")
116+
runner, ok := getRunnerByID(ctx, ownerID, repoID, runnerID)
117+
if !ok {
109118
return
110119
}
111120

112-
err = actions_model.DeleteRunner(ctx, runner.ID)
121+
err := actions_model.DeleteRunner(ctx, runner.ID)
113122
if err != nil {
114123
ctx.APIErrorInternal(err)
115124
return

services/webhook/discord.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ func parseHookPullRequestEventType(event webhook_module.HookEventType) (string,
305305
case webhook_module.HookEventPullRequestReviewApproved:
306306
return "approved", nil
307307
case webhook_module.HookEventPullRequestReviewRejected:
308-
return "rejected", nil
308+
return "requested changes", nil
309309
case webhook_module.HookEventPullRequestReviewComment:
310310
return "comment", nil
311311
default:

tests/integration/api_actions_runner_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,4 +329,12 @@ func testActionsRunnerRepo(t *testing.T) {
329329
req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/user2/repo1/actions/runners/%d", 34349)).AddTokenAuth(token)
330330
MakeRequest(t, req, http.StatusNotFound)
331331
})
332+
333+
t.Run("DeleteAdminRunnerNotFoundUnknownID", func(t *testing.T) {
334+
userUsername := "user2"
335+
token := getUserToken(t, userUsername, auth_model.AccessTokenScopeWriteRepository)
336+
// Verify delete a runner by unknown id is not found
337+
req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/user2/repo1/actions/runners/%d", 4384797347934)).AddTokenAuth(token)
338+
MakeRequest(t, req, http.StatusNotFound)
339+
})
332340
}

0 commit comments

Comments
 (0)