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  }