package main import ( "bufio" "fmt" "os" "path/filepath" "github.com/spf13/cobra" "git.offline-twitter.com/offline-labs/gas-stack/pkg/codegen" "git.offline-twitter.com/offline-labs/gas-stack/pkg/must" ) var cmdInit = &cobra.Command{ Use: "init [path]", Short: "Initialize a new project", Long: "Initialize a new Gas Stack project at the given path. If no path is given, defaults to current directory.", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { var target string if len(args) != 0 { target = args[0] must.Do(os.MkdirAll(target, 0o755)) must.Do(os.Chdir(target)) } else { // Default to current directory (".") target = must.Get(os.Getwd()) } // Get all the config values getVal := func(prompt string, val *string) { fmt.Printf("%s (%q): ", prompt, *val) scanner := bufio.NewScanner(os.Stdin) scanner.Scan() input := scanner.Text() if input != "" { *val = input } } pkgOpts := codegen.PkgOpts{ ModuleName: must.Get(cmd.Flags().GetString("module")), DBFilename: must.Get(cmd.Flags().GetString("db")), BinaryName: must.Get(cmd.Flags().GetString("binary")), } if pkgOpts.ModuleName == "" { pkgOpts.ModuleName = filepath.Base(target) getVal("module name", &pkgOpts.ModuleName) } if pkgOpts.DBFilename == "" { pkgOpts.DBFilename = pkgOpts.ModuleName + ".db" getVal("db name", &pkgOpts.DBFilename) } if pkgOpts.BinaryName == "" { pkgOpts.BinaryName = pkgOpts.ModuleName getVal("binary name", &pkgOpts.BinaryName) } // Run project initialization codegen.InitPkg(pkgOpts) }, } func init() { cmdInit.Flags().String("module", "", "Module name") cmdInit.Flags().String("db", "", "Database filename") cmdInit.Flags().String("binary", "", "Binary name") }