@@ -22,6 +22,7 @@ import (
2222 "encoding/json"
2323 "fmt"
2424 dockerRegistryRepository "github.com/devtron-labs/devtron/internal/sql/repository/dockerRegistry"
25+ chartRefBean "github.com/devtron-labs/devtron/pkg/deployment/manifest/deploymentTemplate/chartRef/bean"
2526 dirCopy "github.com/otiai10/copy"
2627 "go.opentelemetry.io/otel"
2728 "go.uber.org/zap"
@@ -60,7 +61,7 @@ type ChartCreateRequest struct {
6061
6162type ChartCreateResponse struct {
6263 BuiltChartPath string
63- valuesYaml string
64+ ChartMetaData * chart. Metadata
6465}
6566
6667type ChartTemplateService interface {
@@ -74,7 +75,7 @@ type ChartTemplateService interface {
7475 LoadChartInBytes (ChartPath string , deleteChart bool ) ([]byte , error )
7576 LoadChartFromDir (dir string ) (* chart.Chart , error )
7677 CreateZipFileForChart (chart * chart.Chart , outputChartPathDir string ) ([]byte , error )
77- PackageChart (tempReferenceTemplateDir string , chartMetaData * chart.Metadata ) (* string , string , error )
78+ PackageChart (tempReferenceTemplateDir string , chartMetaData * chart.Metadata ) (* chart. Metadata , * string , string , error )
7879}
7980
8081type ChartTemplateServiceImpl struct {
@@ -105,7 +106,7 @@ func (impl ChartTemplateServiceImpl) GetChartVersion(location string) (string, e
105106 return "" , fmt .Errorf ("%q is not a directory" , location )
106107 }
107108
108- chartYaml := filepath .Join (location , "Chart.yaml" )
109+ chartYaml := filepath .Join (location , chartRefBean . CHART_YAML_FILE )
109110 if _ , err := os .Stat (chartYaml ); os .IsNotExist (err ) {
110111 return "" , fmt .Errorf ("Chart.yaml file not present in the directory %q" , location )
111112 }
@@ -135,7 +136,7 @@ func (impl ChartTemplateServiceImpl) FetchValuesFromReferenceChart(chartMetaData
135136 impl .logger .Errorw ("error in copying chart for app" , "app" , chartMetaData .Name , "error" , err )
136137 return nil , err
137138 }
138- archivePath , valuesYaml , err := impl .PackageChart (chartDir , chartMetaData )
139+ _ , archivePath , valuesYaml , err := impl .PackageChart (chartDir , chartMetaData )
139140 if err != nil {
140141 impl .logger .Errorw ("error in creating archive" , "err" , err )
141142 return nil , err
@@ -175,7 +176,7 @@ func (impl ChartTemplateServiceImpl) BuildChart(ctx context.Context, chartMetaDa
175176 return "" , err
176177 }
177178 _ , span := otel .Tracer ("orchestrator" ).Start (ctx , "impl.PackageChart" )
178- _ , _ , err = impl .PackageChart (tempReferenceTemplateDir , chartMetaData )
179+ _ , _ , _ , err = impl .PackageChart (tempReferenceTemplateDir , chartMetaData )
179180 span .End ()
180181 if err != nil {
181182 impl .logger .Errorw ("error in creating archive" , "err" , err )
@@ -190,25 +191,24 @@ func (impl ChartTemplateServiceImpl) BuildChartProxyForHelmApps(chartCreateReque
190191 chartMetaData .APIVersion = "v2" // ensure always v2
191192 dir := impl .GetDir ()
192193 chartDir := filepath .Join (CHART_WORKING_DIR_PATH , dir )
193- impl .logger .Debugw ("chart dir " , "chart" , chartMetaData .Name , "dir" , chartDir )
194+ chartCreateResponse .BuiltChartPath = chartDir
195+ impl .logger .Debugw ("temp chart dir" , "chart" , chartMetaData .Name , "dir" , chartDir )
194196 err := os .MkdirAll (chartDir , os .ModePerm ) //hack for concurrency handling
195197 if err != nil {
196198 impl .logger .Errorw ("err in creating dir" , "dir" , chartDir , "err" , err )
197199 return chartCreateResponse , err
198200 }
199201 err = dirCopy .Copy (chartCreateRequest .ChartPath , chartDir )
200-
201202 if err != nil {
202203 impl .logger .Errorw ("error in copying chart for app" , "app" , chartMetaData .Name , "error" , err )
203204 return chartCreateResponse , err
204205 }
205- _ , valuesYaml , err : = impl .PackageChart (chartDir , chartMetaData )
206+ chartMetaData , _ , _ , err = impl .PackageChart (chartDir , chartMetaData )
206207 if err != nil {
207208 impl .logger .Errorw ("error in creating archive" , "err" , err )
208209 return chartCreateResponse , err
209210 }
210- chartCreateResponse .valuesYaml = valuesYaml
211- chartCreateResponse .BuiltChartPath = chartDir
211+ chartCreateResponse .ChartMetaData = chartMetaData
212212 return chartCreateResponse , nil
213213}
214214
@@ -298,52 +298,55 @@ func (impl ChartTemplateServiceImpl) overrideChartMetaDataInDir(chartDir string,
298298 if len (chartMetaData .Version ) > 0 {
299299 chart .Metadata .Version = chartMetaData .Version
300300 }
301+ if len (chartMetaData .Dependencies ) > 0 {
302+ chart .Metadata .Dependencies = append (chart .Metadata .Dependencies , chartMetaData .Dependencies ... )
303+ }
301304 chartMetaDataBytes , err := yaml .Marshal (chart .Metadata )
302305 if err != nil {
303306 impl .logger .Errorw ("error in marshaling chartMetadata" , "err" , err )
304307 return chart , err
305308 }
306- err = ioutil .WriteFile (filepath .Join (chartDir , "Chart.yaml" ), chartMetaDataBytes , 0600 )
309+ err = os .WriteFile (filepath .Join (chartDir , chartRefBean . CHART_YAML_FILE ), chartMetaDataBytes , 0600 )
307310 if err != nil {
308311 impl .logger .Errorw ("err in writing Chart.yaml" , "err" , err )
309312 return chart , err
310313 }
311314 return chart , nil
312315}
313316
314- func (impl ChartTemplateServiceImpl ) PackageChart (tempReferenceTemplateDir string , chartMetaData * chart.Metadata ) (* string , string , error ) {
317+ func (impl ChartTemplateServiceImpl ) PackageChart (tempReferenceTemplateDir string , chartMetaData * chart.Metadata ) (* chart. Metadata , * string , string , error ) {
315318 valid , err := chartutil .IsChartDir (tempReferenceTemplateDir )
316319 if err != nil {
317320 impl .logger .Errorw ("error in validating base chart" , "dir" , tempReferenceTemplateDir , "err" , err )
318- return nil , "" , err
321+ return nil , nil , "" , err
319322 }
320323 if ! valid {
321324 impl .logger .Errorw ("invalid chart at " , "dir" , tempReferenceTemplateDir )
322- return nil , "" , fmt .Errorf ("invalid base chart" )
325+ return nil , nil , "" , fmt .Errorf ("invalid base chart" )
323326 }
324327 chart , err := impl .overrideChartMetaDataInDir (tempReferenceTemplateDir , chartMetaData )
325328 if err != nil {
326329 impl .logger .Errorw ("error in overriding chart metadata" , "chartPath" , tempReferenceTemplateDir , "err" , err )
327- return nil , "" , err
330+ return nil , nil , "" , err
328331 }
329332 archivePath , err := chartutil .Save (chart , tempReferenceTemplateDir )
330333 if err != nil {
331334 impl .logger .Errorw ("error in saving" , "err" , err , "dir" , tempReferenceTemplateDir )
332- return nil , "" , err
335+ return nil , nil , "" , err
333336 }
334337 impl .logger .Debugw ("chart archive path" , "path" , archivePath )
335338 var valuesYaml string
336339 byteValues , err := json .Marshal (chart .Values )
337340 if err != nil {
338341 impl .logger .Errorw ("error in json Marshal values" , "values" , chart .Values , "err" , err )
339- return nil , "" , err
342+ return nil , nil , "" , err
340343 }
341344 if chart .Values != nil {
342345 valuesYaml = string (byteValues )
343346 } else {
344347 impl .logger .Warnw ("values.yaml not found in helm chart" , "dir" , tempReferenceTemplateDir )
345348 }
346- return & archivePath , valuesYaml , nil
349+ return chart . Metadata , & archivePath , valuesYaml , nil
347350}
348351
349352func (impl ChartTemplateServiceImpl ) CleanDir (dir string ) {
@@ -376,7 +379,7 @@ func (impl ChartTemplateServiceImpl) GetByteArrayRefChart(chartMetaData *chart.M
376379 impl .logger .Errorw ("error in copying chart for app" , "app" , chartMetaData .Name , "error" , err )
377380 return nil , err
378381 }
379- activePath , _ , err := impl .PackageChart (tempReferenceTemplateDir , chartMetaData )
382+ _ , activePath , _ , err := impl .PackageChart (tempReferenceTemplateDir , chartMetaData )
380383 if err != nil {
381384 impl .logger .Errorw ("error in creating archive" , "err" , err )
382385 return nil , err
0 commit comments