From 08d1942492ab58153d5084600146c2eba248699e Mon Sep 17 00:00:00 2001 From: Slug-Boi Date: Fri, 29 Nov 2024 23:53:15 +0100 Subject: [PATCH] feat: add version variable to cocommit which gets set through build command --- src/cmd/root.go | 10 ++++++++++ src/cmd/update.go | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/cmd/root.go b/src/cmd/root.go index a22f18a..f298950 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -11,6 +11,9 @@ import ( "github.com/spf13/cobra" ) +// Variables lives in here in case of possible future check of updates on running the CLI +var Coco_Version string + // rootCmd represents the base command when called without any subcommands // func RootCmd() *cobra.Command { var rootCmd = &cobra.Command{ @@ -33,6 +36,12 @@ var rootCmd = &cobra.Command{ pflag, _ := cmd.Flags().GetBool("print") tflag, _ := cmd.Flags().GetBool("test_print") aflag, _ := cmd.Flags().GetBool("authors") + vflag, _ := cmd.Flags().GetBool("version") + + if vflag { + fmt.Println("Cocommit version:", Coco_Version) + os.Exit(0) + } if aflag { tui.Entry() @@ -108,4 +117,5 @@ func init() { rootCmd.Flags().BoolP("test_print", "t", false, "Prints the commit message to the console without running the git commit command") rootCmd.Flags().BoolP("message", "m", false, "Does nothing but allows for -m to be used in the command") rootCmd.Flags().BoolP("authors", "a", false, "Runs the author list TUI") + rootCmd.Flags().BoolP("version", "v", false, "Prints the version of the cocommit cli tool") } diff --git a/src/cmd/update.go b/src/cmd/update.go index cc18a4b..0fd7906 100644 --- a/src/cmd/update.go +++ b/src/cmd/update.go @@ -3,6 +3,7 @@ package cmd import ( "archive/tar" "compress/gzip" + "encoding/json" "fmt" "io" "log" @@ -17,6 +18,11 @@ import ( "github.com/spf13/cobra" ) + +type github_release struct { + TagName string `json:"tag_name"` +} + // updateCmd represents the update command var updateCmd = &cobra.Command{ Use: "update", @@ -25,6 +31,33 @@ var updateCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { gflag, _ := cmd.Flags().GetBool("go-get") + // check version of the cli tool + Github, err := http.Get("https://api.github.com/repos/Slug-Boi/cocommit/releases/latest") + if err != nil { + fmt.Println("Error getting latest release version") + fmt.Println("Would you still like to update? (y/n)") + var input string + fmt.Scanln(&input) + if input == "y" || input == "Y" || input == "yes" { + fmt.Println("Running update script to update cocommit cli tool") + } else { + fmt.Println("Update cancelled") + return + } + } + defer Github.Body.Close() + + var release github_release + err = json.NewDecoder(Github.Body).Decode(&release) + if err != nil { + panic("Error decoding json") + } + + if release.TagName == Coco_Version { + fmt.Println("Cocommit cli tool is already up to date") + return + } + if gflag { fmt.Println("Running go get command to update cocommit cli tool") cmd := exec.Command("go", "get", "-u", "github.com/Slug-Boi/cocommit") @@ -34,7 +67,7 @@ var updateCmd = &cobra.Command{ } fmt.Println("Cocommit cli tool updated successfully") } else { - fmt.Println("Running update script to update cocommit cli tool") + fmt.Println("Running binary replace to update cocommit cli tool") updateScript() }