mirror of
https://github.com/semaphoreui/semaphore.git
synced 2024-11-21 17:01:04 +01:00
feat(vaults): add migration for boltdb
This commit is contained in:
parent
4795e37113
commit
143594d80b
@ -47,6 +47,8 @@ func (d *BoltDb) ApplyMigration(m db.Migration) (err error) {
|
||||
err = migration_2_10_16{migration{d.db}}.Apply()
|
||||
case "2.10.24":
|
||||
err = migration_2_10_24{migration{d.db}}.Apply()
|
||||
case "2.10.33":
|
||||
err = migration_2_10_33{migration{d.db}}.Apply()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
38
db/bolt/migration_2_10_33.go
Normal file
38
db/bolt/migration_2_10_33.go
Normal file
@ -0,0 +1,38 @@
|
||||
package bolt
|
||||
|
||||
type migration_2_10_33 struct {
|
||||
migration
|
||||
}
|
||||
|
||||
func (d migration_2_10_33) Apply() (err error) {
|
||||
projectIDs, err := d.getProjectIDs()
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
vaults := make(map[string]map[string]map[string]interface{})
|
||||
|
||||
for _, projectID := range projectIDs {
|
||||
var err2 error
|
||||
vaults[projectID], err2 = d.getObjects(projectID, "template_vault")
|
||||
if err2 != nil {
|
||||
return err2
|
||||
}
|
||||
}
|
||||
|
||||
for projectID, projectVaults := range vaults {
|
||||
for repoID, vault := range projectVaults {
|
||||
if vault["type"] != nil && vault["type"] != "" {
|
||||
continue
|
||||
}
|
||||
vault["type"] = "password"
|
||||
err = d.setObject(projectID, "template_vault", repoID, vault)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
84
db/bolt/migration_2_10_33_test.go
Normal file
84
db/bolt/migration_2_10_33_test.go
Normal file
@ -0,0 +1,84 @@
|
||||
package bolt
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"go.etcd.io/bbolt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMigration_2_10_33_Apply(t *testing.T) {
|
||||
store := CreateTestStore()
|
||||
|
||||
err := store.db.Update(func(tx *bbolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists([]byte("project"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = b.Put([]byte("0000000001"), []byte("{}"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r, err := tx.CreateBucketIfNotExists([]byte("project__template_vault_0000000001"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = r.Put([]byte("0000000001"),
|
||||
[]byte("{\"id\":\"1\",\"project_id\":\"1\"}"))
|
||||
|
||||
return err
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = migration_2_10_33{migration{store.db}}.Apply()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var repo map[string]interface{}
|
||||
err = store.db.View(func(tx *bbolt.Tx) error {
|
||||
b := tx.Bucket([]byte("project__template_vault_0000000001"))
|
||||
str := string(b.Get([]byte("0000000001")))
|
||||
return json.Unmarshal([]byte(str), &repo)
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if repo["type"] == nil {
|
||||
t.Fatal("app must be set")
|
||||
}
|
||||
|
||||
if repo["type"].(string) != "password" {
|
||||
t.Fatal("invalid app: " + repo["type"].(string))
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigration_2_10_33_Apply2(t *testing.T) {
|
||||
store := CreateTestStore()
|
||||
|
||||
err := store.db.Update(func(tx *bbolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists([]byte("project"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = b.Put([]byte("0000000001"), []byte("{}"))
|
||||
|
||||
return err
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = migration_2_10_33{migration{store.db}}.Apply()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user