github.com/vchain-us/vcn@v0.9.11-0.20210921212052-a2484d23c0b3/pkg/api/version.go (about) 1 /* 2 * Copyright (c) 2018-2020 vChain, Inc. All Rights Reserved. 3 * This software is released under GPL3. 4 * The full license information can be found under: 5 * https://www.gnu.org/licenses/gpl-3.0.en.html 6 * 7 */ 8 9 package api 10 11 import ( 12 "fmt" 13 14 "github.com/sirupsen/logrus" 15 "github.com/vchain-us/vcn/pkg/meta" 16 ) 17 18 type version struct { 19 Release string `json:"release"` 20 Host string `json:"host"` 21 Message string `json:"message"` 22 Latest bool `json:"latest"` 23 } 24 25 func getLatestVersion() (*version, error) { 26 response := new(struct { 27 Content []version `json:"content"` 28 }) 29 restError := new(Error) 30 31 url := meta.APIEndpoint("version/vcn") + "?sort=latest%2Cdesc" 32 r, err := newSling(""). 33 Get(url). 34 Receive(&response, restError) 35 if err != nil { 36 return nil, err 37 } 38 39 if r.StatusCode == 200 && len(response.Content) > 0 { 40 return &response.Content[0], nil 41 } 42 43 logger().WithFields(logrus.Fields{ 44 "response": response, 45 "err": err, 46 "restError": restError, 47 }).Trace("getLatestVersion") 48 return nil, fmt.Errorf( 49 "request failed: %s (%d)", 50 restError.Message, 51 restError.Status, 52 ) 53 } 54 55 // LatestCLIVersion returns the version string and message of the latest `vcn` CLI release. 56 func LatestCLIVersion() (string, string, error) { 57 v, err := getLatestVersion() 58 if err != nil || v == nil { 59 return "", "", err 60 } 61 return v.Release, v.Message, nil 62 }