github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/build/assets.go (about) 1 package build 2 3 import ( 4 "bytes" 5 "os/exec" 6 "path/filepath" 7 8 "github.com/JarrahG/buffalocli/internal/genny/assets/webpack" 9 "github.com/gobuffalo/envy" 10 "github.com/gobuffalo/genny/v2" 11 ) 12 13 func assets(opts *Options) (*genny.Generator, error) { 14 g := genny.New() 15 16 if err := opts.Validate(); err != nil { 17 return g, err 18 } 19 20 if opts.App.WithNodeJs || opts.App.WithWebpack { 21 if opts.CleanAssets { 22 g.RunFn(func(r *genny.Runner) error { 23 return r.Delete(filepath.Join(opts.App.Root, "public", "assets")) 24 }) 25 } 26 g.RunFn(func(r *genny.Runner) error { 27 r.Logger.Debugf("setting NODE_ENV = %s", opts.Environment) 28 return envy.MustSet("NODE_ENV", opts.Environment) 29 }) 30 g.RunFn(func(r *genny.Runner) error { 31 tool := "yarnpkg" 32 if !opts.App.WithYarn { 33 tool = "npm" 34 } 35 36 c := exec.CommandContext(r.Context, tool, "run", "build") 37 if _, err := opts.App.NodeScript("build"); err != nil { 38 // Fallback on legacy runner 39 c = exec.CommandContext(r.Context, webpack.BinPath) 40 } 41 42 bb := &bytes.Buffer{} 43 c.Stdout = bb 44 c.Stderr = bb 45 46 if err := r.Exec(c); err != nil { 47 r.Logger.Error(bb.String()) 48 return err 49 } 50 return nil 51 }) 52 } 53 54 if opts.ExtractAssets && opts.WithAssets { 55 // mount the archived assets generator 56 aa, err := archivedAssets(opts) 57 if err != nil { 58 return g, err 59 } 60 g.Merge(aa) 61 } 62 63 return g, nil 64 }