in pkg/helmshim/helm.go [53:128]
func RenderChart(opts ...RenderOption) error {
a := action.NewInstall(&action.Configuration{})
a.ReleaseName = "eno-helm-shim"
a.Namespace = "default"
a.DryRun = true
a.Replace = true
a.ClientOnly = true
a.IncludeCRDs = true
o := &options{
Action: a,
ValuesFunc: inputsToValues,
ChartLoader: defaultChartLoader,
}
for _, opt := range opts {
opt.apply(o)
}
if o.Reader == nil {
var err error
o.Reader, err = function.NewDefaultInputReader()
if err != nil {
return err
}
}
var usingDefaultWriter bool
if o.Writer == nil {
usingDefaultWriter = true
o.Writer = function.NewDefaultOutputWriter()
}
c, err := o.ChartLoader()
if err != nil {
return errors.Join(ErrChartNotFound, err)
}
vals, err := o.ValuesFunc(o.Reader)
if err != nil {
return errors.Join(ErrConstructingValues, err)
}
rel, err := a.Run(c, vals)
if err != nil {
return errors.Join(ErrRenderAction, err)
}
b := bytes.NewBufferString(rel.Manifest)
// append manifest from hook
for _, hook := range rel.Hooks {
fmt.Fprintf(b, "---\n# Source: %s\n%s\n", hook.Name, hook.Manifest)
}
d := yaml.NewYAMLToJSONDecoder(b)
for {
m := &unstructured.Unstructured{}
err = d.Decode(m)
if err == io.EOF {
break
} else if err != nil {
return errors.Join(ErrCannotParseChart, err)
}
if isNullOrEmptyObject(m) {
continue
}
if err := o.Writer.Add(m); err != nil {
return fmt.Errorf("adding object %s to output writer: %w", m, err)
}
}
if usingDefaultWriter {
return o.Writer.Write()
}
return nil
}