111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"git.yuntuo.hk/k2safe/go-omni/cmd/go-omni/scaffold"
|
|
)
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
usage()
|
|
os.Exit(2)
|
|
}
|
|
|
|
switch os.Args[1] {
|
|
case "new":
|
|
if err := runNew(os.Args[2:]); err != nil {
|
|
fmt.Fprintln(os.Stderr, "go-omni new:", err)
|
|
os.Exit(1)
|
|
}
|
|
case "help", "-h", "--help":
|
|
usage()
|
|
default:
|
|
fmt.Fprintf(os.Stderr, "unknown command %q\n", os.Args[1])
|
|
usage()
|
|
os.Exit(2)
|
|
}
|
|
}
|
|
|
|
func runNew(args []string) error {
|
|
options := scaffold.Options{}
|
|
var target string
|
|
for index := 0; index < len(args); index++ {
|
|
arg := args[index]
|
|
switch {
|
|
case arg == "--force":
|
|
options.Force = true
|
|
case arg == "--database":
|
|
if index+1 >= len(args) || strings.TrimSpace(args[index+1]) == "" {
|
|
return errors.New("--database requires memory or mysql")
|
|
}
|
|
index++
|
|
options.Database = args[index]
|
|
case strings.HasPrefix(arg, "--database="):
|
|
options.Database = strings.TrimPrefix(arg, "--database=")
|
|
if strings.TrimSpace(options.Database) == "" {
|
|
return errors.New("--database requires memory or mysql")
|
|
}
|
|
case arg == "--module":
|
|
if index+1 >= len(args) {
|
|
return errors.New("--module requires a value")
|
|
}
|
|
index++
|
|
options.Module = args[index]
|
|
case strings.HasPrefix(arg, "--module="):
|
|
options.Module = strings.TrimPrefix(arg, "--module=")
|
|
case arg == "--framework-dir":
|
|
if index+1 >= len(args) {
|
|
return errors.New("--framework-dir requires a value")
|
|
}
|
|
index++
|
|
options.FrameworkDir = args[index]
|
|
case strings.HasPrefix(arg, "--framework-dir="):
|
|
options.FrameworkDir = strings.TrimPrefix(arg, "--framework-dir=")
|
|
case arg == "--framework-version":
|
|
if index+1 >= len(args) || strings.TrimSpace(args[index+1]) == "" {
|
|
return errors.New("--framework-version requires a value")
|
|
}
|
|
index++
|
|
options.FrameworkVersion = args[index]
|
|
case strings.HasPrefix(arg, "--framework-version="):
|
|
options.FrameworkVersion = strings.TrimPrefix(arg, "--framework-version=")
|
|
if strings.TrimSpace(options.FrameworkVersion) == "" {
|
|
return errors.New("--framework-version requires a value")
|
|
}
|
|
case strings.HasPrefix(arg, "-"):
|
|
return fmt.Errorf("unknown option %q", arg)
|
|
case target == "":
|
|
target = arg
|
|
default:
|
|
return fmt.Errorf("unexpected argument %q", arg)
|
|
}
|
|
}
|
|
if target == "" {
|
|
return errors.New("project directory is required")
|
|
}
|
|
if options.Module == "" {
|
|
options.Module = filepath.Base(filepath.Clean(target))
|
|
}
|
|
options.Dir = target
|
|
if err := scaffold.Generate(options); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("created GoOmni project %s\n", filepath.Clean(target))
|
|
return nil
|
|
}
|
|
|
|
func usage() {
|
|
fmt.Fprintln(os.Stderr, "GoOmni project tool")
|
|
fmt.Fprintln(os.Stderr, "")
|
|
fmt.Fprintln(os.Stderr, "Usage:")
|
|
fmt.Fprintln(os.Stderr, " go-omni new [--module <module>] [--force] <directory>")
|
|
fmt.Fprintln(os.Stderr, " --framework-version <version> Pin a remote framework version (defaults to CLI version)")
|
|
fmt.Fprintln(os.Stderr, " --framework-dir <directory> Use a local framework checkout")
|
|
fmt.Fprintln(os.Stderr, " --database <memory|mysql> Select generated storage (default memory)")
|
|
}
|