This commit is contained in:
@@ -9,32 +9,33 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"code.gitea.io/gitea/models/migrations/v1_10"
|
||||
"code.gitea.io/gitea/models/migrations/v1_11"
|
||||
"code.gitea.io/gitea/models/migrations/v1_12"
|
||||
"code.gitea.io/gitea/models/migrations/v1_13"
|
||||
"code.gitea.io/gitea/models/migrations/v1_14"
|
||||
"code.gitea.io/gitea/models/migrations/v1_15"
|
||||
"code.gitea.io/gitea/models/migrations/v1_16"
|
||||
"code.gitea.io/gitea/models/migrations/v1_17"
|
||||
"code.gitea.io/gitea/models/migrations/v1_18"
|
||||
"code.gitea.io/gitea/models/migrations/v1_19"
|
||||
"code.gitea.io/gitea/models/migrations/v1_20"
|
||||
"code.gitea.io/gitea/models/migrations/v1_21"
|
||||
"code.gitea.io/gitea/models/migrations/v1_22"
|
||||
"code.gitea.io/gitea/models/migrations/v1_23"
|
||||
"code.gitea.io/gitea/models/migrations/v1_24"
|
||||
"code.gitea.io/gitea/models/migrations/v1_25"
|
||||
"code.gitea.io/gitea/models/migrations/v1_26"
|
||||
"code.gitea.io/gitea/models/migrations/v1_6"
|
||||
"code.gitea.io/gitea/models/migrations/v1_7"
|
||||
"code.gitea.io/gitea/models/migrations/v1_8"
|
||||
"code.gitea.io/gitea/models/migrations/v1_9"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"gitea.dev/models/db"
|
||||
"gitea.dev/models/migrations/v1_10"
|
||||
"gitea.dev/models/migrations/v1_11"
|
||||
"gitea.dev/models/migrations/v1_12"
|
||||
"gitea.dev/models/migrations/v1_13"
|
||||
"gitea.dev/models/migrations/v1_14"
|
||||
"gitea.dev/models/migrations/v1_15"
|
||||
"gitea.dev/models/migrations/v1_16"
|
||||
"gitea.dev/models/migrations/v1_17"
|
||||
"gitea.dev/models/migrations/v1_18"
|
||||
"gitea.dev/models/migrations/v1_19"
|
||||
"gitea.dev/models/migrations/v1_20"
|
||||
"gitea.dev/models/migrations/v1_21"
|
||||
"gitea.dev/models/migrations/v1_22"
|
||||
"gitea.dev/models/migrations/v1_23"
|
||||
"gitea.dev/models/migrations/v1_24"
|
||||
"gitea.dev/models/migrations/v1_25"
|
||||
"gitea.dev/models/migrations/v1_26"
|
||||
"gitea.dev/models/migrations/v1_27"
|
||||
"gitea.dev/models/migrations/v1_6"
|
||||
"gitea.dev/models/migrations/v1_7"
|
||||
"gitea.dev/models/migrations/v1_8"
|
||||
"gitea.dev/models/migrations/v1_9"
|
||||
"gitea.dev/modules/git"
|
||||
"gitea.dev/modules/log"
|
||||
"gitea.dev/modules/setting"
|
||||
|
||||
"xorm.io/xorm"
|
||||
"xorm.io/xorm/names"
|
||||
)
|
||||
|
||||
@@ -43,23 +44,23 @@ const minDBVersion = 70 // Gitea 1.5.3
|
||||
type migration struct {
|
||||
idNumber int64 // DB version is "the last migration's idNumber" + 1
|
||||
description string
|
||||
migrate func(context.Context, *xorm.Engine) error
|
||||
migrate func(context.Context, db.EngineMigration) error
|
||||
}
|
||||
|
||||
// newMigration creates a new migration
|
||||
func newMigration[T func(*xorm.Engine) error | func(context.Context, *xorm.Engine) error](idNumber int64, desc string, fn T) *migration {
|
||||
func newMigration[T func(db.EngineMigration) error | func(context.Context, db.EngineMigration) error](idNumber int64, desc string, fn T) *migration {
|
||||
m := &migration{idNumber: idNumber, description: desc}
|
||||
var ok bool
|
||||
if m.migrate, ok = any(fn).(func(context.Context, *xorm.Engine) error); !ok {
|
||||
m.migrate = func(ctx context.Context, x *xorm.Engine) error {
|
||||
return any(fn).(func(*xorm.Engine) error)(x)
|
||||
if m.migrate, ok = any(fn).(func(context.Context, db.EngineMigration) error); !ok {
|
||||
m.migrate = func(ctx context.Context, x db.EngineMigration) error {
|
||||
return any(fn).(func(db.EngineMigration) error)(x)
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Migrate executes the migration
|
||||
func (m *migration) Migrate(ctx context.Context, x *xorm.Engine) error {
|
||||
func (m *migration) Migrate(ctx context.Context, x db.EngineMigration) error {
|
||||
return m.migrate(ctx, x)
|
||||
}
|
||||
|
||||
@@ -70,7 +71,7 @@ type Version struct {
|
||||
}
|
||||
|
||||
// Use noopMigration when there is a migration that has been no-oped
|
||||
var noopMigration = func(_ *xorm.Engine) error { return nil }
|
||||
var noopMigration = func(_ db.EngineMigration) error { return nil }
|
||||
|
||||
var preparedMigrations []*migration
|
||||
|
||||
@@ -405,13 +406,26 @@ func prepareMigrationTasks() []*migration {
|
||||
newMigration(328, "Add TokenPermissions column to ActionRunJob", v1_26.AddTokenPermissionsToActionRunJob),
|
||||
newMigration(329, "Add unique constraint for user badge", v1_26.AddUniqueIndexForUserBadge),
|
||||
newMigration(330, "Add name column to webhook", v1_26.AddNameToWebhook),
|
||||
newMigration(331, "Create heatmap contribution table", v1_26.CreateHeatmapContributionTable),
|
||||
// Gitea 1.26.0 ends at migration ID number 330 (database version 331)
|
||||
|
||||
newMigration(331, "Add ActionRunAttempt model and related action fields", v1_27.AddActionRunAttemptModel),
|
||||
newMigration(332, "Add last_sync_unix to mirror and bridge heatmap migration collision", v1_27.BridgeHeatmapMigrationCollision),
|
||||
newMigration(333, "Add bypass allowlist to branch protection", v1_27.AddBranchProtectionBypassAllowlist),
|
||||
newMigration(334, "Add cancelling support to action runners", v1_27.AddCancellingSupportToActionRunner),
|
||||
newMigration(335, "Add reusable workflow fields and action_run_attempt_job_id_index table for ActionRunJob", v1_27.AddReusableWorkflowFieldsToActionRunJob),
|
||||
newMigration(336, "Add ActionRunJobSummary table", v1_27.AddActionRunJobSummaryTable),
|
||||
newMigration(337, "Add visibility to team", v1_27.AddVisibilityToTeam),
|
||||
newMigration(338, "Expand legacy MSSQL issue/comment long-text columns", v1_27.ExpandIssueAndCommentLongTextFieldsForMSSQL),
|
||||
newMigration(339, "Extend action c_u index to include created_unix for faster dashboard feed queries", v1_27.AddCreatedUnixToActionUserIsDeletedIndex),
|
||||
newMigration(340, "Add ContinueOnError column to ActionRunJob", v1_27.AddContinueOnErrorToActionRunJob),
|
||||
newMigration(341, "Convert legacy MSSQL DATETIME columns to DATETIME2", v1_27.FixLegacyMSSQLDateTimeColumns),
|
||||
newMigration(342, "Add scoped workflows schema", v1_27.AddScopedWorkflowsSchema),
|
||||
}
|
||||
return preparedMigrations
|
||||
}
|
||||
|
||||
// GetCurrentDBVersion returns the current db version
|
||||
func GetCurrentDBVersion(x *xorm.Engine) (int64, error) {
|
||||
func GetCurrentDBVersion(x db.EngineMigration) (int64, error) {
|
||||
if err := x.Sync(new(Version)); err != nil {
|
||||
return -1, fmt.Errorf("sync: %w", err)
|
||||
}
|
||||
@@ -444,7 +458,7 @@ func ExpectedDBVersion() int64 {
|
||||
}
|
||||
|
||||
// EnsureUpToDate will check if the db is at the correct version
|
||||
func EnsureUpToDate(ctx context.Context, x *xorm.Engine) error {
|
||||
func EnsureUpToDate(ctx context.Context, x db.EngineMigration) error {
|
||||
currentDB, err := GetCurrentDBVersion(x)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -476,7 +490,7 @@ func migrationIDNumberToDBVersion(idNumber int64) int64 {
|
||||
}
|
||||
|
||||
// Migrate database to current version
|
||||
func Migrate(ctx context.Context, x *xorm.Engine) error {
|
||||
func Migrate(ctx context.Context, x db.EngineMigration) error {
|
||||
migrations := prepareMigrationTasks()
|
||||
maxDBVer := calcDBVersion(migrations)
|
||||
|
||||
@@ -495,7 +509,7 @@ func Migrate(ctx context.Context, x *xorm.Engine) error {
|
||||
// XORM model framework will create all tables when initializing.
|
||||
currentVersion.ID = 0
|
||||
currentVersion.Version = maxDBVer
|
||||
if _, err = x.InsertOne(currentVersion); err != nil {
|
||||
if _, err = x.Insert(currentVersion); err != nil {
|
||||
return fmt.Errorf("insert: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user