summaryrefslogtreecommitdiffstats
path: root/models/migrations/v1_21
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--models/migrations/v1_21/main_test.go14
-rw-r--r--models/migrations/v1_21/v260.go26
-rw-r--r--models/migrations/v1_21/v261.go24
-rw-r--r--models/migrations/v1_21/v262.go16
-rw-r--r--models/migrations/v1_21/v263.go46
-rw-r--r--models/migrations/v1_21/v264.go93
-rw-r--r--models/migrations/v1_21/v265.go19
-rw-r--r--models/migrations/v1_21/v266.go23
-rw-r--r--models/migrations/v1_21/v267.go23
-rw-r--r--models/migrations/v1_21/v268.go16
-rw-r--r--models/migrations/v1_21/v269.go12
-rw-r--r--models/migrations/v1_21/v270.go26
-rw-r--r--models/migrations/v1_21/v271.go16
-rw-r--r--models/migrations/v1_21/v272.go14
-rw-r--r--models/migrations/v1_21/v273.go45
-rw-r--r--models/migrations/v1_21/v274.go36
-rw-r--r--models/migrations/v1_21/v275.go15
-rw-r--r--models/migrations/v1_21/v276.go156
-rw-r--r--models/migrations/v1_21/v277.go16
-rw-r--r--models/migrations/v1_21/v278.go16
-rw-r--r--models/migrations/v1_21/v279.go16
21 files changed, 668 insertions, 0 deletions
diff --git a/models/migrations/v1_21/main_test.go b/models/migrations/v1_21/main_test.go
new file mode 100644
index 00000000..9afdea16
--- /dev/null
+++ b/models/migrations/v1_21/main_test.go
@@ -0,0 +1,14 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/migrations/base"
+)
+
+func TestMain(m *testing.M) {
+ base.MainTest(m)
+}
diff --git a/models/migrations/v1_21/v260.go b/models/migrations/v1_21/v260.go
new file mode 100644
index 00000000..6ca52c59
--- /dev/null
+++ b/models/migrations/v1_21/v260.go
@@ -0,0 +1,26 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "code.gitea.io/gitea/models/migrations/base"
+
+ "xorm.io/xorm"
+)
+
+func DropCustomLabelsColumnOfActionRunner(x *xorm.Engine) error {
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ // drop "custom_labels" cols
+ if err := base.DropTableColumns(sess, "action_runner", "custom_labels"); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v261.go b/models/migrations/v1_21/v261.go
new file mode 100644
index 00000000..4ec1160d
--- /dev/null
+++ b/models/migrations/v1_21/v261.go
@@ -0,0 +1,24 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func CreateVariableTable(x *xorm.Engine) error {
+ type ActionVariable struct {
+ ID int64 `xorm:"pk autoincr"`
+ OwnerID int64 `xorm:"UNIQUE(owner_repo_name)"`
+ RepoID int64 `xorm:"INDEX UNIQUE(owner_repo_name)"`
+ Name string `xorm:"UNIQUE(owner_repo_name) NOT NULL"`
+ Data string `xorm:"LONGTEXT NOT NULL"`
+ CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL"`
+ UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
+ }
+
+ return x.Sync(new(ActionVariable))
+}
diff --git a/models/migrations/v1_21/v262.go b/models/migrations/v1_21/v262.go
new file mode 100644
index 00000000..23e90057
--- /dev/null
+++ b/models/migrations/v1_21/v262.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AddTriggerEventToActionRun(x *xorm.Engine) error {
+ type ActionRun struct {
+ TriggerEvent string
+ }
+
+ return x.Sync(new(ActionRun))
+}
diff --git a/models/migrations/v1_21/v263.go b/models/migrations/v1_21/v263.go
new file mode 100644
index 00000000..2c7cbadf
--- /dev/null
+++ b/models/migrations/v1_21/v263.go
@@ -0,0 +1,46 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "fmt"
+
+ "xorm.io/xorm"
+)
+
+// AddGitSizeAndLFSSizeToRepositoryTable: add GitSize and LFSSize columns to Repository
+func AddGitSizeAndLFSSizeToRepositoryTable(x *xorm.Engine) error {
+ type Repository struct {
+ GitSize int64 `xorm:"NOT NULL DEFAULT 0"`
+ LFSSize int64 `xorm:"NOT NULL DEFAULT 0"`
+ }
+
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ if err := sess.Sync(new(Repository)); err != nil {
+ return fmt.Errorf("Sync: %w", err)
+ }
+
+ _, err := sess.Exec(`UPDATE repository SET lfs_size=(SELECT SUM(size) FROM lfs_meta_object WHERE lfs_meta_object.repository_id=repository.ID) WHERE EXISTS (SELECT 1 FROM lfs_meta_object WHERE lfs_meta_object.repository_id=repository.ID)`)
+ if err != nil {
+ return err
+ }
+
+ _, err = sess.Exec(`UPDATE repository SET size = 0 WHERE size IS NULL`)
+ if err != nil {
+ return err
+ }
+
+ _, err = sess.Exec(`UPDATE repository SET git_size = size - lfs_size WHERE size > lfs_size`)
+ if err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v264.go b/models/migrations/v1_21/v264.go
new file mode 100644
index 00000000..e81a17ad
--- /dev/null
+++ b/models/migrations/v1_21/v264.go
@@ -0,0 +1,93 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "context"
+ "fmt"
+
+ "code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func AddBranchTable(x *xorm.Engine) error {
+ type Branch struct {
+ ID int64
+ RepoID int64 `xorm:"UNIQUE(s)"`
+ Name string `xorm:"UNIQUE(s) NOT NULL"`
+ CommitID string
+ CommitMessage string `xorm:"TEXT"`
+ PusherID int64
+ IsDeleted bool `xorm:"index"`
+ DeletedByID int64
+ DeletedUnix timeutil.TimeStamp `xorm:"index"`
+ CommitTime timeutil.TimeStamp // The commit
+ CreatedUnix timeutil.TimeStamp `xorm:"created"`
+ UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
+ }
+
+ if err := x.Sync(new(Branch)); err != nil {
+ return err
+ }
+
+ if exist, err := x.IsTableExist("deleted_branches"); err != nil {
+ return err
+ } else if !exist {
+ return nil
+ }
+
+ type DeletedBranch struct {
+ ID int64
+ RepoID int64 `xorm:"index UNIQUE(s)"`
+ Name string `xorm:"UNIQUE(s) NOT NULL"`
+ Commit string
+ DeletedByID int64
+ DeletedUnix timeutil.TimeStamp
+ }
+
+ var adminUserID int64
+ has, err := x.Table("user").
+ Select("id").
+ Where("is_admin=?", true).
+ Asc("id"). // Reliably get the admin with the lowest ID.
+ Get(&adminUserID)
+ if err != nil {
+ return err
+ } else if !has {
+ return fmt.Errorf("no admin user found")
+ }
+
+ branches := make([]Branch, 0, 100)
+ if err := db.Iterate(context.Background(), nil, func(ctx context.Context, deletedBranch *DeletedBranch) error {
+ branches = append(branches, Branch{
+ RepoID: deletedBranch.RepoID,
+ Name: deletedBranch.Name,
+ CommitID: deletedBranch.Commit,
+ PusherID: adminUserID,
+ IsDeleted: true,
+ DeletedByID: deletedBranch.DeletedByID,
+ DeletedUnix: deletedBranch.DeletedUnix,
+ })
+ if len(branches) >= 100 {
+ _, err := x.Insert(&branches)
+ if err != nil {
+ return err
+ }
+ branches = branches[:0]
+ }
+ return nil
+ }); err != nil {
+ return err
+ }
+
+ if len(branches) > 0 {
+ if _, err := x.Insert(&branches); err != nil {
+ return err
+ }
+ }
+
+ return x.DropTables(new(DeletedBranch))
+}
diff --git a/models/migrations/v1_21/v265.go b/models/migrations/v1_21/v265.go
new file mode 100644
index 00000000..800eb95f
--- /dev/null
+++ b/models/migrations/v1_21/v265.go
@@ -0,0 +1,19 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AlterActionArtifactTable(x *xorm.Engine) error {
+ // ActionArtifact is a file that is stored in the artifact storage.
+ type ActionArtifact struct {
+ RunID int64 `xorm:"index unique(runid_name_path)"` // The run id of the artifact
+ ArtifactPath string `xorm:"index unique(runid_name_path)"` // The path to the artifact when runner uploads it
+ ArtifactName string `xorm:"index unique(runid_name_path)"` // The name of the artifact when
+ }
+
+ return x.Sync(new(ActionArtifact))
+}
diff --git a/models/migrations/v1_21/v266.go b/models/migrations/v1_21/v266.go
new file mode 100644
index 00000000..79a5f5e1
--- /dev/null
+++ b/models/migrations/v1_21/v266.go
@@ -0,0 +1,23 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func ReduceCommitStatus(x *xorm.Engine) error {
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err := sess.Exec(`UPDATE commit_status SET state='pending' WHERE state='running'`); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v267.go b/models/migrations/v1_21/v267.go
new file mode 100644
index 00000000..bc0e954b
--- /dev/null
+++ b/models/migrations/v1_21/v267.go
@@ -0,0 +1,23 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func CreateActionTasksVersionTable(x *xorm.Engine) error {
+ type ActionTasksVersion struct {
+ ID int64 `xorm:"pk autoincr"`
+ OwnerID int64 `xorm:"UNIQUE(owner_repo)"`
+ RepoID int64 `xorm:"INDEX UNIQUE(owner_repo)"`
+ Version int64
+ CreatedUnix timeutil.TimeStamp `xorm:"created"`
+ UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
+ }
+
+ return x.Sync(new(ActionTasksVersion))
+}
diff --git a/models/migrations/v1_21/v268.go b/models/migrations/v1_21/v268.go
new file mode 100644
index 00000000..332793ff
--- /dev/null
+++ b/models/migrations/v1_21/v268.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+// UpdateActionsRefIndex updates the index of actions ref field
+func UpdateActionsRefIndex(x *xorm.Engine) error {
+ type ActionRun struct {
+ Ref string `xorm:"index"` // the commit/tag/… causing the run
+ }
+ return x.Sync(new(ActionRun))
+}
diff --git a/models/migrations/v1_21/v269.go b/models/migrations/v1_21/v269.go
new file mode 100644
index 00000000..475ec023
--- /dev/null
+++ b/models/migrations/v1_21/v269.go
@@ -0,0 +1,12 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func DropDeletedBranchTable(x *xorm.Engine) error {
+ return x.DropTables("deleted_branch")
+}
diff --git a/models/migrations/v1_21/v270.go b/models/migrations/v1_21/v270.go
new file mode 100644
index 00000000..b9cc84d3
--- /dev/null
+++ b/models/migrations/v1_21/v270.go
@@ -0,0 +1,26 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func FixPackagePropertyTypo(x *xorm.Engine) error {
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err := sess.Exec(`UPDATE package_property SET name = 'rpm.metadata' WHERE name = 'rpm.metdata'`); err != nil {
+ return err
+ }
+ if _, err := sess.Exec(`UPDATE package_property SET name = 'conda.metadata' WHERE name = 'conda.metdata'`); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v271.go b/models/migrations/v1_21/v271.go
new file mode 100644
index 00000000..098f6499
--- /dev/null
+++ b/models/migrations/v1_21/v271.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+import (
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func AddArchivedUnixColumInLabelTable(x *xorm.Engine) error {
+ type Label struct {
+ ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT NULL"`
+ }
+ return x.Sync(new(Label))
+}
diff --git a/models/migrations/v1_21/v272.go b/models/migrations/v1_21/v272.go
new file mode 100644
index 00000000..a729c49f
--- /dev/null
+++ b/models/migrations/v1_21/v272.go
@@ -0,0 +1,14 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+import (
+ "xorm.io/xorm"
+)
+
+func AddVersionToActionRunTable(x *xorm.Engine) error {
+ type ActionRun struct {
+ Version int `xorm:"version default 0"`
+ }
+ return x.Sync(new(ActionRun))
+}
diff --git a/models/migrations/v1_21/v273.go b/models/migrations/v1_21/v273.go
new file mode 100644
index 00000000..61c79f4a
--- /dev/null
+++ b/models/migrations/v1_21/v273.go
@@ -0,0 +1,45 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+import (
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func AddActionScheduleTable(x *xorm.Engine) error {
+ type ActionSchedule struct {
+ ID int64
+ Title string
+ Specs []string
+ RepoID int64 `xorm:"index"`
+ OwnerID int64 `xorm:"index"`
+ WorkflowID string
+ TriggerUserID int64
+ Ref string
+ CommitSHA string
+ Event string
+ EventPayload string `xorm:"LONGTEXT"`
+ Content []byte
+ Created timeutil.TimeStamp `xorm:"created"`
+ Updated timeutil.TimeStamp `xorm:"updated"`
+ }
+
+ type ActionScheduleSpec struct {
+ ID int64
+ RepoID int64 `xorm:"index"`
+ ScheduleID int64 `xorm:"index"`
+ Spec string
+ Next timeutil.TimeStamp `xorm:"index"`
+ Prev timeutil.TimeStamp
+
+ Created timeutil.TimeStamp `xorm:"created"`
+ Updated timeutil.TimeStamp `xorm:"updated"`
+ }
+
+ return x.Sync(
+ new(ActionSchedule),
+ new(ActionScheduleSpec),
+ )
+}
diff --git a/models/migrations/v1_21/v274.go b/models/migrations/v1_21/v274.go
new file mode 100644
index 00000000..df5994f1
--- /dev/null
+++ b/models/migrations/v1_21/v274.go
@@ -0,0 +1,36 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+import (
+ "time"
+
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+)
+
+func AddExpiredUnixColumnInActionArtifactTable(x *xorm.Engine) error {
+ type ActionArtifact struct {
+ ExpiredUnix timeutil.TimeStamp `xorm:"index"` // time when the artifact will be expired
+ }
+ if err := x.Sync(new(ActionArtifact)); err != nil {
+ return err
+ }
+ return updateArtifactsExpiredUnixTo90Days(x)
+}
+
+func updateArtifactsExpiredUnixTo90Days(x *xorm.Engine) error {
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ expiredTime := time.Now().AddDate(0, 0, 90).Unix()
+ if _, err := sess.Exec(`UPDATE action_artifact SET expired_unix=? WHERE status='2' AND expired_unix is NULL`, expiredTime); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v275.go b/models/migrations/v1_21/v275.go
new file mode 100644
index 00000000..78804a59
--- /dev/null
+++ b/models/migrations/v1_21/v275.go
@@ -0,0 +1,15 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AddScheduleIDForActionRun(x *xorm.Engine) error {
+ type ActionRun struct {
+ ScheduleID int64
+ }
+ return x.Sync(new(ActionRun))
+}
diff --git a/models/migrations/v1_21/v276.go b/models/migrations/v1_21/v276.go
new file mode 100644
index 00000000..67e95017
--- /dev/null
+++ b/models/migrations/v1_21/v276.go
@@ -0,0 +1,156 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/setting"
+
+ "xorm.io/xorm"
+)
+
+func AddRemoteAddressToMirrors(x *xorm.Engine) error {
+ type Mirror struct {
+ RemoteAddress string `xorm:"VARCHAR(2048)"`
+ }
+
+ type PushMirror struct {
+ RemoteAddress string `xorm:"VARCHAR(2048)"`
+ }
+
+ if err := x.Sync(new(Mirror), new(PushMirror)); err != nil {
+ return err
+ }
+
+ if err := migratePullMirrors(x); err != nil {
+ return err
+ }
+
+ return migratePushMirrors(x)
+}
+
+func migratePullMirrors(x *xorm.Engine) error {
+ type Mirror struct {
+ ID int64 `xorm:"pk autoincr"`
+ RepoID int64 `xorm:"INDEX"`
+ RemoteAddress string `xorm:"VARCHAR(2048)"`
+ RepoOwner string
+ RepoName string
+ }
+
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ limit := setting.Database.IterateBufferSize
+ if limit <= 0 {
+ limit = 50
+ }
+
+ start := 0
+
+ for {
+ var mirrors []Mirror
+ if err := sess.Select("mirror.id, mirror.repo_id, mirror.remote_address, repository.owner_name as repo_owner, repository.name as repo_name").
+ Join("INNER", "repository", "repository.id = mirror.repo_id").
+ Limit(limit, start).Find(&mirrors); err != nil {
+ return err
+ }
+
+ if len(mirrors) == 0 {
+ break
+ }
+ start += len(mirrors)
+
+ for _, m := range mirrors {
+ remoteAddress, err := repo_model.GetPushMirrorRemoteAddress(m.RepoOwner, m.RepoName, "origin")
+ if err != nil {
+ return err
+ }
+
+ m.RemoteAddress = remoteAddress
+
+ if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
+ return err
+ }
+ }
+
+ if start%1000 == 0 { // avoid a too big transaction
+ if err := sess.Commit(); err != nil {
+ return err
+ }
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ }
+ }
+
+ return sess.Commit()
+}
+
+func migratePushMirrors(x *xorm.Engine) error {
+ type PushMirror struct {
+ ID int64 `xorm:"pk autoincr"`
+ RepoID int64 `xorm:"INDEX"`
+ RemoteName string
+ RemoteAddress string `xorm:"VARCHAR(2048)"`
+ RepoOwner string
+ RepoName string
+ }
+
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ limit := setting.Database.IterateBufferSize
+ if limit <= 0 {
+ limit = 50
+ }
+
+ start := 0
+
+ for {
+ var mirrors []PushMirror
+ if err := sess.Select("push_mirror.id, push_mirror.repo_id, push_mirror.remote_name, push_mirror.remote_address, repository.owner_name as repo_owner, repository.name as repo_name").
+ Join("INNER", "repository", "repository.id = push_mirror.repo_id").
+ Limit(limit, start).Find(&mirrors); err != nil {
+ return err
+ }
+
+ if len(mirrors) == 0 {
+ break
+ }
+ start += len(mirrors)
+
+ for _, m := range mirrors {
+ remoteAddress, err := repo_model.GetPushMirrorRemoteAddress(m.RepoOwner, m.RepoName, m.RemoteName)
+ if err != nil {
+ return err
+ }
+
+ m.RemoteAddress = remoteAddress
+
+ if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
+ return err
+ }
+ }
+
+ if start%1000 == 0 { // avoid a too big transaction
+ if err := sess.Commit(); err != nil {
+ return err
+ }
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ }
+ }
+
+ return sess.Commit()
+}
diff --git a/models/migrations/v1_21/v277.go b/models/migrations/v1_21/v277.go
new file mode 100644
index 00000000..12529160
--- /dev/null
+++ b/models/migrations/v1_21/v277.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AddIndexToIssueUserIssueID(x *xorm.Engine) error {
+ type IssueUser struct {
+ IssueID int64 `xorm:"INDEX"`
+ }
+
+ return x.Sync(new(IssueUser))
+}
diff --git a/models/migrations/v1_21/v278.go b/models/migrations/v1_21/v278.go
new file mode 100644
index 00000000..d6a462d1
--- /dev/null
+++ b/models/migrations/v1_21/v278.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AddIndexToCommentDependentIssueID(x *xorm.Engine) error {
+ type Comment struct {
+ DependentIssueID int64 `xorm:"index"`
+ }
+
+ return x.Sync(new(Comment))
+}
diff --git a/models/migrations/v1_21/v279.go b/models/migrations/v1_21/v279.go
new file mode 100644
index 00000000..19647225
--- /dev/null
+++ b/models/migrations/v1_21/v279.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+ "xorm.io/xorm"
+)
+
+func AddIndexToActionUserID(x *xorm.Engine) error {
+ type Action struct {
+ UserID int64 `xorm:"INDEX"`
+ }
+
+ return x.Sync(new(Action))
+}