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  }