@@ -312,8 +312,33 @@ func getDependencies(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, g
312
312
}
313
313
}
314
314
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
+
315
340
// 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 ) {
317
342
options , err := options .NewTerragruntOptionsWithConfigPath (sourcePath )
318
343
319
344
var potentialProjectDependencies []string
@@ -324,6 +349,39 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
324
349
options .RunTerragrunt = terraform .Run
325
350
options .Env = getEnvs ()
326
351
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
+
327
385
dependencies , err := getDependencies (ignoreParentTerragrunt , ignoreDependencyBlocks , gitRoot , cascadeDependencies , sourcePath , options )
328
386
if err != nil {
329
387
return nil , potentialProjectDependencies , err
@@ -334,8 +392,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
334
392
return nil , potentialProjectDependencies , nil
335
393
}
336
394
337
- absoluteSourceDir := filepath .Dir (sourcePath ) + string (filepath .Separator )
338
-
339
395
locals , err := parseLocals (sourcePath , options , nil )
340
396
if err != nil {
341
397
return nil , potentialProjectDependencies , err
@@ -346,12 +402,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
346
402
return nil , potentialProjectDependencies , nil
347
403
}
348
404
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
-
355
405
// Add other dependencies based on their relative paths. We always want to output with Unix path separators
356
406
for _ , dependencyPath := range dependencies {
357
407
absolutePath := dependencyPath
@@ -368,13 +418,6 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
368
418
relativeDependencies = append (relativeDependencies , filepath .ToSlash (relativePath ))
369
419
}
370
420
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
-
378
421
workflow := defaultWorkflow
379
422
if locals .AtlantisWorkflow != "" {
380
423
workflow = locals .AtlantisWorkflow
@@ -398,16 +441,16 @@ func createProject(ignoreParentTerragrunt bool, ignoreDependencyBlocks bool, git
398
441
terraformVersion = locals .TerraformVersion
399
442
}
400
443
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
+ )
411
454
412
455
projectName := projectNameFromDir (project .Dir )
413
456
@@ -660,7 +703,7 @@ func getAllTerragruntProjectHclFiles(projectHclFiles []string, gitRoot string) m
660
703
return uniqueHclFileAbsPaths
661
704
}
662
705
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 ) {
664
707
// Ensure the gitRoot has a trailing slash and is an absolute path
665
708
absoluteGitRoot , err := filepath .Abs (gitRoot )
666
709
if err != nil {
@@ -726,7 +769,7 @@ func Parse(gitRoot string, projectHclFiles []string, createHclProjectExternalChi
726
769
727
770
errGroup .Go (func () error {
728
771
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 )
730
773
if err != nil {
731
774
return err
732
775
}
0 commit comments