From c186e2fa8cf5ae9678c3e6b38250a27f0510acde Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sat, 8 Jan 2022 20:21:22 +0100 Subject: [PATCH] Update dev-docs & improve migration code (#670) --- .woodpecker/test.yml | 2 +- docs/docs/30-administration/30-database.md | 1 + docs/docs/92-development/06-guides.md | 2 +- server/store/datastore/engine_test.go | 6 ++++ server/store/datastore/migration/migration.go | 34 ++++++++++--------- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml index 7200ac42e..9a1403a36 100644 --- a/.woodpecker/test.yml +++ b/.woodpecker/test.yml @@ -63,7 +63,7 @@ pipeline: services: service-postgres: - image: postgres:9.6 + image: postgres:11 ports: ["5432"] environment: - POSTGRES_USER=postgres diff --git a/docs/docs/30-administration/30-database.md b/docs/docs/30-administration/30-database.md index 377bfdf34..fe8dc613b 100644 --- a/docs/docs/30-administration/30-database.md +++ b/docs/docs/30-administration/30-database.md @@ -36,6 +36,7 @@ services: ## Configure Postgres The below example demonstrates postgres database configuration. See the official driver [documentation](https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING) for configuration options and examples. +Please use postgres versions equal or higher than **11**. ```diff # docker-compose.yml diff --git a/docs/docs/92-development/06-guides.md b/docs/docs/92-development/06-guides.md index 7970ba344..b8a240af3 100644 --- a/docs/docs/92-development/06-guides.md +++ b/docs/docs/92-development/06-guides.md @@ -25,7 +25,7 @@ var alterTableReposDropCounter = task{ ``` :::info -Adding new properties to models will be handled automatically by the underlying [ORM](#orm) based on the [struct field tags](https://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go) of the model. If you add a completely new model, you have to add it to the `syncAll()` function at `server/store/datastore/migration/migration.go` to get a new table created. +Adding new properties to models will be handled automatically by the underlying [ORM](#orm) based on the [struct field tags](https://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go) of the model. If you add a completely new model, you have to add it to the `allBeans` variable at `server/store/datastore/migration/migration.go` to get a new table created. ::: :::warning diff --git a/server/store/datastore/engine_test.go b/server/store/datastore/engine_test.go index 13735690e..b4c35c935 100644 --- a/server/store/datastore/engine_test.go +++ b/server/store/datastore/engine_test.go @@ -53,6 +53,12 @@ func newTestStore(t *testing.T, tables ...interface{}) (*storage, func()) { return &storage{ engine: engine, }, func() { + for _, bean := range tables { + if err := engine.DropIndexes(bean); err != nil { + t.Error(err) + t.FailNow() + } + } if err := engine.DropTables(tables...); err != nil { t.Error(err) t.FailNow() diff --git a/server/store/datastore/migration/migration.go b/server/store/datastore/migration/migration.go index 7d48d064d..7f1422b18 100644 --- a/server/store/datastore/migration/migration.go +++ b/server/store/datastore/migration/migration.go @@ -34,6 +34,23 @@ var migrationTasks = []task{ alterTableReposDropCounter, } +var allBeans = []interface{}{ + new(model.Agent), + new(model.Build), + new(model.BuildConfig), + new(model.Config), + new(model.File), + new(model.Logs), + new(model.Perm), + new(model.Proc), + new(model.Registry), + new(model.Repo), + new(model.Secret), + new(model.Sender), + new(model.Task), + new(model.User), +} + type migrations struct { Name string `xorm:"UNIQUE"` } @@ -135,22 +152,7 @@ type syncEngine interface { } func syncAll(sess syncEngine) error { - for _, bean := range []interface{}{ - new(model.Agent), - new(model.Build), - new(model.BuildConfig), - new(model.Config), - new(model.File), - new(model.Logs), - new(model.Perm), - new(model.Proc), - new(model.Registry), - new(model.Repo), - new(model.Secret), - new(model.Sender), - new(model.Task), - new(model.User), - } { + for _, bean := range allBeans { if err := sess.Sync2(bean); err != nil { return fmt.Errorf("sync2 error '%s': %v", reflect.TypeOf(bean), err) }