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  }