github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/internal/garlic/run.go (about)

     1  package garlic
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"io/ioutil"
     7  	"os"
     8  	"os/exec"
     9  	"path/filepath"
    10  
    11  	"github.com/gobuffalo/buffalo-cli/v2/cli"
    12  	"github.com/gobuffalo/plugins/plugio"
    13  )
    14  
    15  func isBuffalo(mod string) bool {
    16  	if _, err := os.Stat(mod); err != nil {
    17  		return false
    18  	}
    19  
    20  	b, err := ioutil.ReadFile(mod)
    21  	if err != nil {
    22  		return false
    23  	}
    24  
    25  	return bytes.Contains(b, []byte("github.com/gobuffalo/buffalo"))
    26  }
    27  
    28  func Run(ctx context.Context, root string, args []string) error {
    29  	main := filepath.Join(root, "cmd", "buffalo")
    30  	if _, err := os.Stat(filepath.Dir(main)); err != nil {
    31  		buff, err := cli.NewFromRoot(root)
    32  		if err != nil {
    33  			return err
    34  		}
    35  		return buff.Main(ctx, root, args)
    36  	}
    37  
    38  	bargs := []string{"run", "-v", "./cmd/buffalo"}
    39  	bargs = append(bargs, args...)
    40  
    41  	cmd := exec.CommandContext(ctx, "go", bargs...)
    42  	cmd.Stdin = plugio.Stdin()
    43  	cmd.Stdout = plugio.Stdout()
    44  	cmd.Stderr = plugio.Stderr()
    45  	return cmd.Run()
    46  }