mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-02-06 14:42:25 +00:00
105 lines
1.7 KiB
Go
105 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
|
||
|
"github.com/urfave/cli"
|
||
|
|
||
|
"github.com/bradrydzewski/togo/parser"
|
||
|
"github.com/bradrydzewski/togo/template"
|
||
|
)
|
||
|
|
||
|
type migration struct {
|
||
|
Name string
|
||
|
Statements []*parser.Statement
|
||
|
}
|
||
|
|
||
|
type logger struct {
|
||
|
Enabled bool
|
||
|
Package string
|
||
|
}
|
||
|
|
||
|
type migrationParams struct {
|
||
|
Package string
|
||
|
Dialect string
|
||
|
Migrations []migration
|
||
|
Logger logger
|
||
|
}
|
||
|
|
||
|
var ddlCommand = cli.Command{
|
||
|
Name: "ddl",
|
||
|
Usage: "embed ddl statements",
|
||
|
Action: ddlAction,
|
||
|
Flags: []cli.Flag{
|
||
|
cli.StringFlag{
|
||
|
Name: "package",
|
||
|
Value: "ddl",
|
||
|
},
|
||
|
cli.StringFlag{
|
||
|
Name: "dialect",
|
||
|
Value: "sqlite3",
|
||
|
},
|
||
|
cli.StringFlag{
|
||
|
Name: "input",
|
||
|
Value: "files/*.sql",
|
||
|
},
|
||
|
cli.StringFlag{
|
||
|
Name: "output",
|
||
|
Value: "ddl_gen.go",
|
||
|
},
|
||
|
cli.BoolFlag{
|
||
|
Name: "log",
|
||
|
},
|
||
|
cli.StringFlag{
|
||
|
Name: "logger",
|
||
|
Value: "log", // log, logrus
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func ddlAction(c *cli.Context) error {
|
||
|
pattern := c.Args().First()
|
||
|
if pattern == "" {
|
||
|
pattern = c.String("input")
|
||
|
}
|
||
|
|
||
|
matches, err := filepath.Glob(pattern)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
params := migrationParams{
|
||
|
Package: c.String("package"),
|
||
|
Dialect: c.String("dialect"),
|
||
|
Logger: logger{
|
||
|
Enabled: c.Bool("log"),
|
||
|
Package: c.String("logger"),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
parse := parser.New()
|
||
|
for _, match := range matches {
|
||
|
statements, perr := parse.ParseFile(match)
|
||
|
if perr != nil {
|
||
|
return perr
|
||
|
}
|
||
|
_, filename := filepath.Split(match)
|
||
|
params.Migrations = append(params.Migrations, migration{
|
||
|
Name: filename,
|
||
|
Statements: statements,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
wr := os.Stdout
|
||
|
if output := c.String("output"); output != "" {
|
||
|
wr, err = os.Create(output)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer wr.Close()
|
||
|
}
|
||
|
|
||
|
return template.Execute(wr, "ddl.tmpl", params)
|
||
|
}
|