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
}