github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/build/cmd.go (about) 1 package build 2 3 import ( 4 "github.com/gobuffalo/plugins" 5 "github.com/gobuffalo/plugins/plugcmd" 6 "github.com/gobuffalo/plugins/plugprint" 7 "github.com/spf13/pflag" 8 ) 9 10 var _ plugcmd.Aliaser = &Cmd{} 11 var _ plugcmd.SubCommander = &Cmd{} 12 var _ plugins.Needer = &Cmd{} 13 var _ plugins.Plugin = &Cmd{} 14 var _ plugins.Scoper = &Cmd{} 15 var _ plugprint.Describer = &Cmd{} 16 var _ plugprint.FlagPrinter = &Cmd{} 17 18 type Cmd struct { 19 // Mod is the -mod flag 20 mod string 21 // Static sets the following flags for the final `go build` command: 22 // -linkmode external 23 // -extldflags "-static" 24 static bool 25 // Environment the binary is meant for. defaults to "development" 26 environment string 27 // LDFlags to be passed to the final `go build` command 28 ldFlags string 29 // BuildFlags to be passed to the final `go build` command 30 buildFlags []string 31 tags string 32 bin string 33 verbose bool 34 35 help bool 36 pluginsFn plugins.Feeder 37 flags *pflag.FlagSet 38 } 39 40 func (cmd *Cmd) WithPlugins(f plugins.Feeder) { 41 cmd.pluginsFn = f 42 } 43 44 func (*Cmd) CmdAliases() []string { 45 return []string{"b", "install"} 46 } 47 48 func (b Cmd) PluginName() string { 49 return "build" 50 } 51 52 func (Cmd) Description() string { 53 return "Build the application binary, including bundling of webpack (packr & webpack)" 54 } 55 56 func (bc *Cmd) SubCommands() []plugins.Plugin { 57 var plugs []plugins.Plugin 58 for _, p := range bc.ScopedPlugins() { 59 if _, ok := p.(Builder); ok { 60 plugs = append(plugs, p) 61 } 62 } 63 return plugs 64 } 65 66 func (bc *Cmd) ScopedPlugins() []plugins.Plugin { 67 if bc.pluginsFn == nil { 68 return nil 69 } 70 71 var plugs []plugins.Plugin 72 for _, p := range bc.pluginsFn() { 73 switch p.(type) { 74 case BuildArger: 75 plugs = append(plugs, p) 76 case Builder: 77 plugs = append(plugs, p) 78 case BeforeBuilder: 79 plugs = append(plugs, p) 80 case AfterBuilder: 81 plugs = append(plugs, p) 82 case Versioner: 83 plugs = append(plugs, p) 84 case Packager: 85 plugs = append(plugs, p) 86 case PackFiler: 87 plugs = append(plugs, p) 88 case Flagger: 89 plugs = append(plugs, p) 90 case Pflagger: 91 plugs = append(plugs, p) 92 case Importer: 93 plugs = append(plugs, p) 94 case GoBuilder: 95 plugs = append(plugs, p) 96 case Stdouter: 97 plugs = append(plugs, p) 98 case Stdiner: 99 plugs = append(plugs, p) 100 case Stderrer: 101 plugs = append(plugs, p) 102 } 103 } 104 return plugs 105 }