mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-27 10:20:39 +00:00
[UPGRADE] run sanity checks before the database is upgraded
(cherry picked from commit69741e4e66
) (cherry picked from commit2a3c7b09cb
) (cherry picked from commita1554c1168
) (cherry picked from commitedae2c6d2d
) (cherry picked from commit49737cf009
) (cherry picked from commitec53704c34
) (cherry picked from commit7a1c5c0f32
) (cherry picked from commite658c20c0f
) (cherry picked from commitbaf575468f
) (cherry picked from commit40cb14eff4
) (cherry picked from commitbfee7eae52
) (cherry picked from commite94541cbf3
) (cherry picked from commitdfe672ef4c
) (cherry picked from commit62fb498601
) (cherry picked from commit24e1789643
)
This commit is contained in:
parent
99ad61c41a
commit
2ea0db1a07
4 changed files with 84 additions and 0 deletions
|
@ -28,6 +28,7 @@ import (
|
|||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
forgejo_services "code.gitea.io/gitea/services/forgejo"
|
||||
|
||||
"xorm.io/xorm"
|
||||
"xorm.io/xorm/names"
|
||||
|
@ -597,6 +598,7 @@ func Migrate(x *xorm.Engine) error {
|
|||
return fmt.Errorf("sync: %w", err)
|
||||
}
|
||||
|
||||
var previousVersion int64
|
||||
currentVersion := &Version{ID: 1}
|
||||
has, err := x.Get(currentVersion)
|
||||
if err != nil {
|
||||
|
@ -610,6 +612,8 @@ func Migrate(x *xorm.Engine) error {
|
|||
if _, err = x.InsertOne(currentVersion); err != nil {
|
||||
return fmt.Errorf("insert: %w", err)
|
||||
}
|
||||
} else {
|
||||
previousVersion = currentVersion.Version
|
||||
}
|
||||
|
||||
v := currentVersion.Version
|
||||
|
@ -637,6 +641,10 @@ Please try upgrading to a lower version first (suggested v1.6.4), then upgrade t
|
|||
}
|
||||
}
|
||||
|
||||
if err := forgejo_services.PreMigrationSanityChecks(x, previousVersion, setting.CfgProvider); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Migrate
|
||||
for i, m := range migrations[v-minDBVersion:] {
|
||||
log.Info("Migration[%d]: %s", v+int64(i), m.Description())
|
||||
|
|
20
services/forgejo/main_test.go
Normal file
20
services/forgejo/main_test.go
Normal file
|
@ -0,0 +1,20 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgejo
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
|
||||
_ "code.gitea.io/gitea/models"
|
||||
_ "code.gitea.io/gitea/models/actions"
|
||||
_ "code.gitea.io/gitea/models/activities"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
unittest.MainTest(m, &unittest.TestOptions{
|
||||
GiteaRootPath: filepath.Join("..", ".."),
|
||||
})
|
||||
}
|
25
services/forgejo/sanity.go
Normal file
25
services/forgejo/sanity.go
Normal file
|
@ -0,0 +1,25 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgejo
|
||||
|
||||
import (
|
||||
"code.gitea.io/gitea/models/db"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
)
|
||||
|
||||
var (
|
||||
ForgejoV5DatabaseVersion = int64(260)
|
||||
ForgejoV4DatabaseVersion = int64(244)
|
||||
)
|
||||
|
||||
var logFatal = log.Fatal
|
||||
|
||||
func fatal(err error) error {
|
||||
logFatal("%v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
func PreMigrationSanityChecks(e db.Engine, dbVersion int64, cfg setting.ConfigProvider) error {
|
||||
return nil
|
||||
}
|
31
services/forgejo/sanity_test.go
Normal file
31
services/forgejo/sanity_test.go
Normal file
|
@ -0,0 +1,31 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package forgejo
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestForgejo_PreMigrationSanityChecks(t *testing.T) {
|
||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||
ctx := db.DefaultContext
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
assert.NoError(t, PreMigrationSanityChecks(e, ForgejoV4DatabaseVersion, configFixture(t, "")))
|
||||
}
|
||||
|
||||
func configFixture(t *testing.T, content string) setting.ConfigProvider {
|
||||
config := filepath.Join(t.TempDir(), "app.ini")
|
||||
assert.NoError(t, os.WriteFile(config, []byte(content), 0o777))
|
||||
cfg, err := setting.NewConfigProviderFromFile(config)
|
||||
assert.NoError(t, err)
|
||||
return cfg
|
||||
}
|
Loading…
Reference in a new issue