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 }