github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "io/ioutil" 8 "os" 9 "path" 10 "strings" 11 12 "github.com/cloudfoundry-incubator/stembuild/assets" 13 . "github.com/cloudfoundry-incubator/stembuild/commandparser" 14 vmconstruct_factory "github.com/cloudfoundry-incubator/stembuild/construct/factory" 15 vcenter_client_factory "github.com/cloudfoundry-incubator/stembuild/iaas_cli/iaas_clients/factory" 16 packager_factory "github.com/cloudfoundry-incubator/stembuild/package_stemcell/factory" 17 "github.com/cloudfoundry-incubator/stembuild/version" 18 . "github.com/google/subcommands" 19 ) 20 21 func main() { 22 envs := os.Environ() 23 for _, env := range envs { 24 env_name := strings.Split(env, "=")[0] 25 if strings.HasPrefix(env_name, "GOVC_") || strings.HasPrefix(env_name, "GOVMOMI_") { 26 fmt.Fprintf(os.Stderr, "Warning: The following environment variable is set and might override flags provided to stembuild: %s\n", env_name) 27 } 28 } 29 data, err := assets.Asset("StemcellAutomation.zip") 30 if err != nil { 31 _, _ = fmt.Fprintln(os.Stderr, "StemcellAutomation not found") 32 os.Exit(1) 33 } 34 s := "./StemcellAutomation.zip" 35 err = ioutil.WriteFile(s, data, 0644) 36 if err != nil { 37 _, _ = fmt.Fprintln(os.Stderr, "Unable to write StemcellAutomation.zip") 38 os.Exit(1) 39 } 40 41 var gf GlobalFlags 42 packageCmd := NewPackageCommand(version.NewVersionGetter(), &packager_factory.PackagerFactory{}, &PackageMessenger{os.Stderr}) 43 packageCmd.GlobalFlags = &gf 44 constructCmd := NewConstructCmd(context.Background(), &vmconstruct_factory.VMConstructFactory{}, &vcenter_client_factory.ManagerFactory{}, &ConstructValidator{}, &ConstructCmdMessenger{OutputChannel: os.Stderr}) 45 constructCmd.GlobalFlags = &gf 46 47 var commands = make([]Command, 0) 48 49 fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError) 50 fs.BoolVar(&gf.Debug, "debug", false, "Print lots of debugging information") 51 fs.BoolVar(&gf.Color, "color", false, "Colorize debug output") 52 fs.BoolVar(&gf.ShowVersion, "version", false, "Show Stembuild version") 53 fs.BoolVar(&gf.ShowVersion, "v", false, "Stembuild version (shorthand)") 54 55 commander := NewCommander(fs, path.Base(os.Args[0])) 56 57 sh := NewStembuildHelp(commander, fs, &commands) 58 commander.Register(sh, "") 59 commands = append(commands, sh) 60 61 commander.Register(packageCmd, "") 62 commander.Register(constructCmd, "") 63 64 commands = append(commands, packageCmd) 65 commands = append(commands, constructCmd) 66 67 // Override the default usage text of Google's Subcommand with our own 68 fs.Usage = func() { sh.Explain(commander.Error) } 69 70 _ = fs.Parse(os.Args[1:]) 71 if gf.ShowVersion { 72 _, _ = fmt.Fprintf(os.Stdout, "%s version %s, Windows Stemcell Building Tool\n\n", path.Base(os.Args[0]), version.Version) 73 _ = os.Remove(s) 74 os.Exit(0) 75 } 76 77 ctx := context.Background() 78 i := int(commander.Execute(ctx)) 79 _ = os.Remove(s) 80 os.Exit(i) 81 }