github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/newapp/core/core.go (about) 1 package core 2 3 import ( 4 "errors" 5 6 "github.com/JarrahG/buffalocli/internal/genny/ci" 7 "github.com/JarrahG/buffalocli/internal/genny/docker" 8 "github.com/JarrahG/buffalocli/internal/genny/plugins/install" 9 "github.com/JarrahG/buffalocli/internal/genny/refresh" 10 11 pop "github.com/gobuffalo/buffalo-pop/v3/genny/newapp" 12 "github.com/JarrahG/buffalocli/internal/plugins/plugdeps" 13 "github.com/gobuffalo/genny/v2" 14 "github.com/gobuffalo/meta" 15 ) 16 17 // New generator for creating a Buffalo application 18 func New(opts *Options) (*genny.Group, error) { 19 gg := &genny.Group{} 20 21 // add the root generator 22 g, err := rootGenerator(opts) 23 if err != nil { 24 return gg, err 25 } 26 gg.Add(g) 27 28 app := opts.App 29 30 plugs, err := plugdeps.List(app) 31 if err != nil && !errors.Is(err, plugdeps.ErrMissingConfig) { 32 return nil, err 33 } 34 35 if opts.Docker != nil { 36 // add the docker generator 37 g, err = docker.New(opts.Docker) 38 if err != nil { 39 return gg, err 40 } 41 gg.Add(g) 42 } 43 44 if opts.Pop != nil { 45 // add the pop generator 46 gg2, err := pop.New(opts.Pop) 47 if err != nil { 48 return gg, err 49 } 50 gg.Merge(gg2) 51 52 // add the plugin 53 plugs.Add(plugdeps.Plugin{ 54 Binary: "buffalo-pop", 55 GoGet: "github.com/gobuffalo/buffalo-pop/v3@latest", 56 }) 57 } 58 59 if opts.CI != nil { 60 // add the CI generator 61 g, err = ci.New(opts.CI) 62 if err != nil { 63 return gg, err 64 } 65 gg.Add(g) 66 } 67 68 if opts.Refresh != nil { 69 g, err = refresh.New(opts.Refresh) 70 if err != nil { 71 return gg, err 72 } 73 gg.Add(g) 74 } 75 76 // --- 77 78 // install all of the plugins 79 iopts := &install.Options{ 80 App: app, 81 Plugins: plugs.List(), 82 } 83 if app.WithSQLite { 84 iopts.Tags = meta.BuildTags{"sqlite"} 85 } 86 87 ig, err := install.New(iopts) 88 if err != nil { 89 return gg, err 90 } 91 gg.Merge(ig) 92 93 return gg, nil 94 }