Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/external-app/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 22 additions & 19 deletions internal/util/ChartTemplateService.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"encoding/json"
"fmt"
dockerRegistryRepository "github.com/devtron-labs/devtron/internal/sql/repository/dockerRegistry"
chartRefBean "github.com/devtron-labs/devtron/pkg/deployment/manifest/deploymentTemplate/chartRef/bean"
dirCopy "github.com/otiai10/copy"
"go.opentelemetry.io/otel"
"go.uber.org/zap"
Expand Down Expand Up @@ -60,7 +61,7 @@ type ChartCreateRequest struct {

type ChartCreateResponse struct {
BuiltChartPath string
valuesYaml string
ChartMetaData *chart.Metadata
}

type ChartTemplateService interface {
Expand All @@ -74,7 +75,7 @@ type ChartTemplateService interface {
LoadChartInBytes(ChartPath string, deleteChart bool) ([]byte, error)
LoadChartFromDir(dir string) (*chart.Chart, error)
CreateZipFileForChart(chart *chart.Chart, outputChartPathDir string) ([]byte, error)
PackageChart(tempReferenceTemplateDir string, chartMetaData *chart.Metadata) (*string, string, error)
PackageChart(tempReferenceTemplateDir string, chartMetaData *chart.Metadata) (*chart.Metadata, *string, string, error)
}

type ChartTemplateServiceImpl struct {
Expand Down Expand Up @@ -105,7 +106,7 @@ func (impl ChartTemplateServiceImpl) GetChartVersion(location string) (string, e
return "", fmt.Errorf("%q is not a directory", location)
}

chartYaml := filepath.Join(location, "Chart.yaml")
chartYaml := filepath.Join(location, chartRefBean.CHART_YAML_FILE)
if _, err := os.Stat(chartYaml); os.IsNotExist(err) {
return "", fmt.Errorf("Chart.yaml file not present in the directory %q", location)
}
Expand Down Expand Up @@ -135,7 +136,7 @@ func (impl ChartTemplateServiceImpl) FetchValuesFromReferenceChart(chartMetaData
impl.logger.Errorw("error in copying chart for app", "app", chartMetaData.Name, "error", err)
return nil, err
}
archivePath, valuesYaml, err := impl.PackageChart(chartDir, chartMetaData)
_, archivePath, valuesYaml, err := impl.PackageChart(chartDir, chartMetaData)
if err != nil {
impl.logger.Errorw("error in creating archive", "err", err)
return nil, err
Expand Down Expand Up @@ -175,7 +176,7 @@ func (impl ChartTemplateServiceImpl) BuildChart(ctx context.Context, chartMetaDa
return "", err
}
_, span := otel.Tracer("orchestrator").Start(ctx, "impl.PackageChart")
_, _, err = impl.PackageChart(tempReferenceTemplateDir, chartMetaData)
_, _, _, err = impl.PackageChart(tempReferenceTemplateDir, chartMetaData)
span.End()
if err != nil {
impl.logger.Errorw("error in creating archive", "err", err)
Expand All @@ -190,25 +191,24 @@ func (impl ChartTemplateServiceImpl) BuildChartProxyForHelmApps(chartCreateReque
chartMetaData.APIVersion = "v2" // ensure always v2
dir := impl.GetDir()
chartDir := filepath.Join(CHART_WORKING_DIR_PATH, dir)
impl.logger.Debugw("chart dir ", "chart", chartMetaData.Name, "dir", chartDir)
chartCreateResponse.BuiltChartPath = chartDir
impl.logger.Debugw("temp chart dir", "chart", chartMetaData.Name, "dir", chartDir)
err := os.MkdirAll(chartDir, os.ModePerm) //hack for concurrency handling
if err != nil {
impl.logger.Errorw("err in creating dir", "dir", chartDir, "err", err)
return chartCreateResponse, err
}
err = dirCopy.Copy(chartCreateRequest.ChartPath, chartDir)

if err != nil {
impl.logger.Errorw("error in copying chart for app", "app", chartMetaData.Name, "error", err)
return chartCreateResponse, err
}
_, valuesYaml, err := impl.PackageChart(chartDir, chartMetaData)
chartMetaData, _, _, err = impl.PackageChart(chartDir, chartMetaData)
if err != nil {
impl.logger.Errorw("error in creating archive", "err", err)
return chartCreateResponse, err
}
chartCreateResponse.valuesYaml = valuesYaml
chartCreateResponse.BuiltChartPath = chartDir
chartCreateResponse.ChartMetaData = chartMetaData
return chartCreateResponse, nil
}

Expand Down Expand Up @@ -298,52 +298,55 @@ func (impl ChartTemplateServiceImpl) overrideChartMetaDataInDir(chartDir string,
if len(chartMetaData.Version) > 0 {
chart.Metadata.Version = chartMetaData.Version
}
if len(chartMetaData.Dependencies) > 0 {
chart.Metadata.Dependencies = append(chart.Metadata.Dependencies, chartMetaData.Dependencies...)
}
chartMetaDataBytes, err := yaml.Marshal(chart.Metadata)
if err != nil {
impl.logger.Errorw("error in marshaling chartMetadata", "err", err)
return chart, err
}
err = ioutil.WriteFile(filepath.Join(chartDir, "Chart.yaml"), chartMetaDataBytes, 0600)
err = os.WriteFile(filepath.Join(chartDir, chartRefBean.CHART_YAML_FILE), chartMetaDataBytes, 0600)
if err != nil {
impl.logger.Errorw("err in writing Chart.yaml", "err", err)
return chart, err
}
return chart, nil
}

func (impl ChartTemplateServiceImpl) PackageChart(tempReferenceTemplateDir string, chartMetaData *chart.Metadata) (*string, string, error) {
func (impl ChartTemplateServiceImpl) PackageChart(tempReferenceTemplateDir string, chartMetaData *chart.Metadata) (*chart.Metadata, *string, string, error) {
valid, err := chartutil.IsChartDir(tempReferenceTemplateDir)
if err != nil {
impl.logger.Errorw("error in validating base chart", "dir", tempReferenceTemplateDir, "err", err)
return nil, "", err
return nil, nil, "", err
}
if !valid {
impl.logger.Errorw("invalid chart at ", "dir", tempReferenceTemplateDir)
return nil, "", fmt.Errorf("invalid base chart")
return nil, nil, "", fmt.Errorf("invalid base chart")
}
chart, err := impl.overrideChartMetaDataInDir(tempReferenceTemplateDir, chartMetaData)
if err != nil {
impl.logger.Errorw("error in overriding chart metadata", "chartPath", tempReferenceTemplateDir, "err", err)
return nil, "", err
return nil, nil, "", err
}
archivePath, err := chartutil.Save(chart, tempReferenceTemplateDir)
if err != nil {
impl.logger.Errorw("error in saving", "err", err, "dir", tempReferenceTemplateDir)
return nil, "", err
return nil, nil, "", err
}
impl.logger.Debugw("chart archive path", "path", archivePath)
var valuesYaml string
byteValues, err := json.Marshal(chart.Values)
if err != nil {
impl.logger.Errorw("error in json Marshal values", "values", chart.Values, "err", err)
return nil, "", err
return nil, nil, "", err
}
if chart.Values != nil {
valuesYaml = string(byteValues)
} else {
impl.logger.Warnw("values.yaml not found in helm chart", "dir", tempReferenceTemplateDir)
}
return &archivePath, valuesYaml, nil
return chart.Metadata, &archivePath, valuesYaml, nil
}

func (impl ChartTemplateServiceImpl) CleanDir(dir string) {
Expand Down Expand Up @@ -376,7 +379,7 @@ func (impl ChartTemplateServiceImpl) GetByteArrayRefChart(chartMetaData *chart.M
impl.logger.Errorw("error in copying chart for app", "app", chartMetaData.Name, "error", err)
return nil, err
}
activePath, _, err := impl.PackageChart(tempReferenceTemplateDir, chartMetaData)
_, activePath, _, err := impl.PackageChart(tempReferenceTemplateDir, chartMetaData)
if err != nil {
impl.logger.Errorw("error in creating archive", "err", err)
return nil, err
Expand Down
9 changes: 2 additions & 7 deletions pkg/appStore/bean/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/devtron-labs/devtron/pkg/cluster/environment/bean"
bean2 "github.com/devtron-labs/devtron/pkg/deployment/common/bean"
"github.com/devtron-labs/devtron/util"
"helm.sh/helm/v3/pkg/chart"
"slices"
"time"
)
Expand Down Expand Up @@ -298,7 +299,6 @@ func (chart *InstallAppVersionDTO) GetFluxDeploymentConfig() *bean2.DeploymentCo
}
}

// /
type RefChartProxyDir string

const (
Expand Down Expand Up @@ -337,12 +337,7 @@ type AppNames struct {
}

type Dependencies struct {
Dependencies []Dependency `json:"dependencies"`
}
type Dependency struct {
Name string `json:"name"`
Version string `json:"version"`
Repository string `json:"repository"`
Dependencies []*chart.Dependency `json:"dependencies"`
}

const REFERENCE_TYPE_DEFAULT string = "DEFAULT"
Expand Down
7 changes: 4 additions & 3 deletions pkg/appStore/installedApp/adapter/Adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,13 @@ func ParseChartGitPushRequest(installAppRequestDTO *appStoreBean.InstallAppVersi
}
}

func ParseChartCreateRequest(appName string, includePackageChart bool) *util.ChartCreateRequest {
func ParseChartCreateRequest(appName string, dependencies []*chart.Dependency, includePackageChart bool) *util.ChartCreateRequest {
chartPath := getRefProxyChartPath()
return &util.ChartCreateRequest{
ChartMetaData: &chart.Metadata{
Name: appName,
Version: "1.0.1", // TODO Asutoh: Why not the actual version?
Name: appName,
Version: "1.0.1", // TODO Asutoh: Why not the actual version?
Dependencies: dependencies,
},
ChartPath: chartPath,
IncludePackageChart: includePackageChart,
Expand Down
Loading
Loading