From 4ef0f1b437d3ddc09e59c5d5f9c4a4eefdf258cf Mon Sep 17 00:00:00 2001 From: Nurahmadie Date: Sun, 16 Feb 2014 03:47:30 +0700 Subject: [PATCH] Integrate migrations with drone. Also add migration to tests. --- Makefile | 1 + cmd/droned/drone.go | 7 +++++- ...402200603_rename_privelege_to_privilege.go | 23 +++++++++++++++++++ pkg/database/migrate/all.go | 11 +++++++++ pkg/database/repos.go | 8 +++---- pkg/database/testing/testing.go | 5 ++++ pkg/handler/handler.go | 4 ++-- pkg/model/repo.go | 4 ++-- 8 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 pkg/database/migrate/201402200603_rename_privelege_to_privilege.go create mode 100644 pkg/database/migrate/all.go diff --git a/Makefile b/Makefile index c14a65db..86b8cf57 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,7 @@ test: go test -v github.com/drone/drone/pkg/channel go test -v github.com/drone/drone/pkg/database go test -v github.com/drone/drone/pkg/database/encrypt + go test -v github.com/drone/drone/pkg/database/migrate go test -v github.com/drone/drone/pkg/database/testing go test -v github.com/drone/drone/pkg/mail go test -v github.com/drone/drone/pkg/model diff --git a/cmd/droned/drone.go b/cmd/droned/drone.go index 86b6ba13..4809903b 100644 --- a/cmd/droned/drone.go +++ b/cmd/droned/drone.go @@ -15,6 +15,7 @@ import ( "github.com/drone/drone/pkg/channel" "github.com/drone/drone/pkg/database" + "github.com/drone/drone/pkg/database/migrate" "github.com/drone/drone/pkg/handler" ) @@ -55,8 +56,9 @@ func main() { // setup the database connection and register with the // global database package. func setupDatabase() { - // inform meddler we're using sqlite + // inform meddler and migration we're using sqlite meddler.Default = meddler.SQLite + migrate.Driver = migrate.SQLite // connect to the SQLite database db, err := sql.Open(driver, datasource) @@ -65,6 +67,9 @@ func setupDatabase() { } database.Set(db) + + migration := migrate.New(db) + migration.All().Migrate() } // setup routes for static assets. These assets may diff --git a/pkg/database/migrate/201402200603_rename_privelege_to_privilege.go b/pkg/database/migrate/201402200603_rename_privelege_to_privilege.go new file mode 100644 index 00000000..379a6649 --- /dev/null +++ b/pkg/database/migrate/201402200603_rename_privelege_to_privilege.go @@ -0,0 +1,23 @@ +package migrate + +type Rev1 struct{} + +var RenamePrivelegedToPrivileged = &Rev1{} + +func (r *Rev1) Revision() int64 { + return 201402200603 +} + +func (r *Rev1) Up(op Operation) error { + _, err := op.RenameColumns("repos", map[string]string{ + "priveleged": "privileged", + }) + return err +} + +func (r *Rev1) Down(op Operation) error { + _, err := op.RenameColumns("repos", map[string]string{ + "privileged": "priveleged", + }) + return err +} diff --git a/pkg/database/migrate/all.go b/pkg/database/migrate/all.go new file mode 100644 index 00000000..3933a93c --- /dev/null +++ b/pkg/database/migrate/all.go @@ -0,0 +1,11 @@ +package migrate + +func (m *Migration) All() *Migration { + + // List all migrations here + m.Add(RenamePrivelegedToPrivileged) + + // m.Add(...) + // ... + return m +} diff --git a/pkg/database/repos.go b/pkg/database/repos.go index e4407c02..0d9e2f15 100644 --- a/pkg/database/repos.go +++ b/pkg/database/repos.go @@ -13,7 +13,7 @@ const repoTable = "repos" // SQL Queries to retrieve a list of all repos belonging to a User. const repoStmt = ` SELECT id, slug, host, owner, name, private, disabled, disabled_pr, scm, url, username, password, -public_key, private_key, params, timeout, priveleged, created, updated, user_id, team_id +public_key, private_key, params, timeout, privileged, created, updated, user_id, team_id FROM repos WHERE user_id = ? AND team_id = 0 ORDER BY slug ASC @@ -22,7 +22,7 @@ ORDER BY slug ASC // SQL Queries to retrieve a list of all repos belonging to a Team. const repoTeamStmt = ` SELECT id, slug, host, owner, name, private, disabled, disabled_pr, scm, url, username, password, -public_key, private_key, params, timeout, priveleged, created, updated, user_id, team_id +public_key, private_key, params, timeout, privileged, created, updated, user_id, team_id FROM repos WHERE team_id = ? ORDER BY slug ASC @@ -31,7 +31,7 @@ ORDER BY slug ASC // SQL Queries to retrieve a repo by id. const repoFindStmt = ` SELECT id, slug, host, owner, name, private, disabled, disabled_pr, scm, url, username, password, -public_key, private_key, params, timeout, priveleged, created, updated, user_id, team_id +public_key, private_key, params, timeout, privileged, created, updated, user_id, team_id FROM repos WHERE id = ? ` @@ -39,7 +39,7 @@ WHERE id = ? // SQL Queries to retrieve a repo by name. const repoFindSlugStmt = ` SELECT id, slug, host, owner, name, private, disabled, disabled_pr, scm, url, username, password, -public_key, private_key, params, timeout, priveleged, created, updated, user_id, team_id +public_key, private_key, params, timeout, privileged, created, updated, user_id, team_id FROM repos WHERE slug = ? ` diff --git a/pkg/database/testing/testing.go b/pkg/database/testing/testing.go index 11106e2d..69fde378 100644 --- a/pkg/database/testing/testing.go +++ b/pkg/database/testing/testing.go @@ -7,6 +7,7 @@ import ( "github.com/drone/drone/pkg/database" "github.com/drone/drone/pkg/database/encrypt" + "github.com/drone/drone/pkg/database/migrate" . "github.com/drone/drone/pkg/model" _ "github.com/mattn/go-sqlite3" @@ -31,6 +32,7 @@ func init() { // notify meddler that we are working with sqlite meddler.Default = meddler.SQLite + migrate.Driver = migrate.SQLite } func Setup() { @@ -40,6 +42,9 @@ func Setup() { // make sure all the tables and indexes are created database.Set(db) + migration := migrate.New(db) + migration.All().Migrate() + // create dummy user data user1 := User{ Password: "$2a$10$b8d63QsTL38vx7lj0HEHfOdbu1PCAg6Gfca74UavkXooIBx9YxopS", diff --git a/pkg/handler/handler.go b/pkg/handler/handler.go index 2b3d2806..bf9914e4 100644 --- a/pkg/handler/handler.go +++ b/pkg/handler/handler.go @@ -41,7 +41,7 @@ func (h UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // AdminHandler wraps the default http.HandlerFunc to include // the currently authenticated User in the method signature, // in addition to handling an error as the return value. It also -// verifies the user has Administrative priveleges. +// verifies the user has Administrative privileges. type AdminHandler func(w http.ResponseWriter, r *http.Request, user *User) error func (h AdminHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -51,7 +51,7 @@ func (h AdminHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - // User MUST have administrative priveleges in order + // User MUST have administrative privileges in order // to execute the handler. if user.Admin == false { RenderNotFound(w) diff --git a/pkg/model/repo.go b/pkg/model/repo.go index 5b89ad71..8d3ab202 100644 --- a/pkg/model/repo.go +++ b/pkg/model/repo.go @@ -88,9 +88,9 @@ type Repo struct { // before exceeding its timelimit and being killed. Timeout int64 `meddler:"timeout" json:"timeout"` - // Indicates the build should be executed in priveleged + // Indicates the build should be executed in privileged // mode. This could, for example, be used to run Docker in Docker. - Priveleged bool `meddler:"priveleged" json:"priveleged"` + Privileged bool `meddler:"privileged" json:"privileged"` // Foreign keys signify the User that created // the repository and team account linked to