func()

in cmd/create.go [281:336]


func (cc *createCmd) generateDockerfile(dockerfileTemplate *handlers.Template, lowerLang string) error {
	log.Info("--- Dockerfile Creation ---")

	// Extract language-specific defaults from repo
	extractedValues, err := dockerfileTemplate.ExtractDefaults(lowerLang, cc.repoReader)
	if err != nil {
		return err
	}

	// Check for existing duplicate defaults
	for k, v := range extractedValues {
		variableExists := false
		for i, variable := range dockerfileTemplate.Config.Variables {
			if k == variable.Name {
				variableExists = true
				dockerfileTemplate.Config.Variables[i].Default.Value = v
				break
			}
		}
		if !variableExists {
			dockerfileTemplate.Config.Variables = append(dockerfileTemplate.Config.Variables, &config.BuilderVar{
				Name: k,
				Default: config.BuilderVarDefault{
					Value: v,
				},
			})
		}
	}

	if cc.createConfig.LanguageVariables != nil || !interactive {
		dockerfileTemplate.Config.ApplyDefaultVariables()
		err = validateConfigInputsToPrompts(dockerfileTemplate.Config, cc.createConfig.LanguageVariables)
		if err != nil {
			return err
		}
	} else {
		dockerfileTemplate.Config.VariableMapToDraftConfig(flagVariablesMap)

		if err = prompts.RunPromptsFromConfigWithSkips(dockerfileTemplate.Config); err != nil {
			return err
		}
	}

	if cc.templateVariableRecorder != nil {
		for _, variable := range dockerfileTemplate.Config.Variables {
			cc.templateVariableRecorder.Record(variable.Name, variable.Value)
		}
	}

	if err = dockerfileTemplate.Generate(); err != nil {
		return fmt.Errorf("there was an error when creating the Dockerfile for language %s: %w", cc.createConfig.LanguageType, err)
	}

	log.Info("--> Creating Dockerfile...\n")
	return nil
}