Skip to content

Commit 7261ffd

Browse files
authored
fix: respect block patterns for terragrunt project (#2430)
1 parent ac62555 commit 7261ffd

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

libs/digger_config/digger_config.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,26 @@ func HandleYamlProjectGeneration(config *DiggerConfigYaml, terraformDir string,
445445
"blockName", b.BlockName)
446446
return nil, err
447447
}
448+
if len(b.IncludePatterns) > 0 || len(b.ExcludePatterns) > 0 {
449+
for _, project := range config.Projects {
450+
if project.BlockName == b.BlockName && project.Terragrunt {
451+
if len(b.IncludePatterns) > 0 {
452+
project.IncludePatterns = append(project.IncludePatterns, b.IncludePatterns...)
453+
slog.Debug("merged include_patterns for terragrunt project",
454+
"projectName", project.Name,
455+
"blockName", b.BlockName,
456+
"includePatterns", project.IncludePatterns)
457+
}
458+
if len(b.ExcludePatterns) > 0 {
459+
project.ExcludePatterns = append(project.ExcludePatterns, b.ExcludePatterns...)
460+
slog.Debug("merged exclude_patterns for terragrunt project",
461+
"projectName", project.Name,
462+
"blockName", b.BlockName,
463+
"excludePatterns", project.ExcludePatterns)
464+
}
465+
}
466+
}
467+
}
448468
} else {
449469
slog.Debug("skipping block due to no changed files", "blockName", b.BlockName)
450470
}

libs/digger_config/digger_config_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,58 @@ generate_projects:
10231023
assert.Equal(t, 3, len(dg.Projects))
10241024
}
10251025

1026+
func TestDiggerGenerateProjectsTerragruntBlocksWithIncludeExcludePatterns(t *testing.T) {
1027+
tempDir, teardown := setUp()
1028+
defer teardown()
1029+
1030+
diggerCfg := `
1031+
generate_projects:
1032+
blocks:
1033+
- block_name: test-terragrunt
1034+
terragrunt: true
1035+
root_dir: infrastructure
1036+
include_patterns: ["modules/**", "shared/**"]
1037+
exclude_patterns: ["modules/legacy/**"]
1038+
`
1039+
deleteFile := createFile(path.Join(tempDir, "digger.yml"), diggerCfg)
1040+
defer deleteFile()
1041+
1042+
dirsToCreate := []string{
1043+
"infrastructure/env1/app1",
1044+
"infrastructure/env1/app2",
1045+
"infrastructure/env2/app1",
1046+
}
1047+
1048+
for _, dir := range dirsToCreate {
1049+
err := os.MkdirAll(path.Join(tempDir, dir), os.ModePerm)
1050+
assert.NoError(t, err, "expected error to be nil")
1051+
defer createFile(path.Join(tempDir, dir, "terragrunt.hcl"), hclFile)()
1052+
}
1053+
1054+
dg, _, _, _, err := LoadDiggerConfig(tempDir, true, nil, nil)
1055+
assert.NoError(t, err, "expected error to be nil")
1056+
assert.NotNil(t, dg, "expected digger digger_config to be not nil")
1057+
1058+
terragruntProjectsFound := 0
1059+
for _, project := range dg.Projects {
1060+
if project.BlockName != "test-terragrunt" || !project.Terragrunt {
1061+
continue
1062+
}
1063+
terragruntProjectsFound++
1064+
1065+
assert.NotNil(t, project.IncludePatterns, "IncludePatterns should not be nil for project %s", project.Name)
1066+
assert.Greater(t, len(project.IncludePatterns), 0, "IncludePatterns should have at least one pattern for project %s", project.Name)
1067+
assert.Contains(t, project.IncludePatterns, "modules/**")
1068+
assert.Contains(t, project.IncludePatterns, "shared/**")
1069+
1070+
assert.NotNil(t, project.ExcludePatterns, "ExcludePatterns should not be nil for project %s", project.Name)
1071+
assert.Greater(t, len(project.ExcludePatterns), 0, "ExcludePatterns should have at least one pattern for project %s", project.Name)
1072+
assert.Contains(t, project.ExcludePatterns, "modules/legacy/**")
1073+
}
1074+
1075+
assert.Greater(t, terragruntProjectsFound, 0, "should have found at least one terragrunt project")
1076+
}
1077+
10261078
func TestDiggerGenerateProjectsWithOpenTofu(t *testing.T) {
10271079
tempDir, teardown := setUp()
10281080
defer teardown()

0 commit comments

Comments
 (0)