MCPcopy
hub / github.com/helm/helm / LoadFiles

Function LoadFiles

internal/chart/v3/loader/load.go:72–179  ·  view source on GitHub ↗

LoadFiles loads from in-memory files.

(files []*archive.BufferedFile)

Source from the content-addressed store, hash-verified

70
71// LoadFiles loads from in-memory files.
72func LoadFiles(files []*archive.BufferedFile) (*chart.Chart, error) {
73 c := new(chart.Chart)
74 subcharts := make(map[string][]*archive.BufferedFile)
75 var subChartsKeys []string
76
77 // do not rely on assumed ordering of files in the chart and crash
78 // if Chart.yaml was not coming early enough to initialize metadata
79 for _, f := range files {
80 c.Raw = append(c.Raw, &common.File{Name: f.Name, ModTime: f.ModTime, Data: f.Data})
81 if f.Name == "Chart.yaml" {
82 if c.Metadata == nil {
83 c.Metadata = new(chart.Metadata)
84 }
85 if err := yaml.Unmarshal(f.Data, c.Metadata); err != nil {
86 return c, fmt.Errorf("cannot load Chart.yaml: %w", err)
87 }
88 // While the documentation says the APIVersion is required, in practice there
89 // are cases where that's not enforced. Since this package set is for v3 charts,
90 // when this function is used v3 is automatically added when not present.
91 if c.Metadata.APIVersion == "" {
92 c.Metadata.APIVersion = chart.APIVersionV3
93 }
94 c.ModTime = f.ModTime
95 }
96 }
97 for _, f := range files {
98 switch {
99 case f.Name == "Chart.yaml":
100 // already processed
101 continue
102 case f.Name == "Chart.lock":
103 c.Lock = new(chart.Lock)
104 if err := yaml.Unmarshal(f.Data, &c.Lock); err != nil {
105 return c, fmt.Errorf("cannot load Chart.lock: %w", err)
106 }
107 case f.Name == "values.yaml":
108 values, err := LoadValues(bytes.NewReader(f.Data))
109 if err != nil {
110 return c, fmt.Errorf("cannot load values.yaml: %w", err)
111 }
112 c.Values = values
113 case f.Name == "values.schema.json":
114 c.Schema = f.Data
115 c.SchemaModTime = f.ModTime
116
117 case strings.HasPrefix(f.Name, "templates/"):
118 c.Templates = append(c.Templates, &common.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
119 case strings.HasPrefix(f.Name, "charts/"):
120 if filepath.Ext(f.Name) == ".prov" {
121 c.Files = append(c.Files, &common.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
122 continue
123 }
124
125 fname := strings.TrimPrefix(f.Name, "charts/")
126 cname := strings.SplitN(fname, "/", 2)[0]
127 if slices.Index(subChartsKeys, cname) == -1 {
128 subChartsKeys = append(subChartsKeys, cname)
129 }

Callers 4

LoadArchiveFunction · 0.70
TestLoadFilesFunction · 0.70
TestLoadFilesOrderFunction · 0.70
LoadDirFunction · 0.70

Calls 6

IndexMethod · 0.80
LoadValuesFunction · 0.70
LoadArchiveFunction · 0.70
ValidateMethod · 0.65
NameMethod · 0.65
AddDependencyMethod · 0.45

Tested by 2

TestLoadFilesFunction · 0.56
TestLoadFilesOrderFunction · 0.56

Used in the wild real call sites across dependent graphs

searching dependent graphs…