summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-17 06:20:55 -0600
committerJeff Carr <[email protected]>2025-01-17 06:20:55 -0600
commit68ee252acd016e2880c4fa38c7555250c7965e44 (patch)
tree51000a8b5a239f422f02a88d891d9a90c7a2d0e8
parent9431656ae80de57233cd5e721132c93699b22615 (diff)
add bash supportv0.23.23
-rw-r--r--argv.go28
-rw-r--r--argvAutoshell.go97
-rw-r--r--main.go16
-rw-r--r--prepareRelease.go8
-rw-r--r--structs.go2
5 files changed, 138 insertions, 13 deletions
diff --git a/argv.go b/argv.go
index 7d57324..b89dcc3 100644
--- a/argv.go
+++ b/argv.go
@@ -7,16 +7,24 @@ package main
*/
type args struct {
- // Repo string `arg:"positional" help:"go import path"`
- // Increment bool `arg:"--increment" help:"auto increment"`
- // Release bool `arg:"--release" help:"do a release an exit"`
- DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
- Fix bool `arg:"--fix" help:"run fixGoMod() on startup"`
- Minor bool `arg:"--minor" help:"increment minor verion numbers"`
- Protobuf bool `arg:"--protobuf" help:"increment protobuf repos"`
- Reason string `arg:"--reason" help:"tag message"`
- DumpVersions bool `arg:"--dump-versions" help:"dump the versions file for go.wit.com"`
- Port int `arg:"--port" default:"9419" help:"do fun stuff with curl"`
+ Quick *QuickCmd `arg:"subcommand:quick" help:"only do repos with patches"`
+ DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
+ // Fix bool `arg:"--fix" help:"run fixGoMod() on startup"`
+ Minor bool `arg:"--minor" help:"increment minor verion numbers"`
+ Protobuf bool `arg:"--protobuf" help:"increment protobuf repos"`
+ Reason string `arg:"--reason" help:"tag message"`
+ // DumpVersions bool `arg:"--dump-versions" help:"dump the versions file for go.wit.com"`
+ Port int `arg:"--port" default:"9419" help:"do fun stuff with curl"`
+ Bash bool `arg:"--bash" help:"generate bash completion"`
+ BashAuto []string `arg:"--auto-complete" help:"does the actual autocompletion"`
+}
+
+type QuickCmd struct {
+ List *EmptyCmd `arg:"subcommand:list" help:"list available patches"`
+ Show *EmptyCmd `arg:"subcommand:show" help:"show a specific patch"`
+}
+
+type EmptyCmd struct {
}
func (a args) Description() string {
diff --git a/argvAutoshell.go b/argvAutoshell.go
new file mode 100644
index 0000000..fb46ff5
--- /dev/null
+++ b/argvAutoshell.go
@@ -0,0 +1,97 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "os/user"
+)
+
+/*
+ handles shell autocomplete
+*/
+
+// used for shell auto completion
+// var ARGNAME string = "forge" // todo: get this from $0 ?
+
+func (args) doBashAuto() {
+ argv.doBashHelp()
+ switch argv.BashAuto[0] {
+ case "checkout":
+ usr, _ := user.Current()
+ fmt.Println("user devel master " + usr.Username)
+ case "commit":
+ fmt.Println("--all")
+ case "config":
+ fmt.Println("add fix list delete")
+ case "list":
+ fmt.Println("--all --mine --favorites --private")
+ case "pull":
+ fmt.Println("--all --mine --favorites --private")
+ case "patch":
+ fmt.Println("--list --submit --show")
+ case "dirty":
+ fmt.Println("--show-files")
+ case "user":
+ fmt.Println("--force")
+ case "devel":
+ fmt.Println("--force")
+ case "master":
+ fmt.Println("--force")
+ default:
+ if argv.BashAuto[0] == ARGNAME {
+ // list the subcommands here
+ fmt.Println("--bash quick")
+ }
+ }
+ os.Exit(0)
+}
+
+// prints help to STDERR // TODO: move everything below this to go-args
+func (args) doBashHelp() {
+ if argv.BashAuto[1] != "''" {
+ // if this is not blank, then the user has typed something
+ return
+ }
+ if argv.BashAuto[0] != ARGNAME {
+ // if this is not the name of the command, the user already started doing something
+ return
+ }
+ if argv.BashAuto[0] == ARGNAME {
+ me.pp.WriteHelp(os.Stderr)
+ return
+ }
+ fmt.Fprintln(os.Stderr, "")
+ fmt.Fprintln(os.Stderr, "hello world")
+ fmt.Fprintln(os.Stderr, "")
+}
+
+// complete -F forge --bash forge
+func (args) doBash() {
+ fmt.Println("# add this in your bashrc:")
+ fmt.Println("")
+ fmt.Println("# todo: add this to go-arg as a 'hidden' go-arg option --bash")
+ fmt.Println("#")
+ fmt.Println("# todo: make this output work/parse with:")
+ fmt.Println("# complete -C " + ARGNAME + " --bash go")
+ fmt.Println("")
+ fmt.Println("_" + ARGNAME + "_complete()")
+ fmt.Println("{")
+ fmt.Println(" # sets local to this func vars")
+ fmt.Println(" local cur prev all")
+ fmt.Println(" cur=${COMP_WORDS[COMP_CWORD]}")
+ fmt.Println(" prev=${COMP_WORDS[COMP_CWORD-1]}")
+ fmt.Println(" all=${COMP_WORDS[@]}")
+ fmt.Println("")
+ fmt.Println(" # this is where we generate the go-arg output")
+ fmt.Println(" GOARGS=$(" + ARGNAME + " --auto-complete $prev \\'$cur\\' $all)")
+ fmt.Println("")
+ fmt.Println(" # this compares the command line input from the user")
+ fmt.Println(" # to whatever strings we output")
+ fmt.Println(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS")
+ fmt.Println(" return 0")
+ fmt.Println("}")
+ fmt.Println("complete -F _" + ARGNAME + "_complete " + ARGNAME)
+ fmt.Println("")
+ fmt.Println("# copy and paste the above into your bash shell should work")
+ os.Exit(0)
+}
diff --git a/main.go b/main.go
index 311a04d..1129afe 100644
--- a/main.go
+++ b/main.go
@@ -17,6 +17,7 @@ import (
)
var VERSION string
+var ARGNAME string = "guireleaser"
//go:embed resources/*
var resources embed.FS
@@ -26,6 +27,18 @@ var argv args
func main() {
me = new(autoType)
+ // parse the command line
+ me.pp = arg.MustParse(&argv)
+
+ if argv.Bash {
+ argv.doBash()
+ os.Exit(0)
+ }
+ if len(argv.BashAuto) != 0 {
+ argv.doBashAuto()
+ os.Exit(0)
+ }
+
// load the ~/.config/forge/ config
me.forge = forgepb.Init()
me.found = new(gitpb.Repos)
@@ -53,9 +66,6 @@ func main() {
// me.forge.ConfigPrintTable()
os.Setenv("REPO_WORK_PATH", me.forge.GetGoSrc())
- // parse the command line
- arg.MustParse(&argv)
-
// save the ENV var here
me.releaseReasonS = os.Getenv("GUIRELEASE_REASON")
diff --git a/prepareRelease.go b/prepareRelease.go
index e4ca82f..3b0a03c 100644
--- a/prepareRelease.go
+++ b/prepareRelease.go
@@ -108,6 +108,14 @@ func rePrepareRelease() {
continue
}
+ if argv.Quick != nil {
+ // if argv has 'quick' don't do anything
+ // that doesn't actually have a patch
+ if master == lastTag {
+ continue
+ }
+ }
+
if argv.Protobuf && check.GetRepoType() == "protobuf" {
// if --protobuf, this will force upgrade each one
forceReleaseVersion(check)
diff --git a/structs.go b/structs.go
index 3113926..2631171 100644
--- a/structs.go
+++ b/structs.go
@@ -2,6 +2,7 @@
package main
import (
+ "go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/protobuf/forgepb"
@@ -11,6 +12,7 @@ import (
var me *autoType
type autoType struct {
+ pp *arg.Parser // for parsing the command line args. Yay to alexf lint!
myGui *gui.Node
releaseReasonS string // = "gocui dropdown select"