diff --git a/cmd/ipfs/ipfs.go b/cmd/ipfs/ipfs.go index a79a49d0cd7206072b88908ea56795bc2536c8fd..2d3f79a3c0aa238f0ab17e3a904b0fb337672892 100644 --- a/cmd/ipfs/ipfs.go +++ b/cmd/ipfs/ipfs.go @@ -7,6 +7,7 @@ import ( "runtime/pprof" flag "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag" + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/inconshreveable/go-update/check" commander "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander" ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" @@ -126,18 +127,17 @@ func localNode(confdir string, online bool) (*core.IpfsNode, error) { } if cfg.Version.ShouldCheckForUpdate() { - obsolete := updates.CheckForUpdates() - if obsolete != nil { - if cfg.Version.Check == config.CheckError { - return nil, obsolete - } + _, err := updates.CheckForUpdate() + if err != nil { + if err != check.NoUpdateAvailable { + log.Error("Error while checking for update: %v\n", err) + return nil, err - // when "warn" version.check mode we just show warning message - log.Warning(fmt.Sprintf("%v", obsolete)) - } else { - // update most recent check timestamp in config - config.RecordUpdateCheck(cfg, filename) + } + log.Notice("No update available") } + + config.RecordUpdateCheck(cfg, filename) } return core.NewIpfsNode(cfg, online) diff --git a/updates/updates.go b/updates/updates.go index f2f4f93e8e922b4097b19279a2fcf09e2b3d95b6..4b6480ed640471eab46e95565ba960df743df9d9 100644 --- a/updates/updates.go +++ b/updates/updates.go @@ -1,32 +1,18 @@ package updates import ( - "encoding/json" - "fmt" - "net/http" "os" "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver" + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/inconshreveable/go-update" + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/inconshreveable/go-update/check" u "github.com/jbenet/go-ipfs/util" ) const ( - Version = "0.1.0" // actual current application's version literal - EndpointURLLatestReleases = "https://api.github.com/repos/jbenet/go-ipfs/tags" - VersionErrorShort = `Warning: You are running version %s of go-ipfs. The latest version is %s.` - VersionErrorLong = ` - Warning: You are running version %s of go-ipfs. The latest version is %s. - Since this is alpha software, it is strongly recommended you update. - - You can update go-ipfs by running - - ipfs version update - - You can silence this message by running - - ipfs config update.check ignore - - ` + Version = "0.1.0" // actual current application's version literal + UpdateEndpointURL = "https://api.equinox.io/1/Updates" + UpdateAppID = "ap_ywkPmAR40q4EfdikN9Jh2hgIHi" ) var log = u.Logger("updates") @@ -45,42 +31,13 @@ func init() { func parseVersion() (*semver.Version, error) { return semver.NewVersion(Version) } -func CheckForUpdates() error { - resp, err := http.Get(EndpointURLLatestReleases) - if err != nil { - // can't reach the endpoint, coud be firewall, or no internet connection or something else - log.Error("update check: error connecting to API endpoint for newer versions: %v", err) - return nil - } - var body interface{} - _ = json.NewDecoder(resp.Body).Decode(&body) - releases, ok := body.([]interface{}) - if !ok { - // the response body does not seem to meet specified Github API format - // https://developer.github.com/v3/repos/#list-tags - log.Error("update check: API endpoint for newer versions does not seem to be in Github API specified format") - return nil - } - for _, r := range releases { - release, ok := r.(map[string]interface{}) - if !ok { - continue - } - tagName, ok := release["name"].(string) - if !ok { - continue - } - if len(tagName) > 0 && tagName[0] == 'v' { - // both 'v0.1.0' and '0.1.0' semver tagname conventions can be encountered - tagName = tagName[1:] - } - releaseVersion, err := semver.NewVersion(tagName) - if err != nil { - continue - } - if currentVersion.LessThan(*releaseVersion) { - return fmt.Errorf(VersionErrorLong, Version, tagName) - } + +func CheckForUpdate() (*check.Result, error) { + param := check.Params{ + AppVersion: Version, + AppId: UpdateAppID, + Channel: "stable", } - return nil + + return param.CheckForUpdate(UpdateEndpointURL, update.New()) }