Skip to content

Commit

Permalink
Use system variables in migrations
Browse files Browse the repository at this point in the history
Use "env" instead of "env-var"
  • Loading branch information
davidecavestro committed May 3, 2023
1 parent 2d90e1b commit 14fe8d9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
6 changes: 3 additions & 3 deletions pkg/dbmate/migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (m migrationOptions) Transaction() bool {
// Defaults to empty list.
func (m migrationOptions) EnvVars() []string {
result := make([]string, 0)
entry := m["env-var"]
entry := m["env"]

if entry != "" {
// decode CSV encoded var names
Expand Down Expand Up @@ -162,13 +162,13 @@ func parseMigrationOptions(contents string) ParsedMigrationOptions {
optKey := pair[0]
optValue := pair[1]
entry := options[optKey]
if entry != "" { // "env-var" entry already used
if entry != "" { // "env" entry already used
varNames := strings.Split(entry, ",")
// add new element to the slice
varNames = append(varNames, optValue)
// keep collected values
options[optKey] = strings.Join(varNames, ",")
} else { // first "env-var" entry
} else { // first "env" entry
options[optKey] = optValue
}
}
Expand Down
16 changes: 8 additions & 8 deletions pkg/dbmate/migration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,36 +103,36 @@ ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';
})

t.Run("support activating env vars", func(t *testing.T) {
migration := `-- migrate:up env-var:THE_ROLE env-var:THE_PASSWORD
migration := `-- migrate:up env:THE_ROLE env:THE_PASSWORD
create role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};
-- migrate:down env-var:THE_ROLE
-- migrate:down env:THE_ROLE
drop role {{ .THE_ROLE }};
`

parsed, err := parseMigrationContents(migration)
require.Nil(t, err)

require.Equal(t, "-- migrate:up env-var:THE_ROLE env-var:THE_PASSWORD\ncreate role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};\n", parsed.Up)
require.Equal(t, "-- migrate:up env:THE_ROLE env:THE_PASSWORD\ncreate role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};\n", parsed.Up)
require.Equal(t, []string{"THE_ROLE", "THE_PASSWORD"}, parsed.UpOptions.EnvVars())

require.Equal(t, "-- migrate:down env-var:THE_ROLE\ndrop role {{ .THE_ROLE }};\n", parsed.Down)
require.Equal(t, "-- migrate:down env:THE_ROLE\ndrop role {{ .THE_ROLE }};\n", parsed.Down)
require.Equal(t, []string{"THE_ROLE"}, parsed.DownOptions.EnvVars())
})

t.Run("support activating env vars", func(t *testing.T) {
migration := `-- migrate:up env-var:THE_ROLE env-var:THE_PASSWORD
migration := `-- migrate:up env:THE_ROLE env:THE_PASSWORD
create role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};
-- migrate:down env-var:THE_ROLE
-- migrate:down env:THE_ROLE
drop role {{ .THE_ROLE }};
`

parsed, err := parseMigrationContents(migration)
require.Nil(t, err)

require.Equal(t, "-- migrate:up env-var:THE_ROLE env-var:THE_PASSWORD\ncreate role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};\n", parsed.Up)
require.Equal(t, "-- migrate:up env:THE_ROLE env:THE_PASSWORD\ncreate role {{ .THE_ROLE }} login password {{ .THE_PASSWORD }};\n", parsed.Up)
require.Equal(t, []string{"THE_ROLE", "THE_PASSWORD"}, parsed.UpOptions.EnvVars())

require.Equal(t, "-- migrate:down env-var:THE_ROLE\ndrop role {{ .THE_ROLE }};\n", parsed.Down)
require.Equal(t, "-- migrate:down env:THE_ROLE\ndrop role {{ .THE_ROLE }};\n", parsed.Down)
require.Equal(t, []string{"THE_ROLE"}, parsed.DownOptions.EnvVars())
})

Expand Down
2 changes: 1 addition & 1 deletion testdata/db/migrations/20200227231541_test_posts.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- migrate:up env-var:YABBA_DABBA_DOO
-- migrate:up env:YABBA_DABBA_DOO
create table posts (
id integer,
name varchar(255)
Expand Down

0 comments on commit 14fe8d9

Please sign in to comment.