55 "errors"
66 "fmt"
77 "os"
8+ "path/filepath"
89 "strings"
910
1011 "github.com/manifoldco/promptui"
@@ -184,6 +185,9 @@ func (cc *createCmd) detectLanguage() (*handlers.Template, string, error) {
184185 return nil , "" , fmt .Errorf ("there was an error detecting the language: %s" , err )
185186 }
186187 if len (langs ) == 0 {
188+ if ! interactive {
189+ return nil , "" , ErrNoLanguageDetected
190+ }
187191 langs , err = promptLanguageSelection (supportedLanguages )
188192 if err != nil {
189193 return nil , "" , fmt .Errorf ("prompting for language: %w" , err )
@@ -192,7 +196,8 @@ func (cc *createCmd) detectLanguage() (*handlers.Template, string, error) {
192196 for _ , lang := range langs {
193197 log .Debugf ("%s:\t %f (%s)" , lang .Language , lang .Percent , lang .Color )
194198 // For now let's check here for weird stuff like go module support
195- if lang .Language == "Go" {
199+ hasGoMod = true
200+ if interactive && lang .Language == "Go" {
196201 hasGo = true
197202
198203 selection := & promptui.Select {
@@ -204,15 +209,15 @@ func (cc *createCmd) detectLanguage() (*handlers.Template, string, error) {
204209 if err != nil {
205210 return nil , "" , err
206211 }
207-
208212 hasGoMod = strings .EqualFold (selectResponse , "yes" )
213+
209214 }
210215
211- if lang .Language == "Java" {
216+ if interactive && lang .Language == "Java" {
212217
213218 selection := & promptui.Select {
214219 Label : "Linguist detected Java, are you using maven or gradle?" ,
215- Items : []string {"gradle " , "maven " , "gradlew" },
220+ Items : []string {"maven " , "gradle " , "gradlew" },
216221 }
217222
218223 _ , selectResponse , err := selection .Run ()
@@ -302,15 +307,16 @@ func (cc *createCmd) generateDockerfile(dockerfileTemplate *handlers.Template, l
302307 }
303308 }
304309
305- if cc .createConfig .LanguageVariables == nil {
306- dockerfileTemplate .Config .VariableMapToDraftConfig ( flagVariablesMap )
307-
308- if err = prompts . RunPromptsFromConfigWithSkips ( dockerfileTemplate . Config ); err != nil {
310+ if cc .createConfig .LanguageVariables != nil || ! interactive {
311+ dockerfileTemplate .Config .ApplyDefaultVariables ( )
312+ err = validateConfigInputsToPrompts ( dockerfileTemplate . Config , cc . createConfig . LanguageVariables )
313+ if err != nil {
309314 return err
310315 }
311316 } else {
312- err = validateConfigInputsToPrompts (dockerfileTemplate .Config , cc .createConfig .LanguageVariables )
313- if err != nil {
317+ dockerfileTemplate .Config .VariableMapToDraftConfig (flagVariablesMap )
318+
319+ if err = prompts .RunPromptsFromConfigWithSkips (dockerfileTemplate .Config ); err != nil {
314320 return err
315321 }
316322 }
@@ -329,13 +335,20 @@ func (cc *createCmd) generateDockerfile(dockerfileTemplate *handlers.Template, l
329335 return nil
330336}
331337
332- func (cc * createCmd ) createDeployment () error {
338+ func (cc * createCmd ) generateDeployment () error {
333339 log .Info ("--- Deployment File Creation ---" )
334340 var deployType string
335341 var deployTemplate * handlers.Template
336342 var err error
337343
344+ if ! interactive {
345+ if cc .createConfig .DeployType == "" {
346+ cc .createConfig .DeployType = "manifests"
347+ log .Debugf ("using default deployment type %s" , cc .createConfig .DeployType )
348+ }
349+ }
338350 if cc .createConfig .DeployType != "" {
351+
339352 deployType = strings .ToLower (cc .createConfig .DeployType )
340353 deployTemplate , err = handlers .GetTemplate (fmt .Sprintf ("deployment-%s" , deployType ), "" , cc .dest , cc .templateWriter )
341354 if err != nil {
@@ -344,6 +357,28 @@ func (cc *createCmd) createDeployment() error {
344357 if deployTemplate == nil || deployTemplate .Config == nil {
345358 return errors .New ("invalid deployment type" )
346359 }
360+ if ! interactive {
361+ currentDir , err := os .Getwd ()
362+ if err != nil {
363+ return fmt .Errorf ("getting current directory: %w" , err )
364+ }
365+ defaultAppName := fmt .Sprintf ("%s-workflow" , filepath .Base (currentDir ))
366+ defaultAppName , err = ToValidAppName (defaultAppName )
367+ if err != nil {
368+ log .Debugf ("unable to convert default app name %q to a valid name: %v" , defaultAppName , err )
369+ log .Debugf ("using default app name %q" , defaultAppName )
370+ defaultAppName = "my-app"
371+ }
372+ appVar , err := deployTemplate .Config .GetVariable ("APPNAME" )
373+ if err != nil || appVar == nil {
374+ log .Debugf ("unable to get APP_NAME variable: %v" , err )
375+ }
376+ if err == nil {
377+ appVar .Default .Value = defaultAppName
378+ }
379+
380+ deployTemplate .Config .ApplyDefaultVariables ()
381+ }
347382 err = validateConfigInputsToPrompts (deployTemplate .Config , cc .createConfig .DeployVariables )
348383 if err != nil {
349384 return err
@@ -352,7 +387,7 @@ func (cc *createCmd) createDeployment() error {
352387 if cc .deployType == "" {
353388 selection := & promptui.Select {
354389 Label : "Select k8s Deployment Type" ,
355- Items : []string {"helm " , "kustomize" , "manifests " },
390+ Items : []string {"manifests " , "kustomize" , "helm " },
356391 }
357392
358393 _ , deployType , err = selection .Run ()
@@ -405,7 +440,7 @@ func (cc *createCmd) createFiles(detectedLangTempalte *handlers.Template, lowerL
405440 }
406441 }
407442 if ! cc .dockerfileOnly {
408- err := cc .createDeployment ()
443+ err := cc .generateDeployment ()
409444 if err != nil {
410445 return err
411446 }
@@ -421,6 +456,9 @@ func (cc *createCmd) createFiles(detectedLangTempalte *handlers.Template, lowerL
421456
422457 // prompts user for dockerfile re-creation
423458 if hasDockerFile && ! cc .deploymentOnly {
459+ if ! interactive && ! cc .skipFileDetection {
460+ return fmt .Errorf ("dockerfile already exists in the directory '%s', use --skip-file-detection to overwrite" , cc .dest )
461+ }
424462 selection := & promptui.Select {
425463 Label : "We found Dockerfile in the directory, would you like to recreate the Dockerfile?" ,
426464 Items : []string {"yes" , "no" },
@@ -447,6 +485,9 @@ func (cc *createCmd) createFiles(detectedLangTempalte *handlers.Template, lowerL
447485
448486 // prompts user for deployment re-creation
449487 if hasDeploymentFiles && ! cc .dockerfileOnly {
488+ if ! interactive && ! cc .skipFileDetection {
489+ return fmt .Errorf ("deployment files already exist in the directory '%s', use --skip-file-detection to overwrite" , cc .dest )
490+ }
450491 selection := & promptui.Select {
451492 Label : "We found deployment files in the directory, would you like to create new deployment files?" ,
452493 Items : []string {"yes" , "no" },
@@ -465,7 +506,7 @@ func (cc *createCmd) createFiles(detectedLangTempalte *handlers.Template, lowerL
465506 } else if hasDeploymentFiles {
466507 log .Info ("--> Found deployment directory in local directory, skipping deployment file creation..." )
467508 } else if ! cc .dockerfileOnly {
468- err := cc .createDeployment ()
509+ err := cc .generateDeployment ()
469510 if err != nil {
470511 return err
471512 }
0 commit comments