in tooling/mcerepkg/main.go [71:154]
func buildChart(outputDir, mceOlmBundle, sourceLink, scaffoldDir string) error {
ctx := context.Background()
// load OLM bundle manifests
img, err := crane.Load(mceOlmBundle)
if err != nil {
return fmt.Errorf("failed to load OLM bundle image: %v", err)
}
olmManifests, reg, err := olm.ExtractOLMBundleImage(ctx, img)
if err != nil {
return fmt.Errorf("failed to extract OLM bundle image: %v", err)
}
// sanity check manifests
err = customize.SanityCheck(olmManifests)
if err != nil {
return fmt.Errorf("failed sanity checks on manifests: %v", err)
}
// load scaffolding manifests
scaffoldManifests, err := customize.LoadScaffoldTemplates(scaffoldDir)
if err != nil {
return fmt.Errorf("failed to load scaffold templates: %v", err)
}
// customize manifests
customizedManifests, values, err := customize.CustomizeManifests(append(olmManifests, scaffoldManifests...))
if err != nil {
return fmt.Errorf("failed to customize manifests: %v", err)
}
// build chart
mceChart := &chart.Chart{
Metadata: &chart.Metadata{
APIVersion: "v2",
Name: "multicluster-engine",
Description: "A Helm chart for multicluster-engine",
Version: reg.CSV.Spec.Version.String(),
AppVersion: reg.CSV.Spec.Version.String(),
Type: "application",
Sources: []string{sourceLink},
Keywords: reg.CSV.Spec.Keywords,
},
}
var chartFiles []*chart.File
// add values file
valuesYaml, err := yaml.Marshal(values)
if err != nil {
return fmt.Errorf("failed to marshal values to YAML: %v", err)
}
chartFiles = append(chartFiles, &chart.File{
Name: "values.yaml",
Data: valuesYaml,
})
// add manifests and CRDs
for _, manifest := range customizedManifests {
yamlData, err := yaml.Marshal(manifest.Object)
if err != nil {
return fmt.Errorf("failed to marshal object to YAML: %v", err)
}
path := fmt.Sprintf("templates/%s.%s.yaml", manifest.GetName(), strings.ToLower(manifest.GetKind()))
if manifest.GetKind() == "CustomResourceDefinition" {
path = fmt.Sprintf("crds/%s.yaml", manifest.GetName())
}
chartFiles = append(chartFiles, &chart.File{
Name: path,
Data: yamlData,
})
}
mceChart.Templates = chartFiles
// store chart
err = chartutil.SaveDir(mceChart, outputDir)
if err != nil {
return fmt.Errorf("failed to save chart to directory: %v", err)
}
return nil
}