Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: hide successful policy check results when --quiet-policy-checks is set with multiple projects #5168

Merged
merged 5 commits into from
Jan 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 33 additions & 3 deletions server/controllers/events/events_controller_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,25 @@ func TestGitHubWorkflowWithPolicyCheck(t *testing.T) {
{"exp-output-merge.txt"},
},
},
{
Description: "1 failing policy and 1 passing policy with --quiet-policy-checks",
RepoDir: "policy-checks-multi-projects",
ModifiedFiles: []string{"dir1/main.tf,", "dir2/main.tf"},
PolicyCheck: true,
ExpAutoplan: true,
ExpPolicyChecks: true,
ExpQuietPolicyChecks: true,
ExpQuietPolicyCheckFailure: true,
Comments: []string{
"atlantis apply",
},
ExpReplies: [][]string{
{"exp-output-autoplan.txt"},
{"exp-output-auto-policy-check-quiet.txt"},
{"exp-output-apply.txt"},
{"exp-output-merge.txt"},
},
},
{
Description: "failing policy without policies passing using extra args",
RepoDir: "policy-checks-extra-args",
Expand Down Expand Up @@ -1183,7 +1202,7 @@ func TestGitHubWorkflowWithPolicyCheck(t *testing.T) {
userConfig.EnablePolicyChecksFlag = c.PolicyCheck
userConfig.QuietPolicyChecks = c.ExpQuietPolicyChecks

ctrl, vcsClient, githubGetter, atlantisWorkspace := setupE2E(t, c.RepoDir, setupOption{})
ctrl, vcsClient, githubGetter, atlantisWorkspace := setupE2E(t, c.RepoDir, setupOption{userConfig: userConfig})

// Set the repo to be cloned through the testing backdoor.
repoDir, headSHA := initializeRepo(t, c.RepoDir)
Expand Down Expand Up @@ -1274,13 +1293,13 @@ type setupOption struct {
allowCommands []command.Name
disableAutoplan bool
disablePreWorkflowHooks bool
userConfig server.UserConfig
}

func setupE2E(t *testing.T, repoDir string, opt setupOption) (events_controllers.VCSEventsController, *vcsmocks.MockClient, *mocks.MockGithubPullGetter, *events.FileWorkspace) {
allowForkPRs := false
discardApprovalOnPlan := true
dataDir, binDir, cacheDir := mkSubDirs(t)

// Mocks.
e2eVCSClient := vcsmocks.NewMockClient()
e2eStatusUpdater := &events.DefaultCommitStatusUpdater{Client: e2eVCSClient}
Expand Down Expand Up @@ -1493,7 +1512,18 @@ func setupE2E(t *testing.T, repoDir string, opt setupOption) (events_controllers
pullUpdater := &events.PullUpdater{
HidePrevPlanComments: false,
VCSClient: e2eVCSClient,
MarkdownRenderer: events.NewMarkdownRenderer(false, false, false, false, false, false, "", "atlantis", false),
MarkdownRenderer: events.NewMarkdownRenderer(
false, // gitlabSupportsCommonMark
false, // disableApplyAll
false, // disableApply
false, // disableMarkdownFolding
false, // disableRepoLocking
false, // enableDiffMarkdownFormat
"", // markdownTemplateOverridesDir
"atlantis", // executableName
false, // hideUnchangedPlanComments
opt.userConfig.QuietPolicyChecks, // quietPolicyChecks
),
}

autoMerger := &events.AutoMerger{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Ran Policy Check for 2 projects:

1. dir: `dir1` workspace: `default`
1. dir: `dir2` workspace: `default`
---

### 2. dir: `dir2` workspace: `default`
**Policy Check Failed**: Some policy sets did not pass.
#### Policy Set: `test_policy`
```diff
FAIL - <redacted plan file> - main - WARNING: Forbidden Resource creation is prohibited.

1 test, 0 passed, 0 warnings, 1 failure, 0 exceptions

```


#### Policy Approval Status:
```
policy set: test_policy: requires: 1 approval(s), have: 0.
```
* :heavy_check_mark: To **approve** this project, comment:
```shell
atlantis approve_policies -d dir2
```
* :put_litter_in_its_place: To **delete** this plan and lock, click [here](lock-url)
* :repeat: To re-run policies **plan** this project again by commenting:
```shell
atlantis plan -d dir2
```

---
* :heavy_check_mark: To **approve** all unapplied plans from this Pull Request, comment:
```shell
atlantis approve_policies
```
* :put_litter_in_its_place: To **delete** all plans and locks from this Pull Request, comment:
```shell
atlantis unlock
```
* :repeat: To re-run policies **plan** this project again by commenting:
```shell
atlantis plan
```
2 changes: 1 addition & 1 deletion server/events/command_runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func setup(t *testing.T, options ...func(testConfig *TestConfig)) *vcsmocks.Mock
pullUpdater = &events.PullUpdater{
HidePrevPlanComments: false,
VCSClient: vcsClient,
MarkdownRenderer: events.NewMarkdownRenderer(false, false, false, false, false, false, "", "atlantis", false),
MarkdownRenderer: events.NewMarkdownRenderer(false, false, false, false, false, false, "", "atlantis", false, false),
}

autoMerger = &events.AutoMerger{
Expand Down
23 changes: 15 additions & 8 deletions server/events/markdown_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ type MarkdownRenderer struct {
markdownTemplates *template.Template
executableName string
hideUnchangedPlanComments bool
quietPolicyChecks bool
}

// commonData is data that all responses have.
Expand All @@ -72,6 +73,7 @@ type commonData struct {
EnableDiffMarkdownFormat bool
ExecutableName string
HideUnchangedPlanComments bool
QuietPolicyChecks bool
VcsRequestType string
}

Expand Down Expand Up @@ -131,11 +133,12 @@ type policyCheckResultsData struct {
}

type projectResultTmplData struct {
Workspace string
RepoRelDir string
ProjectName string
Rendered string
NoChanges bool
Workspace string
RepoRelDir string
ProjectName string
Rendered string
NoChanges bool
IsSuccessful bool
}

// Initialize templates
Expand All @@ -149,6 +152,7 @@ func NewMarkdownRenderer(
markdownTemplateOverridesDir string,
executableName string,
hideUnchangedPlanComments bool,
quietPolicyChecks bool,
) *MarkdownRenderer {
var templates *template.Template
templates, _ = template.New("").Funcs(sprig.TxtFuncMap()).ParseFS(templatesFS, "templates/*.tmpl")
Expand All @@ -166,6 +170,7 @@ func NewMarkdownRenderer(
markdownTemplates: templates,
executableName: executableName,
hideUnchangedPlanComments: hideUnchangedPlanComments,
quietPolicyChecks: quietPolicyChecks,
}
}

Expand All @@ -192,6 +197,7 @@ func (m *MarkdownRenderer) Render(ctx *command.Context, res command.Result, cmd
EnableDiffMarkdownFormat: m.enableDiffMarkdownFormat,
ExecutableName: m.executableName,
HideUnchangedPlanComments: m.hideUnchangedPlanComments,
QuietPolicyChecks: m.quietPolicyChecks,
VcsRequestType: vcsRequestType,
}

Expand Down Expand Up @@ -224,9 +230,10 @@ func (m *MarkdownRenderer) renderProjectResults(ctx *command.Context, results []

for _, result := range results {
resultData := projectResultTmplData{
Workspace: result.Workspace,
RepoRelDir: result.RepoRelDir,
ProjectName: result.ProjectName,
Workspace: result.Workspace,
RepoRelDir: result.RepoRelDir,
ProjectName: result.ProjectName,
IsSuccessful: result.IsSuccessful(),
}
if result.PlanSuccess != nil {
result.PlanSuccess.TerraformOutput = strings.TrimSpace(result.PlanSuccess.TerraformOutput)
Expand Down
Loading
Loading