Skip to content

Commit 9170d3a

Browse files
grv87timofurrer
authored andcommitted
feat: add require_password_to_approve option for MRs
1 parent 26a1e00 commit 9170d3a

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

docs/resources/project_level_mr_approvals.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ resource "gitlab_project_level_mr_approvals" "foo" {
2626
disable_overriding_approvers_per_merge_request = false
2727
merge_requests_author_approval = false
2828
merge_requests_disable_committers_approval = true
29+
require_password_to_approve = true
2930
}
3031
```
3132

@@ -44,6 +45,8 @@ resource "gitlab_project_level_mr_approvals" "foo" {
4445
- **merge_requests_disable_committers_approval** (Boolean) Set to `true` if you want to prevent approval of merge requests by merge request committers. Default is `false`.
4546
- **reset_approvals_on_push** (Boolean) Set to `true` if you want to remove all approvals in a merge request when new commits are pushed to its source branch. Default is `true`.
4647

48+
* `require_password_to_approve` - (Optional) Set to `true` if you want to require authentification when approving a merge request. Default is `false`.
49+
4750
## Import
4851

4952
Import is supported using the following syntax:

internal/provider/resource_gitlab_project_level_mr_approvals.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ var _ = registerResource("gitlab_project_level_mr_approvals", func() *schema.Res
4949
Type: schema.TypeBool,
5050
Optional: true,
5151
},
52+
"require_password_to_approve": {
53+
Type: schema.TypeBool,
54+
Optional: true,
55+
},
5256
},
5357
}
5458
})
@@ -63,6 +67,7 @@ func resourceGitlabProjectLevelMRApprovalsCreate(ctx context.Context, d *schema.
6367
DisableOverridingApproversPerMergeRequest: gitlab.Bool(d.Get("disable_overriding_approvers_per_merge_request").(bool)),
6468
MergeRequestsAuthorApproval: gitlab.Bool(d.Get("merge_requests_author_approval").(bool)),
6569
MergeRequestsDisableCommittersApproval: gitlab.Bool(d.Get("merge_requests_disable_committers_approval").(bool)),
70+
RequirePasswordToApprove: gitlab.Bool(d.Get("require_password_to_approve").(bool)),
6671
}
6772

6873
log.Printf("[DEBUG] Creating new MR approval configuration for project %d:", projectId)
@@ -100,6 +105,7 @@ func resourceGitlabProjectLevelMRApprovalsRead(ctx context.Context, d *schema.Re
100105
d.Set("disable_overriding_approvers_per_merge_request", approvalConfig.DisableOverridingApproversPerMergeRequest)
101106
d.Set("merge_requests_author_approval", approvalConfig.MergeRequestsAuthorApproval)
102107
d.Set("merge_requests_disable_committers_approval", approvalConfig.MergeRequestsDisableCommittersApproval)
108+
d.Set("require_password_to_approve", approvalConfig.RequirePasswordToApprove)
103109

104110
return nil
105111
}
@@ -123,6 +129,9 @@ func resourceGitlabProjectLevelMRApprovalsUpdate(ctx context.Context, d *schema.
123129
if d.HasChange("merge_requests_disable_committers_approval") {
124130
options.MergeRequestsDisableCommittersApproval = gitlab.Bool(d.Get("merge_requests_disable_committers_approval").(bool))
125131
}
132+
if d.HasChange("require_password_to_approve") {
133+
options.RequirePasswordToApprove = gitlab.Bool(d.Get("require_password_to_approve").(bool))
134+
}
126135

127136
if _, _, err := client.Projects.ChangeApprovalConfiguration(d.Id(), options, gitlab.WithContext(ctx)); err != nil {
128137
return diag.Errorf("couldn't update approval configuration: %v", err)
@@ -140,6 +149,7 @@ func resourceGitlabProjectLevelMRApprovalsDelete(ctx context.Context, d *schema.
140149
DisableOverridingApproversPerMergeRequest: gitlab.Bool(false),
141150
MergeRequestsAuthorApproval: gitlab.Bool(false),
142151
MergeRequestsDisableCommittersApproval: gitlab.Bool(false),
152+
RequirePasswordToApprove: gitlab.Bool(false),
143153
}
144154

145155
log.Printf("[DEBUG] Resetting approval configuration for project %s:", projectId)

internal/provider/resource_gitlab_project_level_mr_approvals_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func TestAccGitlabProjectLevelMRApprovals_basic(t *testing.T) {
3030
disableOverridingApproversPerMergeRequest: true,
3131
mergeRequestsAuthorApproval: true,
3232
mergeRequestsDisableCommittersApproval: true,
33+
requirePasswordToApprove: true,
3334
}),
3435
),
3536
},
@@ -43,6 +44,7 @@ func TestAccGitlabProjectLevelMRApprovals_basic(t *testing.T) {
4344
disableOverridingApproversPerMergeRequest: false,
4445
mergeRequestsAuthorApproval: false,
4546
mergeRequestsDisableCommittersApproval: false,
47+
requirePasswordToApprove: false,
4648
}),
4749
),
4850
},
@@ -56,6 +58,7 @@ func TestAccGitlabProjectLevelMRApprovals_basic(t *testing.T) {
5658
disableOverridingApproversPerMergeRequest: true,
5759
mergeRequestsAuthorApproval: true,
5860
mergeRequestsDisableCommittersApproval: true,
61+
requirePasswordToApprove: true,
5962
}),
6063
),
6164
},
@@ -92,6 +95,7 @@ type testAccGitlabProjectLevelMRApprovalsExpectedAttributes struct {
9295
disableOverridingApproversPerMergeRequest bool
9396
mergeRequestsAuthorApproval bool
9497
mergeRequestsDisableCommittersApproval bool
98+
requirePasswordToApprove bool
9599
}
96100

97101
func testAccCheckGitlabProjectLevelMRApprovalsAttributes(projectApprovals *gitlab.ProjectApprovals, want *testAccGitlabProjectLevelMRApprovalsExpectedAttributes) resource.TestCheckFunc {
@@ -108,6 +112,9 @@ func testAccCheckGitlabProjectLevelMRApprovalsAttributes(projectApprovals *gitla
108112
if projectApprovals.MergeRequestsDisableCommittersApproval != want.mergeRequestsDisableCommittersApproval {
109113
return fmt.Errorf("got merge_requests_disable_committers_approval %t; want %t", projectApprovals.MergeRequestsDisableCommittersApproval, want.mergeRequestsDisableCommittersApproval)
110114
}
115+
if projectApprovals.RequirePasswordToApprove != want.requirePasswordToApprove {
116+
return fmt.Errorf("got require_password_to_approve %t; want %t", projectApprovals.RequirePasswordToApprove, want.requirePasswordToApprove)
117+
}
111118
return nil
112119
}
113120
}
@@ -170,6 +177,7 @@ resource "gitlab_project_level_mr_approvals" "foo" {
170177
disable_overriding_approvers_per_merge_request = true
171178
merge_requests_author_approval = true
172179
merge_requests_disable_committers_approval = true
180+
require_password_to_approve = true
173181
}
174182
`, rInt)
175183
}
@@ -188,6 +196,7 @@ resource "gitlab_project_level_mr_approvals" "foo" {
188196
disable_overriding_approvers_per_merge_request = false
189197
merge_requests_author_approval = false
190198
merge_requests_disable_committers_approval = false
199+
require_password_to_approve = false
191200
}
192201
`, rInt)
193202
}

0 commit comments

Comments
 (0)