package main import ( "github.com/spf13/cobra" "log" "os" "strconv" ) var cli = &cobra.Command{ Use: "cobble", Short: "Cobble is a simple SQL migration utility.", } var up = &cobra.Command{ Use: "up", Short: "Applies migrations", Run: func(cmd *cobra.Command, args []string) { dbPort, _ := strconv.Atoi(os.Getenv("DB_PORT")) db := NewDatabase(os.Getenv("DB_HOST"), dbPort) err := db.Connect(os.Getenv("DB_APP_USER"), os.Getenv("DB_APP_PASSWORD"), os.Getenv("DB_NAME")) if err != nil { log.Printf("Failed to connect to the database: %s", err) os.Exit(1) } migrationRoot := args[0] migrationGraph, _ := NewMigrationGraphFromDirectory(migrationRoot) migrationHistory, _ := migrationGraph.GetLinearHistory() for _, migration := range migrationHistory { log.Printf("%s", migration.Name) if err = ApplyMigration(db, migration); err != nil { os.Exit(1) } } }, } func main() { cli.AddCommand(up) if err := cli.Execute(); err != nil { log.Fatal(err) os.Exit(1) } }