mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-23 02:11:01 +00:00
Let non required migration tasks fail and continue (#729)
This commit is contained in:
parent
2a5159f7fe
commit
0d463ca467
3 changed files with 22 additions and 11 deletions
|
@ -24,6 +24,7 @@ import (
|
|||
|
||||
var legacy2Xorm = task{
|
||||
name: "xorm",
|
||||
required: true,
|
||||
fn: func(sess *xorm.Session) error {
|
||||
// make sure we have required migrations - else fail and point to last major version
|
||||
for _, mig := range []string{
|
||||
|
|
|
@ -26,12 +26,12 @@ import (
|
|||
|
||||
// APPEND NEW MIGRATIONS
|
||||
// they are executed in order and if one fail woodpecker try to rollback and quit
|
||||
var migrationTasks = []task{
|
||||
legacy2Xorm,
|
||||
alterTableReposDropFallback,
|
||||
alterTableReposDropAllowDeploysAllowTags,
|
||||
fixPRSecretEventName,
|
||||
alterTableReposDropCounter,
|
||||
var migrationTasks = []*task{
|
||||
&legacy2Xorm,
|
||||
&alterTableReposDropFallback,
|
||||
&alterTableReposDropAllowDeploysAllowTags,
|
||||
&fixPRSecretEventName,
|
||||
&alterTableReposDropCounter,
|
||||
}
|
||||
|
||||
var allBeans = []interface{}{
|
||||
|
@ -57,6 +57,7 @@ type migrations struct {
|
|||
|
||||
type task struct {
|
||||
name string
|
||||
required bool
|
||||
fn func(sess *xorm.Session) error
|
||||
}
|
||||
|
||||
|
@ -111,7 +112,7 @@ func Migrate(e *xorm.Engine) error {
|
|||
return syncAll(e)
|
||||
}
|
||||
|
||||
func runTasks(sess *xorm.Session, tasks []task) error {
|
||||
func runTasks(sess *xorm.Session, tasks []*task) error {
|
||||
// cache migrations in db
|
||||
migCache := make(map[string]bool)
|
||||
var migList []*migrations
|
||||
|
@ -132,8 +133,12 @@ func runTasks(sess *xorm.Session, tasks []task) error {
|
|||
|
||||
if task.fn != nil {
|
||||
if err := task.fn(sess); err != nil {
|
||||
if task.required {
|
||||
return err
|
||||
}
|
||||
log.Error().Err(err).Msgf("migration task '%s' failed but is not required", task.name)
|
||||
continue
|
||||
}
|
||||
log.Info().Msgf("migration task '%s' done", task.name)
|
||||
} else {
|
||||
log.Trace().Msgf("skip migration task '%s'", task.name)
|
||||
|
|
|
@ -81,6 +81,11 @@ func testDB(t *testing.T, new bool) (engine *xorm.Engine, close func()) {
|
|||
}
|
||||
|
||||
func TestMigrate(t *testing.T) {
|
||||
// make all tasks required for tests
|
||||
for _, task := range migrationTasks {
|
||||
task.required = true
|
||||
}
|
||||
|
||||
// init new db
|
||||
engine, close := testDB(t, true)
|
||||
assert.NoError(t, Migrate(engine))
|
||||
|
|
Loading…
Reference in a new issue