diff --git a/pkg/chart/loader/load.go b/pkg/chart/loader/load.go index 6ed3b4187..7cc8878a8 100644 --- a/pkg/chart/loader/load.go +++ b/pkg/chart/loader/load.go @@ -73,10 +73,11 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { c := new(chart.Chart) subcharts := make(map[string][]*BufferedFile) + // do not rely on assumed ordering of files in the chart and crash + // if Chart.yaml was not coming early enough to initialize metadata for _, f := range files { c.Raw = append(c.Raw, &chart.File{Name: f.Name, Data: f.Data}) - switch { - case f.Name == "Chart.yaml": + if f.Name == "Chart.yaml" { if c.Metadata == nil { c.Metadata = new(chart.Metadata) } @@ -89,6 +90,13 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { if c.Metadata.APIVersion == "" { c.Metadata.APIVersion = chart.APIVersionV1 } + } + } + for _, f := range files { + switch { + case f.Name == "Chart.yaml": + // already processed + continue case f.Name == "Chart.lock": c.Lock = new(chart.Lock) if err := yaml.Unmarshal(f.Data, &c.Lock); err != nil {