func Generate()

in internal/cmd/generate.go [57:105]


func Generate(startPath string, environments []string, validate bool) (components []core.Component, err error) {
	// Iterate through component tree and generate

	rootInit := func(startPath string, environments []string, c core.Component) (component core.Component, err error) {
		return c.UpdateComponentPath(startPath, environments)
	}

	results := core.WalkComponentTree(startPath, environments, func(path string, component *core.Component) (err error) {

		var generator core.Generator
		switch component.ComponentType {
		case "helm":
			generator = &generators.HelmGenerator{}
		case "static":
			generator = &generators.StaticGenerator{}
		}

		return component.Generate(generator)
	}, rootInit)

	components, err = core.SynchronizeWalkResult(results)

	if err != nil {
		return nil, err
	}

	environmentName := strings.Join(environments, "-")
	if len(environmentName) == 0 {
		environmentName = "common"
	}

	generationPath := path.Join(startPath, "generated", environmentName)

	if err = writeGeneratedManifests(generationPath, components); err != nil {
		return nil, err
	}

	if validate {
		if err = validateGeneratedManifests(generationPath); err != nil {
			return nil, err
		}
	}

	if err == nil {
		logger.Info(emoji.Sprintf(":raised_hands: Finished generate"))
	}

	return components, err
}