[UPGRADE] run sanity checks before the database is upgraded
(cherry picked from commit69741e4e66) (cherry picked from commit2a3c7b09cb) (cherry picked from commita1554c1168)
This commit is contained in:
		
							parent
							
								
									53e637693b
								
							
						
					
					
						commit
						edae2c6d2d
					
				
					 4 changed files with 82 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"
 | 
			
		||||
| 
						 | 
				
			
			@ -585,6 +586,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 {
 | 
			
		||||
| 
						 | 
				
			
			@ -598,6 +600,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
 | 
			
		||||
| 
						 | 
				
			
			@ -625,6 +629,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())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								services/forgejo/main_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								services/forgejo/main_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package forgejo
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models/unittest"
 | 
			
		||||
 | 
			
		||||
	_ "code.gitea.io/gitea/models"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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…
	
	Add table
		Add a link
		
	
		Reference in a new issue