github.com/verrazzano/verrazzano@v1.7.1/tools/vz/pkg/github/github.com.go (about)

     1  // Copyright (c) 2022, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package github
     5  
     6  import (
     7  	"encoding/json"
     8  	"io"
     9  	"net/http"
    10  
    11  	"github.com/verrazzano/verrazzano/tools/vz/pkg/constants"
    12  )
    13  
    14  // ReleaseAsset - subset of a GitHub release asset
    15  type ReleaseAsset struct {
    16  	TagName string `json:"tag_name"`
    17  }
    18  
    19  // ListReleases - return the list of Verrazzano releases
    20  func ListReleases(client *http.Client) ([]string, error) {
    21  	var releaseTags []string
    22  
    23  	// Create the list request
    24  	var buf io.ReadWriter
    25  	request, err := http.NewRequest(http.MethodGet, constants.VerrazzanoReleaseList, buf)
    26  	if err != nil {
    27  		return releaseTags, err
    28  	}
    29  	request.Header.Set("Accept", "application/json")
    30  
    31  	// Get the list of releases
    32  	resp, err := client.Do(request)
    33  	if err != nil {
    34  		return releaseTags, err
    35  	}
    36  
    37  	// Decode the body to the list of releases
    38  	defer resp.Body.Close()
    39  	var releases []ReleaseAsset
    40  	err = json.NewDecoder(resp.Body).Decode(&releases)
    41  	if err != nil {
    42  		return releaseTags, err
    43  	}
    44  
    45  	// Populate the return list
    46  	for _, release := range releases {
    47  		releaseTags = append(releaseTags, release.TagName)
    48  	}
    49  
    50  	return releaseTags, nil
    51  }