github.com/codefresh-io/kcfi@v0.0.0-20230301195427-c1578715cc46/pkg/charts/loader.go (about)

     1  package charts
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"github.com/pkg/errors"
     7  	"helm.sh/helm/v3/pkg/chart"
     8  	"helm.sh/helm/v3/pkg/chart/loader"
     9  	"regexp"
    10  	"strings"
    11  
    12  	eCharts "github.com/codefresh-io/kcfi/pkg/embeded/charts"
    13  )
    14  
    15  func Load(chartName string) (*chart.Chart, error) {
    16  
    17  	var chartBufferedFile []*loader.BufferedFile
    18  	isArchivedChart, _ := regexp.MatchString(`^.*\.tgz$`, chartName)
    19  	if isArchivedChart {
    20  		chartData, err := eCharts.Asset(chartName)
    21  		if err != nil {
    22  			return nil, errors.Wrapf(err, "Cannot find chart data for %s", chartName)
    23  		}
    24  
    25  		chartBufferedFile, err = loader.LoadArchiveFiles(bytes.NewReader(chartData))
    26  		if err != nil {
    27  			return nil, errors.Wrapf(err, "Cannot load archived file for %s", chartName)
    28  		}
    29  	} else {
    30  		for _, name := range eCharts.AssetNames() {
    31  			fileNamePrefix := fmt.Sprintf("%s/", chartName)
    32  			fileNameReplaceRe, err := regexp.Compile(`^(` + fileNamePrefix + `)(.*$)`)
    33  			if err != nil {
    34  				return nil, errors.Wrapf(err, "Wrong chart name %s", chartName)
    35  			}
    36  			var chartFileName string
    37  			var chartFileData []byte
    38  			if strings.HasPrefix(name, fileNamePrefix) {
    39  				chartFileName = fileNameReplaceRe.ReplaceAllString(name, "$2")
    40  				chartFileData, err = eCharts.Asset(name)
    41  				if err != nil {
    42  					return nil, errors.Wrapf(err, "Failed to load chart file %s", name)
    43  				}
    44  				chartBufferedFile = append(chartBufferedFile, &loader.BufferedFile{
    45  					Name: chartFileName,
    46  					Data: chartFileData,
    47  				})
    48  			}
    49  		}
    50  	}
    51  	return loader.LoadFiles(chartBufferedFile)
    52  }