package main import ( "fmt" "os" ) /* this parses the command line arguements this enables command line options from other packages like 'gui' and 'log' */ type args struct { Commit *EmptyCmd `arg:"subcommand:commit" help:"'git commit' but errors out if on wrong branch"` Show *EmptyCmd `arg:"subcommand:show" help:"show what would be done"` Gui *EmptyCmd `arg:"subcommand:gui" help:"open the gui"` Ldflags []string `arg:"--ldflags" help:"flags to pass to go build"` Forge string `arg:"--forge" help:"use a git repo from forge"` OutDir string `arg:"--dir" help:"write .deb file into this directory"` Release bool `arg:"--release" help:"build a release from the last git tag"` KeepFiles bool `arg:"--keep-files" help:"keep the build files/"` Force bool `arg:"--force" default:"false" help:"force overwrite an existing .deb file"` Verbose bool `arg:"--verbose" help:"show more things"` } func (args) Version() string { return "go-clone " + VERSION + " Built on " + DATE } type EmptyCmd struct { } func (a args) Description() string { return ` Example usage: guireleaser go.wit.com/apps/go-clone --increment --release --dry-run --reason "blerg" This will pull down the go sources and the repositories in the go.sum file using git clone` } /* handles shell autocomplete */ func (a args) DoAutoComplete(argv []string) { switch argv[0] { case "arch": fmt.Println("riscv64") case "build": fmt.Println("user devel release") default: if argv[0] == ARGNAME { // list the subcommands here fmt.Println("arch build gui show") } } os.Exit(0) }