mirror of https://github.com/pressly/goose.git
feat: add goose env command (#443)
parent
436452dc94
commit
db8feddea6
|
@ -12,11 +12,12 @@ import (
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"github.com/pressly/goose/v3"
|
"github.com/pressly/goose/v3"
|
||||||
|
"github.com/pressly/goose/v3/internal/cfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
flags = flag.NewFlagSet("goose", flag.ExitOnError)
|
flags = flag.NewFlagSet("goose", flag.ExitOnError)
|
||||||
dir = flags.String("dir", defaultMigrationDir, "directory with migration files")
|
dir = flags.String("dir", cfg.DefaultMigrationDir, "directory with migration files")
|
||||||
table = flags.String("table", "goose_db_version", "migrations table name")
|
table = flags.String("table", "goose_db_version", "migrations table name")
|
||||||
verbose = flags.Bool("v", false, "enable verbose mode")
|
verbose = flags.Bool("v", false, "enable verbose mode")
|
||||||
help = flags.Bool("h", false, "print help")
|
help = flags.Bool("h", false, "print help")
|
||||||
|
@ -66,8 +67,8 @@ func main() {
|
||||||
|
|
||||||
// The -dir option has not been set, check whether the env variable is set
|
// The -dir option has not been set, check whether the env variable is set
|
||||||
// before defaulting to ".".
|
// before defaulting to ".".
|
||||||
if *dir == defaultMigrationDir && os.Getenv(envGooseMigrationDir) != "" {
|
if *dir == cfg.DefaultMigrationDir && cfg.GOOSEMIGRATIONDIR != "" {
|
||||||
*dir = os.Getenv(envGooseMigrationDir)
|
*dir = cfg.GOOSEMIGRATIONDIR
|
||||||
}
|
}
|
||||||
|
|
||||||
switch args[0] {
|
switch args[0] {
|
||||||
|
@ -86,6 +87,11 @@ func main() {
|
||||||
log.Fatalf("goose run: %v", err)
|
log.Fatalf("goose run: %v", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
case "env":
|
||||||
|
for _, env := range cfg.List() {
|
||||||
|
fmt.Printf("%s=%q\n", env.Name, env.Value)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
args = mergeArgs(args)
|
args = mergeArgs(args)
|
||||||
|
@ -140,34 +146,19 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkNoColorFromEnv() bool {
|
func checkNoColorFromEnv() bool {
|
||||||
if s := os.Getenv(envNoColor); s != "" {
|
ok, _ := strconv.ParseBool(cfg.GOOSENOCOLOR)
|
||||||
ok, _ := strconv.ParseBool(s)
|
return ok
|
||||||
return ok
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
envGooseDriver = "GOOSE_DRIVER"
|
|
||||||
envGooseDBString = "GOOSE_DBSTRING"
|
|
||||||
envGooseMigrationDir = "GOOSE_MIGRATION_DIR"
|
|
||||||
// https://no-color.org/
|
|
||||||
envNoColor = "NO_COLOR"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultMigrationDir = "."
|
|
||||||
)
|
|
||||||
|
|
||||||
func mergeArgs(args []string) []string {
|
func mergeArgs(args []string) []string {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
if d := os.Getenv(envGooseDriver); d != "" {
|
if s := cfg.GOOSEDRIVER; s != "" {
|
||||||
args = append([]string{d}, args...)
|
args = append([]string{s}, args...)
|
||||||
}
|
}
|
||||||
if d := os.Getenv(envGooseDBString); d != "" {
|
if s := cfg.GOOSEDBSTRING; s != "" {
|
||||||
args = append([]string{args[0], d}, args[1:]...)
|
args = append([]string{args[0], s}, args[1:]...)
|
||||||
}
|
}
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
|
@ -268,7 +259,7 @@ SELECT 'down SQL query';
|
||||||
|
|
||||||
// initDir will create a directory with an empty SQL migration file.
|
// initDir will create a directory with an empty SQL migration file.
|
||||||
func gooseInit(dir string) error {
|
func gooseInit(dir string) error {
|
||||||
if dir == "" || dir == defaultMigrationDir {
|
if dir == "" || dir == cfg.DefaultMigrationDir {
|
||||||
dir = "migrations"
|
dir = "migrations"
|
||||||
}
|
}
|
||||||
_, err := os.Stat(dir)
|
_, err := os.Stat(dir)
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package cfg
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
var (
|
||||||
|
GOOSEDRIVER = envOr("GOOSE_DRIVER", "")
|
||||||
|
GOOSEDBSTRING = envOr("GOOSE_DBSTRING", "")
|
||||||
|
GOOSEMIGRATIONDIR = envOr("GOOSE_MIGRATION_DIR", DefaultMigrationDir)
|
||||||
|
// https://no-color.org/
|
||||||
|
GOOSENOCOLOR = envOr("NO_COLOR", "false")
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
DefaultMigrationDir = "."
|
||||||
|
)
|
||||||
|
|
||||||
|
// An EnvVar is an environment variable Name=Value.
|
||||||
|
type EnvVar struct {
|
||||||
|
Name string
|
||||||
|
Value string
|
||||||
|
}
|
||||||
|
|
||||||
|
func List() []EnvVar {
|
||||||
|
return []EnvVar{
|
||||||
|
{Name: "GOOSE_DRIVER", Value: GOOSEDRIVER},
|
||||||
|
{Name: "GOOSE_DBSTRING", Value: GOOSEDBSTRING},
|
||||||
|
{Name: "GOOSE_MIGRATION_DIR", Value: GOOSEMIGRATIONDIR},
|
||||||
|
{Name: "NO_COLOR", Value: GOOSENOCOLOR},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// envOr returns os.Getenv(key) if set, or else default.
|
||||||
|
func envOr(key, def string) string {
|
||||||
|
val := os.Getenv(key)
|
||||||
|
if val == "" {
|
||||||
|
val = def
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
Loading…
Reference in New Issue