Skip to content

Commit 912223b

Browse files
authored
Merge pull request #808 from grv87/feature/require_password_to_approve
Add require_password_to_approve option for MRs
2 parents 26a1e00 + 4e8d1b5 commit 912223b

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

docs/resources/project_level_mr_approvals.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ resource "gitlab_project_level_mr_approvals" "foo" {
4141
- **disable_overriding_approvers_per_merge_request** (Boolean) By default, users are able to edit the approval rules in merge requests. If set to true,
4242
- **id** (String) The ID of this resource.
4343
- **merge_requests_author_approval** (Boolean) Set to `true` if you want to allow merge request authors to self-approve merge requests. Authors
44-
- **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`.
44+
- **merge_requests_disable_committers_approval** (Boolean) Set to `true` if you want to prevent approval of merge requests by merge request committers.
45+
- **require_password_to_approve** (Boolean) Set to `true` if you want to require authentication when approving a merge request.
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

4748
## Import

internal/provider/resource_gitlab_project_level_mr_approvals.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ var _ = registerResource("gitlab_project_level_mr_approvals", func() *schema.Res
4545
Optional: true,
4646
},
4747
"merge_requests_disable_committers_approval": {
48-
Description: "Set to `true` if you want to prevent approval of merge requests by merge request committers. Default is `false`.",
48+
Description: "Set to `true` if you want to prevent approval of merge requests by merge request committers.",
49+
Type: schema.TypeBool,
50+
Optional: true,
51+
},
52+
"require_password_to_approve": {
53+
Description: "Set to `true` if you want to require authentication when approving a merge request.",
4954
Type: schema.TypeBool,
5055
Optional: true,
5156
},
@@ -63,6 +68,7 @@ func resourceGitlabProjectLevelMRApprovalsCreate(ctx context.Context, d *schema.
6368
DisableOverridingApproversPerMergeRequest: gitlab.Bool(d.Get("disable_overriding_approvers_per_merge_request").(bool)),
6469
MergeRequestsAuthorApproval: gitlab.Bool(d.Get("merge_requests_author_approval").(bool)),
6570
MergeRequestsDisableCommittersApproval: gitlab.Bool(d.Get("merge_requests_disable_committers_approval").(bool)),
71+
RequirePasswordToApprove: gitlab.Bool(d.Get("require_password_to_approve").(bool)),
6672
}
6773

6874
log.Printf("[DEBUG] Creating new MR approval configuration for project %d:", projectId)
@@ -100,6 +106,7 @@ func resourceGitlabProjectLevelMRApprovalsRead(ctx context.Context, d *schema.Re
100106
d.Set("disable_overriding_approvers_per_merge_request", approvalConfig.DisableOverridingApproversPerMergeRequest)
101107
d.Set("merge_requests_author_approval", approvalConfig.MergeRequestsAuthorApproval)
102108
d.Set("merge_requests_disable_committers_approval", approvalConfig.MergeRequestsDisableCommittersApproval)
109+
d.Set("require_password_to_approve", approvalConfig.RequirePasswordToApprove)
103110

104111
return nil
105112
}
@@ -123,6 +130,9 @@ func resourceGitlabProjectLevelMRApprovalsUpdate(ctx context.Context, d *schema.
123130
if d.HasChange("merge_requests_disable_committers_approval") {
124131
options.MergeRequestsDisableCommittersApproval = gitlab.Bool(d.Get("merge_requests_disable_committers_approval").(bool))
125132
}
133+
if d.HasChange("require_password_to_approve") {
134+
options.RequirePasswordToApprove = gitlab.Bool(d.Get("require_password_to_approve").(bool))
135+
}
126136

127137
if _, _, err := client.Projects.ChangeApprovalConfiguration(d.Id(), options, gitlab.WithContext(ctx)); err != nil {
128138
return diag.Errorf("couldn't update approval configuration: %v", err)
@@ -140,6 +150,7 @@ func resourceGitlabProjectLevelMRApprovalsDelete(ctx context.Context, d *schema.
140150
DisableOverridingApproversPerMergeRequest: gitlab.Bool(false),
141151
MergeRequestsAuthorApproval: gitlab.Bool(false),
142152
MergeRequestsDisableCommittersApproval: gitlab.Bool(false),
153+
RequirePasswordToApprove: gitlab.Bool(false),
143154
}
144155

145156
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)