diff --git a/server/core/config/valid/global_cfg.go b/server/core/config/valid/global_cfg.go index baa4de7575..d2dabd2f89 100644 --- a/server/core/config/valid/global_cfg.go +++ b/server/core/config/valid/global_cfg.go @@ -321,6 +321,11 @@ func (g GlobalCfg) MergeProjectCfg(log logging.SimpleLogging, repoID string, pro if proj.ApplyRequirements != nil { log.Debug("overriding server-defined %s with repo settings: [%s]", ApplyRequirementsKey, strings.Join(proj.ApplyRequirements, ",")) applyReqs = proj.ApplyRequirements + + // Preserve policies_passed req if policy check is enabled + if policyCheck { + applyReqs = append(applyReqs, PoliciesPassedCommandReq) + } } case ImportRequirementsKey: if proj.ImportRequirements != nil { diff --git a/server/core/config/valid/global_cfg_test.go b/server/core/config/valid/global_cfg_test.go index 5c51893470..e0c7d1ec6b 100644 --- a/server/core/config/valid/global_cfg_test.go +++ b/server/core/config/valid/global_cfg_test.go @@ -922,6 +922,69 @@ repos: CustomPolicyCheck: false, }, }, + "repo-side apply reqs should include non-overrideable 'policies_passed' req when overridden and policies enabled": { + gCfg: ` +repos: +- id: /.*/ + allowed_overrides: [apply_requirements] + apply_requirements: [approved] + policy_check: true +`, + repoID: "github.com/owner/repo", + proj: valid.Project{ + Dir: ".", + Workspace: "default", + PlanRequirements: []string{}, + ApplyRequirements: []string{"mergeable"}, + ImportRequirements: []string{}, + }, + repoWorkflows: nil, + exp: valid.MergedProjectCfg{ + PlanRequirements: []string{}, + ApplyRequirements: []string{"mergeable", "policies_passed"}, + ImportRequirements: []string{}, + Workflow: defaultWorkflow, + RepoRelDir: ".", + Workspace: "default", + Name: "", + AutoplanEnabled: false, + PolicySets: emptyPolicySets, + RepoLocking: true, + CustomPolicyCheck: false, + PolicyCheck: true, + }, + }, + "repo-side apply reqs should not include non-overrideable 'policies_passed' req when overridden and policies disabled": { + gCfg: ` +repos: +- id: /.*/ + allowed_overrides: [apply_requirements] + apply_requirements: [approved] +`, + repoID: "github.com/owner/repo", + proj: valid.Project{ + Dir: ".", + Workspace: "default", + PlanRequirements: []string{}, + ApplyRequirements: []string{"mergeable"}, + ImportRequirements: []string{}, + }, + repoWorkflows: nil, + exp: valid.MergedProjectCfg{ + PlanRequirements: []string{}, + ApplyRequirements: []string{"mergeable"}, + ImportRequirements: []string{}, + Workflow: defaultWorkflow, + RepoRelDir: ".", + Workspace: "default", + Name: "", + AutoplanEnabled: false, + PolicySets: emptyPolicySets, + RepoLocking: true, + CustomPolicyCheck: false, + PolicyCheck: false, + }, + }, "repo-side import reqs win out if allowed": { gCfg: ` repos: diff --git a/server/events/project_command_builder_internal_test.go b/server/events/project_command_builder_internal_test.go index bd524dea90..0b5f6c62eb 100644 --- a/server/events/project_command_builder_internal_test.go +++ b/server/events/project_command_builder_internal_test.go @@ -1062,7 +1062,7 @@ workflows: Pull: pull, ProjectName: "", PlanRequirements: []string{"policies_passed"}, - ApplyRequirements: []string{}, + ApplyRequirements: []string{"policies_passed"}, ImportRequirements: []string{"policies_passed"}, RepoConfigVersion: 3, RePlanCmd: "atlantis plan -d project1 -w myworkspace -- flag",