You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
package main
|
|
|
|
import (
|
|
"git.aiterp.net/stufflog/server/database"
|
|
"github.com/pkg/errors"
|
|
"github.com/pressly/goose"
|
|
"github.com/urfave/cli/v2"
|
|
"log"
|
|
"os"
|
|
"sort"
|
|
)
|
|
|
|
func main() {
|
|
app := &cli.App{
|
|
Name: "stufflog",
|
|
Usage: "Issue tracker for your home and hobbies",
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "db-driver",
|
|
Value: "mysql",
|
|
Usage: "Database driver",
|
|
EnvVars: []string{"DATABASE_DRIVER"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "db-connect",
|
|
Value: "stufflog_user:stuff1234@(localhost:3306)/stufflog",
|
|
Usage: "Database connection string or path",
|
|
EnvVars: []string{"DATABASE_CONNECT"},
|
|
},
|
|
},
|
|
Commands: []*cli.Command{
|
|
{
|
|
Name: "migrate",
|
|
Usage: "Migrate the configured database",
|
|
Action: func(c *cli.Context) error {
|
|
db, err := database.Open(c.String("db-driver"), c.String("db-connect"))
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to connect to database")
|
|
}
|
|
|
|
err = db.Migrate()
|
|
if err == goose.ErrNoNextVersion {
|
|
log.Println("No more migrations to run")
|
|
} else if err != nil {
|
|
return errors.Wrap(err, "Failed to run migration")
|
|
}
|
|
|
|
log.Println("Migration succeeded")
|
|
|
|
return nil
|
|
},
|
|
},
|
|
{
|
|
Name: "server",
|
|
Usage: "Run the server",
|
|
Action: func(c *cli.Context) error {
|
|
_, err := database.Open(c.String("db-driver"), c.String("db-connect"))
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to connect to database")
|
|
}
|
|
|
|
return nil
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
sort.Sort(cli.FlagsByName(app.Flags))
|
|
sort.Sort(cli.CommandsByName(app.Commands))
|
|
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|