github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/pkg/ddevapp/composer.go (about) 1 package ddevapp 2 3 import ( 4 "fmt" 5 "os" 6 "runtime" 7 8 "github.com/ddev/ddev/pkg/fileutil" 9 "github.com/mattn/go-isatty" 10 ) 11 12 // Composer runs Composer commands in the web container, managing pre- and post- hooks 13 // returns stdout, stderr, error 14 func (app *DdevApp) Composer(args []string) (string, string, error) { 15 err := app.ProcessHooks("pre-composer") 16 if err != nil { 17 return "", "", fmt.Errorf("failed to process pre-composer hooks: %v", err) 18 } 19 20 stdout, stderr, err := app.Exec(&ExecOpts{ 21 Service: "web", 22 Dir: app.GetComposerRoot(true, true), 23 RawCmd: append([]string{"composer"}, args...), 24 Tty: isatty.IsTerminal(os.Stdin.Fd()), 25 // Prevent Composer from debugging when Xdebug is enabled 26 Env: []string{"XDEBUG_MODE=off"}, 27 }) 28 if err != nil { 29 return stdout, stderr, fmt.Errorf("composer command failed: %v", err) 30 } 31 32 err = app.MutagenSyncFlush() 33 if err != nil { 34 return stdout, stderr, err 35 } 36 if runtime.GOOS == "windows" { 37 fileutil.ReplaceSimulatedLinks(app.AppRoot) 38 } 39 err = app.ProcessHooks("post-composer") 40 if err != nil { 41 return "", "", fmt.Errorf("failed to process post-composer hooks: %v", err) 42 } 43 44 return stdout, stderr, nil 45 }