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  }