github.com/singlemusic/buffalo@v0.16.30/buffalo/cmd/plugins/install.go (about)

     1  package plugins
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"io"
     7  	"os"
     8  	"path"
     9  	"strings"
    10  
    11  	"github.com/gobuffalo/buffalo/genny/plugins/install"
    12  	"github.com/gobuffalo/buffalo/internal/takeon/github.com/markbates/errx"
    13  	"github.com/gobuffalo/buffalo/plugins/plugdeps"
    14  	"github.com/gobuffalo/genny/v2"
    15  	"github.com/gobuffalo/logger"
    16  	"github.com/gobuffalo/meta"
    17  	"github.com/spf13/cobra"
    18  )
    19  
    20  var installOptions = struct {
    21  	dryRun  bool
    22  	vendor  bool
    23  	verbose bool
    24  }{}
    25  
    26  var installCmd = &cobra.Command{
    27  	Use:   "install",
    28  	Short: "installs plugins listed in config/buffalo-plugins.toml",
    29  	RunE: func(cmd *cobra.Command, args []string) error {
    30  		run := genny.WetRunner(context.Background())
    31  		if installOptions.dryRun {
    32  			run = genny.DryRunner(context.Background())
    33  			if installOptions.vendor {
    34  				run.FileFn = func(f genny.File) (genny.File, error) {
    35  					bb := &bytes.Buffer{}
    36  					if _, err := io.Copy(bb, f); err != nil {
    37  						return f, err
    38  					}
    39  					return genny.NewFile(f.Name(), bb), nil
    40  				}
    41  			}
    42  		}
    43  
    44  		app := meta.New(".")
    45  		plugs, err := plugdeps.List(app)
    46  		if err != nil && (errx.Unwrap(err) != plugdeps.ErrMissingConfig) {
    47  			return err
    48  		}
    49  
    50  		for _, a := range args {
    51  			a = strings.TrimSpace(a)
    52  			bin := path.Base(a)
    53  			plug := plugdeps.Plugin{
    54  				Binary: bin,
    55  				GoGet:  a,
    56  			}
    57  			if _, err := os.Stat(a); err == nil {
    58  				plug.Local = a
    59  				plug.GoGet = ""
    60  			}
    61  			plugs.Add(plug)
    62  		}
    63  		gg, err := install.New(&install.Options{
    64  			App:     app,
    65  			Plugins: plugs.List(),
    66  			Vendor:  installOptions.vendor,
    67  		})
    68  		if err != nil {
    69  			return err
    70  		}
    71  		run.WithGroup(gg)
    72  
    73  		if installOptions.verbose {
    74  			run.Logger = logger.New(logger.DebugLevel)
    75  		}
    76  
    77  		return run.Run()
    78  	},
    79  }
    80  
    81  func init() {
    82  	installCmd.Flags().BoolVarP(&installOptions.dryRun, "dry-run", "d", false, "dry run")
    83  	installCmd.Flags().BoolVarP(&installOptions.verbose, "verbose", "v", false, "turn on verbose logging")
    84  	installCmd.Flags().BoolVar(&installOptions.vendor, "vendor", false, "will install plugin binaries into ./plugins [WINDOWS not currently supported]")
    85  }