github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/cmd/new/new.go (about) 1 package new 2 3 import ( 4 "context" 5 "os" 6 "os/exec" 7 8 "github.com/JarrahG/buffalocli/internal/genny/assets/standard" 9 "github.com/JarrahG/buffalocli/internal/genny/assets/webpack" 10 "github.com/JarrahG/buffalocli/internal/genny/newapp/api" 11 "github.com/JarrahG/buffalocli/internal/genny/newapp/web" 12 "github.com/JarrahG/buffalocli/internal/genny/vcs" 13 "github.com/gobuffalo/genny/v2" 14 "github.com/gobuffalo/genny/v2/gogen" 15 "github.com/gobuffalo/logger" 16 "github.com/spf13/cobra" 17 "github.com/spf13/pflag" 18 "github.com/spf13/viper" 19 ) 20 21 func RunE(cmd *cobra.Command, args []string) error { 22 // Restore default values after usage (useful for testing) 23 defer func() { 24 cmd.Flags().Visit(func(f *pflag.Flag) { 25 f.Value.Set(f.DefValue) 26 }) 27 viper.BindPFlags(cmd.Flags()) 28 }() 29 30 nopts, err := parseNewOptions(args) 31 if err != nil { 32 return err 33 } 34 35 opts := nopts.Options 36 app := opts.App 37 38 ctx := context.Background() 39 40 run := genny.WetRunner(ctx) 41 lg := logger.New(logger.DebugLevel) 42 run.Logger = lg 43 44 if nopts.DryRun { 45 run = genny.DryRunner(ctx) 46 } 47 48 run.Root = app.Root 49 if nopts.Force && !nopts.DryRun { 50 os.RemoveAll(app.Root) 51 } 52 53 var gg *genny.Group 54 if app.AsAPI { 55 if gg, err = api.New(&api.Options{ 56 Options: opts, 57 }); err != nil { 58 return err 59 } 60 } else { 61 wo := &web.Options{ 62 Options: opts, 63 } 64 if app.WithWebpack { 65 wo.Webpack = &webpack.Options{} 66 } else { 67 wo.Standard = &standard.Options{} 68 } 69 if gg, err = web.New(wo); err != nil { 70 return err 71 } 72 } 73 74 g := genny.New() 75 g.Command(exec.Command("go", "mod", "tidy")) 76 g.Command(exec.Command("go", "mod", "download")) 77 gg.Add(g) 78 79 run.WithGroup(gg) 80 81 if err := run.WithNew(gogen.Fmt(app.Root)); err != nil { 82 return err 83 } 84 85 // setup VCS last 86 if opts.VCS != nil { 87 // add the VCS generator 88 if err := run.WithNew(vcs.New(opts.VCS)); err != nil { 89 return err 90 } 91 } 92 93 if err := run.Run(); err != nil { 94 return err 95 } 96 97 run.Logger.Infof("Congratulations! Your application, %s, has been successfully generated!", app.Name) 98 run.Logger.Infof("You can find your new application at: %v", app.Root) 99 run.Logger.Info("Please read the README.md file in your new application for next steps on running your application.") 100 101 return nil 102 }