github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/pkg/ddevapp/composer.go (about)

     1  package ddevapp
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"runtime"
     7  
     8  	"github.com/drud/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  	})
    26  	if err != nil {
    27  		return stdout, stderr, fmt.Errorf("composer command failed: %v", err)
    28  	}
    29  
    30  	err = app.MutagenSyncFlush()
    31  	if err != nil {
    32  		return stdout, stderr, err
    33  	}
    34  	if runtime.GOOS == "windows" {
    35  		fileutil.ReplaceSimulatedLinks(app.AppRoot)
    36  	}
    37  	err = app.ProcessHooks("post-composer")
    38  	if err != nil {
    39  		return "", "", fmt.Errorf("failed to process post-composer hooks: %v", err)
    40  	}
    41  
    42  	return stdout, stderr, nil
    43  }