From ad224085957de8547ff1ed09af7615ac97e7c6a3 Mon Sep 17 00:00:00 2001 From: giuli007 Date: Fri, 4 Jun 2021 10:59:10 -0700 Subject: [PATCH] Always use the default workspace directory when building commands context When pre_workflow_hooks is being used to generate atlantis.yaml and projects are set with specific workspaces different than "default", a different directory is created for each project-workspace pair, but all those that are not on the "default" workspace will not have an atlantis.yaml file at their root. This change ensures that when atlantis is building the projects commands for either: - a project-specific plan, triggered via (atlantis plan -d foo -w bar) - a project-specific apply, triggered vi (atlantis apply -d foo -w bar) - or applies for all the plans it can find (atlantis apply) it uses the default workspace to find the atlantis.yaml config. --- server/events/project_command_builder.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/server/events/project_command_builder.go b/server/events/project_command_builder.go index fc7c9b6f16..63a70d6832 100644 --- a/server/events/project_command_builder.go +++ b/server/events/project_command_builder.go @@ -292,7 +292,7 @@ func (p *DefaultProjectCommandBuilder) buildProjectPlanCommand(ctx *CommandConte defer unlockFn() ctx.Log.Debug("cloning repository") - repoDir, _, err := p.WorkingDir.Clone(ctx.Log, ctx.HeadRepo, ctx.Pull, workspace) + _, _, err = p.WorkingDir.Clone(ctx.Log, ctx.HeadRepo, ctx.Pull, workspace) if err != nil { return pcc, err } @@ -302,12 +302,19 @@ func (p *DefaultProjectCommandBuilder) buildProjectPlanCommand(ctx *CommandConte repoRelDir = cmd.RepoRelDir } + // use the default repository workspace because it is the only one guaranteed to have an atlantis.yaml, + // other workspaces will not have the file if they are using pre_workflow_hooks to generate it dynamically + defaultRepoDir, err := p.WorkingDir.GetWorkingDir(ctx.Pull.BaseRepo, ctx.Pull, DefaultWorkspace) + if err != nil { + return pcc, err + } + return p.buildProjectCommandCtx( ctx, models.PlanCommand, cmd.ProjectName, cmd.Flags, - repoDir, + defaultRepoDir, repoRelDir, workspace, cmd.Verbose, @@ -387,9 +394,16 @@ func (p *DefaultProjectCommandBuilder) buildAllProjectCommands(ctx *CommandConte return nil, err } + // use the default repository workspace because it is the only one guaranteed to have an atlantis.yaml, + // other workspaces will not have the file if they are using pre_workflow_hooks to generate it dynamically + defaultRepoDir, err := p.WorkingDir.GetWorkingDir(ctx.Pull.BaseRepo, ctx.Pull, DefaultWorkspace) + if err != nil { + return nil, err + } + var cmds []models.ProjectCommandContext for _, plan := range plans { - commentCmds, err := p.buildProjectCommandCtx(ctx, commentCmd.CommandName(), plan.ProjectName, commentCmd.Flags, plan.RepoDir, plan.RepoRelDir, plan.Workspace, commentCmd.Verbose) + commentCmds, err := p.buildProjectCommandCtx(ctx, commentCmd.CommandName(), plan.ProjectName, commentCmd.Flags, defaultRepoDir, plan.RepoRelDir, plan.Workspace, commentCmd.Verbose) if err != nil { return nil, errors.Wrapf(err, "building command for dir %q", plan.RepoRelDir) } @@ -413,7 +427,9 @@ func (p *DefaultProjectCommandBuilder) buildProjectApplyCommand(ctx *CommandCont } defer unlockFn() - repoDir, err := p.WorkingDir.GetWorkingDir(ctx.Pull.BaseRepo, ctx.Pull, workspace) + // use the default repository workspace because it is the only one guaranteed to have an atlantis.yaml, + // other workspaces will not have the file if they are using pre_workflow_hooks to generate it dynamically + repoDir, err := p.WorkingDir.GetWorkingDir(ctx.Pull.BaseRepo, ctx.Pull, DefaultWorkspace) if os.IsNotExist(errors.Cause(err)) { return projCtx, errors.New("no working directory found–did you run plan?") } else if err != nil {