package version import ( "io/ioutil" "strings" "time" "github.com/hashicorp/go-version" "github.com/kataras/golog" "github.com/kataras/iris/core/netutil" ) const ( versionURL = "https://raw.githubusercontent.com/kataras/iris/master/VERSION" ) func fetch() (*version.Version, string) { client := netutil.Client(time.Duration(30 * time.Second)) r, err := client.Get(versionURL) if err != nil { golog.Debugf("err: %v\n", err) return nil, "" } defer r.Body.Close() if r.StatusCode >= 400 { golog.Debugf("Internet connection is missing, updater is unable to fetch the latest Iris version\n", err) return nil, "" } b, err := ioutil.ReadAll(r.Body) if len(b) == 0 || err != nil { golog.Debugf("err: %v\n", err) return nil, "" } var ( fetchedVersion = string(b) changelogURL string ) // Example output: // Version(8.5.5) // 8.5.5:https://github.com/kataras/iris/blob/master/HISTORY.md#tu-02-november-2017--v855 if idx := strings.IndexByte(fetchedVersion, ':'); idx > 0 { changelogURL = fetchedVersion[idx+1:] fetchedVersion = fetchedVersion[0:idx] } latestVersion, err := version.NewVersion(fetchedVersion) if err != nil { golog.Debugf("while fetching and parsing latest version from github: %v\n", err) return nil, "" } return latestVersion, changelogURL }