Skip to content

Commit 2428b40

Browse files
committed
refactor: update chart handling and dependency management in GitOps operations
1 parent 4b8d72f commit 2428b40

File tree

10 files changed

+226
-131
lines changed

10 files changed

+226
-131
lines changed

cmd/external-app/wire_gen.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/util/ChartTemplateService.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6162
type ChartCreateResponse struct {
6263
BuiltChartPath string
63-
valuesYaml string
64+
ChartMetaData *chart.Metadata
6465
}
6566

6667
type 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

8081
type 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

349352
func (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

pkg/appStore/bean/bean.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/devtron-labs/devtron/pkg/cluster/environment/bean"
3232
bean2 "github.com/devtron-labs/devtron/pkg/deployment/common/bean"
3333
"github.com/devtron-labs/devtron/util"
34+
"helm.sh/helm/v3/pkg/chart"
3435
"slices"
3536
"time"
3637
)
@@ -298,7 +299,6 @@ func (chart *InstallAppVersionDTO) GetFluxDeploymentConfig() *bean2.DeploymentCo
298299
}
299300
}
300301

301-
// /
302302
type RefChartProxyDir string
303303

304304
const (
@@ -337,12 +337,7 @@ type AppNames struct {
337337
}
338338

339339
type Dependencies struct {
340-
Dependencies []Dependency `json:"dependencies"`
341-
}
342-
type Dependency struct {
343-
Name string `json:"name"`
344-
Version string `json:"version"`
345-
Repository string `json:"repository"`
340+
Dependencies []*chart.Dependency `json:"dependencies"`
346341
}
347342

348343
const REFERENCE_TYPE_DEFAULT string = "DEFAULT"

pkg/appStore/installedApp/adapter/Adapter.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ func ParseChartGitPushRequest(installAppRequestDTO *appStoreBean.InstallAppVersi
4141
}
4242
}
4343

44-
func ParseChartCreateRequest(appName string, includePackageChart bool) *util.ChartCreateRequest {
44+
func ParseChartCreateRequest(appName string, dependencies []*chart.Dependency, includePackageChart bool) *util.ChartCreateRequest {
4545
chartPath := getRefProxyChartPath()
4646
return &util.ChartCreateRequest{
4747
ChartMetaData: &chart.Metadata{
48-
Name: appName,
49-
Version: "1.0.1", // TODO Asutoh: Why not the actual version?
48+
Name: appName,
49+
Version: "1.0.1", // TODO Asutoh: Why not the actual version?
50+
Dependencies: dependencies,
5051
},
5152
ChartPath: chartPath,
5253
IncludePackageChart: includePackageChart,

0 commit comments

Comments
 (0)