func Install()

in internal/cmd/install.go [17:75]


func Install(path string) (err error) {
	// Make sure host system contains all utils needed by Fabrikate
	requiredSystemTools := []string{"git", "helm", "sh", "curl"}
	for _, tool := range requiredSystemTools {
		path, err := exec.LookPath(tool)
		if err != nil {
			return err
		}
		logger.Info(emoji.Sprintf(":mag: Using %s: %s", tool, path))
	}

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

	results := core.WalkComponentTree(path, []string{}, func(path string, component *core.Component) (err error) {
		logger.Info(emoji.Sprintf(":point_right: Starting install for component: %s", component.Name))

		var generator core.Generator

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

		// Load access tokens and add them to the global token list. Do not overwrite if already present
		if accessTokens, err := component.GetAccessTokens(); err != nil {
			return err
		} else if len(accessTokens) > 0 {
			for repo, token := range accessTokens {
				if _, exists := git.AccessTokens.Get(repo); !exists {
					git.AccessTokens.Set(repo, token)
				}
			}
		}

		if err := component.Install(path, generator); err != nil {
			return err
		}

		logger.Info(emoji.Sprintf(":point_left: Finished install for component: %s", component.Name))

		return err
	}, rootInit)

	components, err := core.SynchronizeWalkResult(results)
	if err != nil {
		return err
	}

	for _, component := range components {
		logger.Info(emoji.Sprintf(":white_check_mark: Installed successfully: %s", component.Name))
	}
	logger.Info(emoji.Sprintf(":raised_hands: Finished install"))

	return err
}