diff --git a/installer/bin/install-darwin-aarch64 b/installer/bin/install-darwin-aarch64 new file mode 100755 index 0000000..02e4802 Binary files /dev/null and b/installer/bin/install-darwin-aarch64 differ diff --git a/installer/bin/install-darwin-x86_64 b/installer/bin/install-darwin-x86_64 new file mode 100755 index 0000000..ee91b78 Binary files /dev/null and b/installer/bin/install-darwin-x86_64 differ diff --git a/installer/bin/install-linux b/installer/bin/install-linux new file mode 100755 index 0000000..e9b0eca Binary files /dev/null and b/installer/bin/install-linux differ diff --git a/installer/bin/install-win b/installer/bin/install-win new file mode 100755 index 0000000..e0b3b8a Binary files /dev/null and b/installer/bin/install-win differ diff --git a/installer/install.go b/installer/install.go new file mode 100644 index 0000000..ba6dd31 --- /dev/null +++ b/installer/install.go @@ -0,0 +1,128 @@ +package main + +import ( + "fmt" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" +) + +func main() { + var cmd *exec.Cmd + // Check which os being run + if runtime.GOOS == "windows" { + cmd = exec.Command("where", "cocommit") + } else { + cmd = exec.Command("which", "cocommit") + } + + _, err := cmd.Output() + if err != nil { + download() + } else { + update() + } + +} + +func cleanup() { + fmt.Println("Removing cocommit.tar.gz") + os.Remove("cocommit.tar.gz") +} + +func download() { + var resp *http.Response + var err error + var cmd *exec.Cmd + + // Download the latest release + switch runtime.GOOS { + case "darwin": + fmt.Println("Downloading mac version") + filename := "" + if runtime.GOARCH == "amd64" { + resp, err = http.Get("https://github.com/Slug-Boi/cocommit/releases/latest/download/cocommit-darwin-x86_64.tar.gz") + filename = "cocommit-darwin-x86_64.tar.gz" + } else { + resp, err = http.Get("https://github.com/Slug-Boi/cocommit/releases/latest/download/cocommit-darwin-aarch64.tar.gz") + filename = "cocommit-darwin-aarch64.tar.gz" + } + cmd = exec.Command("tar", "-xvf", filename) + case "windows": + fmt.Println("Downloading windows version") + resp, err = http.Get("https://github.com/Slug-Boi/cocommit/releases/latest/download/cocommit-win.tar.gz") + cmd = exec.Command("tar", "-xvf", "cocommit-win.tar.gz") + default: + fmt.Println("Downloading linux version") + resp, err = http.Get("https://github.com/Slug-Boi/cocommit/releases/latest/download/cocommit-linux.tar.gz") + cmd = exec.Command("tar", "-xvf", "cocommit-linux.tar.gz") + } + if err != nil { + fmt.Println("Error downloading file") + } + + // Create the file + file, err := os.Create("cocommit.tar.gz") + if err != nil { + fmt.Println("Error creating file") + } + + defer cleanup() + defer file.Close() + + defer resp.Body.Close() + _, err = io.Copy(file, resp.Body) + if err != nil { + fmt.Println("Error copying file") + } + + // Extract the file + err = cmd.Run() + if err != nil { + fmt.Println("Error extracting file") + } + + regExp := regexp.MustCompile("cocommit-.+") + + // Find the correct binary + var new_binary string + + err = filepath.Walk("./", func(path string, info os.FileInfo, err error) error { + if err == nil && regExp.MatchString(info.Name()) { + new_binary = info.Name() + return nil + } + return nil + }) + if err != nil { + panic(err) + } + + // Move the file to the correct path + var input string + fmt.Println("Cocommit default install location (/usr/local/bin/cocommit?):") + fmt.Scanln(&input) + if input == "" { + input = "/usr/local/bin/cocommit" + } + + if new_binary != "" { + err = os.Rename(new_binary, input) + } + fmt.Println("Cocommit cli tool installed successfully") + // Cleanup + cleanup() + +} + +func update() { + cmd := exec.Command("cocommit", "update") + err := cmd.Run() + if err != nil { + fmt.Println("Error updating") + } +} diff --git a/src/cmd/update.go b/src/cmd/update.go index cc18a4b..754e6d2 100644 --- a/src/cmd/update.go +++ b/src/cmd/update.go @@ -113,14 +113,11 @@ func updateScript() { func swapper(exec_path string) { - regExp, err := regexp.Compile("cocommit_go-darwin") - if err != nil { - log.Fatal(err) - } + regExp := regexp.MustCompile("cocommit-.+") var new_binary string - err = filepath.Walk("./", func(path string, info os.FileInfo, err error) error { + err := filepath.Walk("./", func(path string, info os.FileInfo, err error) error { if err == nil && regExp.MatchString(info.Name()) { new_binary = info.Name() return nil