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  }