From 8157a8db24f81c5204fd0e53728d12b802b46938 Mon Sep 17 00:00:00 2001 From: Simon Heather <32168619+X-Guardian@users.noreply.github.com> Date: Sat, 1 Feb 2025 19:17:35 +0000 Subject: [PATCH] fix: Workspace Error when include-git-untracked-files is true (#5288) Signed-off-by: X-Guardian <32168619+X-Guardian@users.noreply.github.com> --- server/events/project_command_builder.go | 31 +++++++------ server/events/project_command_builder_test.go | 44 ++++++++++++------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/server/events/project_command_builder.go b/server/events/project_command_builder.go index 2e42cfc8a..f626d4b60 100644 --- a/server/events/project_command_builder.go +++ b/server/events/project_command_builder.go @@ -455,23 +455,17 @@ func (p *DefaultProjectCommandBuilder) buildAllCommandsByCfg(ctx *command.Contex return nil, err } - if p.IncludeGitUntrackedFiles { - ctx.Log.Debug(("'include-git-untracked-files' option is set, getting untracked files")) - untrackedFiles, err := p.WorkingDir.GetGitUntrackedFiles(ctx.Log, ctx.HeadRepo, ctx.Pull, DefaultWorkspace) + ctx.Log.Debug("%d files were modified in this pull request. Modified files: %v", len(modifiedFiles), modifiedFiles) + + // If we're not including git untracked files, we can skip the clone if there are no modified files. + if !p.IncludeGitUntrackedFiles { + shouldSkipClone, err := p.shouldSkipClone(ctx, modifiedFiles) if err != nil { return nil, err } - modifiedFiles = append(modifiedFiles, untrackedFiles...) - } - - ctx.Log.Debug("%d files were modified in this pull request. Modified files: %v", len(modifiedFiles), modifiedFiles) - - shouldSkipClone, err := p.shouldSkipClone(ctx, modifiedFiles) - if err != nil { - return nil, err - } - if shouldSkipClone { - return []command.ProjectContext{}, nil + if shouldSkipClone { + return []command.ProjectContext{}, nil + } } // Need to lock the workspace we're about to clone to. @@ -490,6 +484,15 @@ func (p *DefaultProjectCommandBuilder) buildAllCommandsByCfg(ctx *command.Contex return nil, err } + if p.IncludeGitUntrackedFiles { + ctx.Log.Debug(("'include-git-untracked-files' option is set, getting untracked files")) + untrackedFiles, err := p.WorkingDir.GetGitUntrackedFiles(ctx.Log, ctx.HeadRepo, ctx.Pull, DefaultWorkspace) + if err != nil { + return nil, err + } + modifiedFiles = append(modifiedFiles, untrackedFiles...) + } + // Parse config file if it exists. repoCfgFile := p.GlobalCfg.RepoConfigFile(ctx.Pull.BaseRepo.ID()) hasRepoCfg, err := p.ParserValidator.HasRepoCfg(repoDir, repoCfgFile) diff --git a/server/events/project_command_builder_test.go b/server/events/project_command_builder_test.go index bb1614889..e74c563ed 100644 --- a/server/events/project_command_builder_test.go +++ b/server/events/project_command_builder_test.go @@ -45,7 +45,7 @@ var defaultUserConfig = struct { AutoplanFileList: "**/*.tf,**/*.tfvars,**/*.tfvars.json,**/terragrunt.hcl,**/.terraform.lock.hcl", RestrictFileList: false, SilenceNoProjects: false, - IncludeGitUntrackedFiles: true, + IncludeGitUntrackedFiles: false, AutoDiscoverMode: "auto", } @@ -1695,27 +1695,40 @@ projects: // Test that we don't clone the repo if there were no changes based on the atlantis.yaml file. func TestDefaultProjectCommandBuilder_SkipCloneNoChanges(t *testing.T) { cases := []struct { - AtlantisYAML string - ExpectedCtxs int - ExpectedClones InvocationCountMatcher - ModifiedFiles []string + AtlantisYAML string + ExpectedCtxs int + ExpectedClones InvocationCountMatcher + ModifiedFiles []string + IncludeGitUntrackedFiles bool }{ { AtlantisYAML: ` version: 3 projects: - dir: dir1`, - ExpectedCtxs: 0, - ExpectedClones: Never(), - ModifiedFiles: []string{"dir2/main.tf"}, + ExpectedCtxs: 0, + ExpectedClones: Never(), + ModifiedFiles: []string{"dir2/main.tf"}, + IncludeGitUntrackedFiles: false, + }, + { + AtlantisYAML: ` +version: 3 +projects: +- dir: dir1`, + ExpectedCtxs: 0, + ExpectedClones: Once(), + ModifiedFiles: []string{"dir2/main.tf"}, + IncludeGitUntrackedFiles: true, }, { AtlantisYAML: ` version: 3 parallel_plan: true`, - ExpectedCtxs: 0, - ExpectedClones: Once(), - ModifiedFiles: []string{"README.md"}, + ExpectedCtxs: 0, + ExpectedClones: Once(), + ModifiedFiles: []string{"README.md"}, + IncludeGitUntrackedFiles: false, }, { AtlantisYAML: ` @@ -1724,9 +1737,10 @@ autodiscover: mode: enabled projects: - dir: dir1`, - ExpectedCtxs: 0, - ExpectedClones: Once(), - ModifiedFiles: []string{"dir2/main.tf"}, + ExpectedCtxs: 0, + ExpectedClones: Once(), + ModifiedFiles: []string{"dir2/main.tf"}, + IncludeGitUntrackedFiles: false, }, } @@ -1770,7 +1784,7 @@ projects: userConfig.AutoplanFileList, userConfig.RestrictFileList, userConfig.SilenceNoProjects, - userConfig.IncludeGitUntrackedFiles, + c.IncludeGitUntrackedFiles, userConfig.AutoDiscoverMode, scope, terraformClient,