Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit304bdd0

Browse files
amimasnejch
authored andcommitted
feat(group): add support for group level MR approval rules
1 parentcfa6358 commit304bdd0

File tree

4 files changed

+354
-16
lines changed

4 files changed

+354
-16
lines changed

‎docs/gl_objects/merge_request_approvals.rst

Lines changed: 77 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,47 @@
22
Merge request approvals settings
33
################################
44

5-
Merge request approvals can be defined at the project level or at the merge
6-
request level.
5+
Merge request approvals can be defined at the group level, or the project level or at the merge request level.
6+
7+
Group approval rules
8+
====================
9+
10+
References
11+
----------
12+
13+
* v4 API:
14+
15+
+:class:`gitlab.v4.objects.GroupApprovalRule`
16+
+:class:`gitlab.v4.objects.GroupApprovalRuleManager`
17+
18+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
19+
20+
Examples
21+
--------
22+
23+
List group-level MR approval rules::
24+
25+
group_approval_rules = group.approval_rules.list()
26+
27+
Change group-level MR approval rule::
28+
29+
g_approval_rule = group.approval_rules.get(123)
30+
g_approval_rule.user_ids = [234]
31+
g_approval_rule.save()
32+
33+
Create new group-level MR approval rule::
34+
35+
group.approval_rules.create({
36+
"name": "my new approval rule",
37+
"approvals_required": 2,
38+
"rule_type": "regular",
39+
"user_ids": [105],
40+
"group_ids": [653, 654],
41+
})
42+
43+
44+
Project approval rules
45+
======================
746

847
References
948
----------
@@ -15,15 +54,6 @@ References
1554
+:class:`gitlab.v4.objects.ProjectApprovalRule`
1655
+:class:`gitlab.v4.objects.ProjectApprovalRuleManager`
1756
+:attr:`gitlab.v4.objects.Project.approvals`
18-
+:class:`gitlab.v4.objects.ProjectMergeRequestApproval`
19-
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
20-
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
21-
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
22-
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
23-
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
24-
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
25-
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
26-
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
2757

2858
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
2959

@@ -43,7 +73,41 @@ Delete project-level MR approval rule::
4373

4474
p_approvalrule.delete()
4575

46-
Get project-level or MR-level MR approvals settings::
76+
Get project-level MR approvals settings::
77+
78+
p_mras = project.approvals.get()
79+
80+
Change project-level MR approvals settings::
81+
82+
p_mras.approvals_before_merge = 2
83+
p_mras.save()
84+
85+
86+
Merge request approval rules
87+
============================
88+
89+
References
90+
----------
91+
92+
* v4 API:
93+
94+
+:class:`gitlab.v4.objects.ProjectMergeRequestApproval`
95+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
96+
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
97+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
98+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
99+
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
100+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
101+
+:class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
102+
+:attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
103+
104+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
105+
106+
Examples
107+
--------
108+
109+
110+
Get MR-level MR approvals settings::
47111

48112
p_mras = project.approvals.get()
49113

@@ -53,10 +117,7 @@ Get MR-level approval state::
53117

54118
mr_approval_state = mr.approval_state.get()
55119

56-
Change project-level or MR-level MR approvals settings::
57-
58-
p_mras.approvals_before_merge = 2
59-
p_mras.save()
120+
Change MR-level MR approvals settings::
60121

61122
mr.approvals.set_approvers(approvals_required=1)
62123
# or

‎gitlab/v4/objects/groups.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
GroupMemberAllManager,
4040
GroupMemberManager,
4141
)
42+
from .merge_request_approvalsimportGroupApprovalRuleManager
4243
from .merge_requestsimportGroupMergeRequestManager# noqa: F401
4344
from .milestonesimportGroupMilestoneManager# noqa: F401
4445
from .notification_settingsimportGroupNotificationSettingsManager# noqa: F401
@@ -70,6 +71,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
7071

7172
access_tokens:GroupAccessTokenManager
7273
accessrequests:GroupAccessRequestManager
74+
approval_rules:GroupApprovalRuleManager
7375
audit_events:GroupAuditEventManager
7476
badges:GroupBadgeManager
7577
billable_members:GroupBillableMemberManager

‎gitlab/v4/objects/merge_request_approvals.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
fromgitlab.typesimportRequiredOptional
1717

1818
__all__= [
19+
"GroupApprovalRule",
20+
"GroupApprovalRuleManager",
1921
"ProjectApproval",
2022
"ProjectApprovalManager",
2123
"ProjectApprovalRule",
@@ -29,6 +31,26 @@
2931
]
3032

3133

34+
classGroupApprovalRule(SaveMixin,RESTObject):
35+
_id_attr="id"
36+
_repr_attr="name"
37+
38+
39+
classGroupApprovalRuleManager(RetrieveMixin,CreateMixin,UpdateMixin,RESTManager):
40+
_path="/groups/{group_id}/approval_rules"
41+
_obj_cls=GroupApprovalRule
42+
_from_parent_attrs= {"group_id":"id"}
43+
_create_attrs=RequiredOptional(
44+
required=("name","approvals_required"),
45+
optional=("user_ids","group_ids","rule_type"),
46+
)
47+
48+
defget(
49+
self,id:Union[str,int],lazy:bool=False,**kwargs:Any
50+
)->GroupApprovalRule:
51+
returncast(GroupApprovalRule,super().get(id=id,lazy=lazy,**kwargs))
52+
53+
3254
classProjectApproval(SaveMixin,RESTObject):
3355
_id_attr=None
3456

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp