diff --git a/selfupdate/update.go b/selfupdate/update.go index d418e52..c316d79 100644 --- a/selfupdate/update.go +++ b/selfupdate/update.go @@ -7,6 +7,8 @@ import ( "net/http" "os" "path/filepath" + "runtime" + "strings" ) // UpdateTo download an executable from assetURL and replace the current binary with the downloaded one. cmdPath is a file path to command executable. @@ -36,6 +38,10 @@ func UpdateTo(assetURL, cmdPath string) error { // UpdateCommand updates a given command binary to the latest version. // 'slug' represents 'owner/name' repository on GitHub and 'current' means the current version. func UpdateCommand(cmdPath string, current semver.Version, slug string) (*Release, error) { + if runtime.GOOS == "windows" && !strings.HasSuffix(cmdPath, ".exe") { + cmdPath = cmdPath + ".exe" + } + rel, ok, err := DetectLatest(slug) if err != nil { return nil, err diff --git a/selfupdate/update_test.go b/selfupdate/update_test.go index bba6036..f77fbde 100644 --- a/selfupdate/update_test.go +++ b/selfupdate/update_test.go @@ -5,6 +5,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strings" "testing" ) @@ -16,7 +17,11 @@ func setupTestBinary() { } func teardownTestBinary() { - if err := os.Remove("github-release-test"); err != nil { + bin := "github-release-test" + if runtime.GOOS == "windows" { + bin = "github-release-test.exe" + } + if err := os.Remove(bin); err != nil { panic(err) } }