Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions clients/helm/helm.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package helm

import (
"encoding/json"
"os/exec"

"github.com/pkg/errors"
Expand Down Expand Up @@ -114,3 +115,56 @@ func UpdateHelmRepo(name string) error {

return nil
}

// IsReleaseExists checks if a Helm release with the given releaseName exists in the specified namespace.
func IsReleaseExists(releaseName, namespace string) (bool, string, error) {

commandArgs := []string{
"list",
"--namespace",
namespace,
"--filter",
releaseName,
"--output",
"json",
}

msg, err := exec.Command(helmCmd, commandArgs...).CombinedOutput()
if err != nil {
return false, "", errors.Wrap(err, "IsReleaseExists: "+string(msg))
}

if string(msg) == "[]" || len(msg) == 0 {
return false, "", nil
}

return true, string(msg), nil
}

// GetAppVersion gets the app version of a given releaseName in the specified namespace
func GetAppVersion(releaseName, namespace string) (string, error) {
exists, msg, err := IsReleaseExists(releaseName, namespace)
if err != nil {
return "", err
}
if !exists {
return "", errors.New("release does not exist")
}

var releases []struct {
Name string `json:"name"`
AppVersion string `json:"app_version"`
}

if err := json.Unmarshal([]byte(msg), &releases); err != nil {
return "", errors.Wrap(err, "GetAppVersion: failed to unmarshal json")
}

for _, r := range releases {
if r.Name == releaseName {
return r.AppVersion, nil
}
}

return "", errors.New("release not found in list output")
}
Loading