skeleton/cmd/cmd.go
2019-05-14 14:11:03 +02:00

56 lines
1.3 KiB
Go

package cmd
import (
"log"
"os"
cli "github.com/jawher/mow.cli"
"bitmask.me/skeleton/internal/app"
"bitmask.me/skeleton/internal/database"
"bitmask.me/skeleton/internal/web"
)
// Execute is the main entrypoint for this program
func Execute() {
var ac = app.New(app.ConfigFromEnv())
root := cli.App("skeleton", "")
root.Command("web server", "run a web server", func(cmd *cli.Cmd) {
cmd.Spec = "[ --http ]"
var (
listenAddr = cmd.StringOpt("l addr http", ":8080", "Listen address")
)
cmd.Action = func() {
log.Printf("Web Server listening on %s", *listenAddr)
web.RunServer(ac, *listenAddr)
}
})
root.Command("migrate", "alter the database schema", func(cmd *cli.Cmd) {
cmd.Spec = "--up | --revision | --drop-all"
var (
_ = cmd.BoolOpt("u up", false, "migrate to most recent revision")
drop = cmd.BoolOpt("drop-all", false, "USE WITH CARE: Completely devestate the database, use --revision=0 instead")
rev = cmd.IntOpt("r revision", database.MigrateUp, "revision that should be migrated to, defaults to most recent")
)
cmd.Action = func() {
db := ac.Database()
if *drop {
*rev = database.MigrateDrop
}
if err := database.Migrate(db, ac.Files, *rev); err != nil {
log.Fatalf("Migration failed due to error: %s", err)
}
}
})
root.Run(os.Args)
}