@@ -312,8 +312,33 @@ func getDependencies(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, g
312312 }
313313}
314314
315+ func createBaseProject (dir string , workflow string , terraformVersion string , applyRequirements * []string , autoPlan bool , dependencies []string , createProjectName bool , createWorkspace bool ) * AtlantisProject {
316+ project := & AtlantisProject {
317+ Dir : filepath .ToSlash (dir ),
318+ Workflow : workflow ,
319+ TerraformVersion : terraformVersion ,
320+ ApplyRequirements : applyRequirements ,
321+ Autoplan : AutoplanConfig {
322+ Enabled : autoPlan ,
323+ WhenModified : uniqueStrings (dependencies ),
324+ },
325+ }
326+
327+ if createProjectName || createWorkspace {
328+ projectName := projectNameFromDir (project .Dir )
329+ if createProjectName {
330+ project .Name = projectName
331+ }
332+ if createWorkspace {
333+ project .Workspace = projectName
334+ }
335+ }
336+
337+ return project
338+ }
339+
315340// Creates an AtlantisProject for a directory
316- func createProject (ignoreParentTerragrunt bool , ignoreDependencyBlocks bool , gitRoot string , cascadeDependencies bool , defaultWorkflow string , defaultApplyRequirements []string , autoPlan bool , defaultTerraformVersion string , createProjectName bool , createWorkspace bool , sourcePath string ) (* AtlantisProject , []string , error ) {
341+ func createProject (ignoreParentTerragrunt bool , ignoreDependencyBlocks bool , gitRoot string , cascadeDependencies bool , defaultWorkflow string , defaultApplyRequirements []string , autoPlan bool , defaultTerraformVersion string , createProjectName bool , createWorkspace bool , sourcePath string , triggerProjectsFromDirOnly bool ) (* AtlantisProject , []string , error ) {
317342 options , err := options .NewTerragruntOptionsWithConfigPath (sourcePath )
318343
319344 var potentialProjectDependencies []string
@@ -324,6 +349,39 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
324349 options .RunTerragrunt = terraform .Run
325350 options .Env = getEnvs ()
326351
352+ // All dependencies depend on their own .hcl file, and any tf files in their directory
353+ relativeDependencies := []string {
354+ "*.hcl" ,
355+ "*.tf*" ,
356+ }
357+
358+ // Clean up the relative path to the format Atlantis expects
359+ absoluteSourceDir := filepath .Dir (sourcePath ) + string (filepath .Separator )
360+ relativeSourceDir := strings .TrimPrefix (absoluteSourceDir , gitRoot )
361+ relativeSourceDir = strings .TrimSuffix (relativeSourceDir , string (filepath .Separator ))
362+ if relativeSourceDir == "" {
363+ relativeSourceDir = "."
364+ }
365+
366+ if triggerProjectsFromDirOnly {
367+ // TODO: Figure out easy way to make it also work with other values of gitRoot through prefix matching
368+ if relativeSourceDir == "." {
369+ return nil , potentialProjectDependencies , nil
370+ }
371+
372+ project := createBaseProject (
373+ relativeSourceDir ,
374+ defaultWorkflow ,
375+ defaultTerraformVersion ,
376+ & defaultApplyRequirements ,
377+ autoPlan ,
378+ relativeDependencies ,
379+ createProjectName ,
380+ createWorkspace ,
381+ )
382+ return project , potentialProjectDependencies , nil
383+ }
384+
327385 dependencies , err := getDependencies (ignoreParentTerragrunt , ignoreDependencyBlocks , gitRoot , cascadeDependencies , sourcePath , options )
328386 if err != nil {
329387 return nil , potentialProjectDependencies , err
@@ -334,8 +392,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
334392 return nil , potentialProjectDependencies , nil
335393 }
336394
337- absoluteSourceDir := filepath .Dir (sourcePath ) + string (filepath .Separator )
338-
339395 locals , err := parseLocals (sourcePath , options , nil )
340396 if err != nil {
341397 return nil , potentialProjectDependencies , err
@@ -346,12 +402,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
346402 return nil , potentialProjectDependencies , nil
347403 }
348404
349- // All dependencies depend on their own .hcl file, and any tf files in their directory
350- relativeDependencies := []string {
351- "*.hcl" ,
352- "*.tf*" ,
353- }
354-
355405 // Add other dependencies based on their relative paths. We always want to output with Unix path separators
356406 for _ , dependencyPath := range dependencies {
357407 absolutePath := dependencyPath
@@ -368,13 +418,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
368418 relativeDependencies = append (relativeDependencies , filepath .ToSlash (relativePath ))
369419 }
370420
371- // Clean up the relative path to the format Atlantis expects
372- relativeSourceDir := strings .TrimPrefix (absoluteSourceDir , gitRoot )
373- relativeSourceDir = strings .TrimSuffix (relativeSourceDir , string (filepath .Separator ))
374- if relativeSourceDir == "" {
375- relativeSourceDir = "."
376- }
377-
378421 workflow := defaultWorkflow
379422 if locals .AtlantisWorkflow != "" {
380423 workflow = locals .AtlantisWorkflow
@@ -398,16 +441,16 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
398441 terraformVersion = locals .TerraformVersion
399442 }
400443
401- project := & AtlantisProject {
402- Dir : filepath . ToSlash ( relativeSourceDir ) ,
403- Workflow : workflow ,
404- TerraformVersion : terraformVersion ,
405- ApplyRequirements : applyRequirements ,
406- Autoplan : AutoplanConfig {
407- Enabled : resolvedAutoPlan ,
408- WhenModified : uniqueStrings ( relativeDependencies ) ,
409- } ,
410- }
444+ project := createBaseProject (
445+ relativeSourceDir ,
446+ workflow ,
447+ terraformVersion ,
448+ applyRequirements ,
449+ resolvedAutoPlan ,
450+ relativeDependencies ,
451+ createProjectName ,
452+ createWorkspace ,
453+ )
411454
412455 projectName := projectNameFromDir (project .Dir )
413456
@@ -660,7 +703,7 @@ func getAllTerragruntProjectHclFiles(projectHclFiles []string, gitRoot string) m
660703 return uniqueHclFileAbsPaths
661704}
662705
663- func Parse (gitRoot string , projectHclFiles []string , createHclProjectExternalChilds bool , autoMerge bool , parallel bool , filterPath string , createHclProjectChilds bool , ignoreParentTerragrunt bool , ignoreDependencyBlocks bool , cascadeDependencies bool , defaultWorkflow string , defaultApplyRequirements []string , autoPlan bool , defaultTerraformVersion string , createProjectName bool , createWorkspace bool , preserveProjects bool , useProjectMarkers bool , executionOrderGroups bool ) (* AtlantisConfig , map [string ][]string , error ) {
706+ func Parse (gitRoot string , projectHclFiles []string , createHclProjectExternalChilds bool , autoMerge bool , parallel bool , filterPath string , createHclProjectChilds bool , ignoreParentTerragrunt bool , ignoreDependencyBlocks bool , cascadeDependencies bool , defaultWorkflow string , defaultApplyRequirements []string , autoPlan bool , defaultTerraformVersion string , createProjectName bool , createWorkspace bool , preserveProjects bool , useProjectMarkers bool , executionOrderGroups bool , triggerProjectsFromDirOnly bool ) (* AtlantisConfig , map [string ][]string , error ) {
664707 // Ensure the gitRoot has a trailing slash and is an absolute path
665708 absoluteGitRoot , err := filepath .Abs (gitRoot )
666709 if err != nil {
@@ -726,7 +769,7 @@ func Parse(gitRoot string, projectHclFiles []string, createHclProjectExternalChi
726769
727770 errGroup .Go (func () error {
728771 defer sem .Release (1 )
729- project , projDeps , err := createProject (ignoreParentTerragrunt , ignoreDependencyBlocks , gitRoot , cascadeDependencies , defaultWorkflow , defaultApplyRequirements , autoPlan , defaultTerraformVersion , createProjectName , createWorkspace , terragruntPath )
772+ project , projDeps , err := createProject (ignoreParentTerragrunt , ignoreDependencyBlocks , gitRoot , cascadeDependencies , defaultWorkflow , defaultApplyRequirements , autoPlan , defaultTerraformVersion , createProjectName , createWorkspace , terragruntPath , triggerProjectsFromDirOnly )
730773 if err != nil {
731774 return err
732775 }
0 commit comments