File tree Expand file tree Collapse file tree 4 files changed +60
-4
lines changed Open diff view settings
Expand file tree Collapse file tree 4 files changed +60
-4
lines changed Open diff view settings
Original file line number Diff line number Diff line change 22Protected branches
33##################
44
5- You can define a list of protected branch names on a repository. Names can use
6- wildcards (``* ``).
5+ You can define a list of protected branch names on a repository or group.
6+ Names can use wildcards (``* ``).
77
88References
99----------
@@ -13,19 +13,24 @@ References
1313 + :class: `gitlab.v4.objects.ProjectProtectedBranch `
1414 + :class: `gitlab.v4.objects.ProjectProtectedBranchManager `
1515 + :attr: `gitlab.v4.objects.Project.protectedbranches `
16+ + :class: `gitlab.v4.objects.GroupProtectedBranch `
17+ + :class: `gitlab.v4.objects.GroupProtectedBranchManager `
18+ + :attr: `gitlab.v4.objects.Group.protectedbranches `
1619
1720* GitLab API: https://docs.gitlab.com/api/protected_branches#protected-branches-api
1821
1922Examples
2023--------
2124
22- Get the list of protected branches for a project::
25+ Get the list of protected branches for a project or group ::
2326
24- p_branches = project.protectedbranches.list(get_all=True)
27+ p_branches = project.protectedbranches.list()
28+ p_branches = group.protectedbranches.list()
2529
2630Get a single protected branch::
2731
2832 p_branch = project.protectedbranches.get('main')
33+ p_branch = group.protectedbranches.get('main')
2934
3035Update a protected branch::
3136
Original file line number Diff line number Diff line change @@ -49,3 +49,27 @@ class ProjectProtectedBranchManager(CRUDMixin[ProjectProtectedBranch]):
4949 ),
5050 )
5151 _update_method = UpdateMethod .PATCH
52+
53+
54+ class GroupProtectedBranch (SaveMixin , ObjectDeleteMixin , RESTObject ):
55+ _id_attr = "name"
56+
57+
58+ class GroupProtectedBranchManager (CRUDMixin [GroupProtectedBranch ]):
59+ _path = "/groups/{group_id}/protected_branches"
60+ _obj_cls = GroupProtectedBranch
61+ _from_parent_attrs = {"group_id" : "id" }
62+ _create_attrs = RequiredOptional (
63+ required = ("name" ,),
64+ optional = (
65+ "push_access_level" ,
66+ "merge_access_level" ,
67+ "unprotect_access_level" ,
68+ "allow_force_push" ,
69+ "allowed_to_push" ,
70+ "allowed_to_merge" ,
71+ "allowed_to_unprotect" ,
72+ "code_owner_approval_required" ,
73+ ),
74+ )
75+ _update_method = UpdateMethod .PATCH
Original file line number Diff line number Diff line change 2424from .audit_events import GroupAuditEventManager # noqa: F401
2525from .badges import GroupBadgeManager # noqa: F401
2626from .boards import GroupBoardManager # noqa: F401
27+ from .branches import GroupProtectedBranchManager # noqa: F401
2728from .clusters import GroupClusterManager # noqa: F401
2829from .container_registry import GroupRegistryRepositoryManager # noqa: F401
2930from .custom_attributes import GroupCustomAttributeManager # noqa: F401
@@ -102,6 +103,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
102103 packages : GroupPackageManager
103104 projects : GroupProjectManager
104105 shared_projects : SharedProjectManager
106+ protectedbranches : GroupProtectedBranchManager
105107 pushrules : GroupPushRulesManager
106108 registry_repositories : GroupRegistryRepositoryManager
107109 runners : GroupRunnerManager
Original file line number Diff line number Diff line change @@ -312,6 +312,31 @@ def test_group_hooks(group):
312312 hook .delete ()
313313
314314
315+ def test_group_protected_branches (group , gitlab_version ):
316+ # Updating a protected branch at the group level is possible from Gitlab 15.9
317+ # https://docs.gitlab.com/api/group_protected_branches/
318+ can_update_prot_branch = gitlab_version .major > 15 or (
319+ gitlab_version .major == 15 and gitlab_version .minor >= 9
320+ )
321+
322+ p_b = group .protectedbranches .create (
323+ {"name" : "*-stable" , "allow_force_push" : False }
324+ )
325+ assert p_b .name == "*-stable"
326+ assert not p_b .allow_force_push
327+ assert p_b in group .protectedbranches .list ()
328+
329+ if can_update_prot_branch :
330+ p_b .allow_force_push = True
331+ p_b .save ()
332+
333+ p_b = group .protectedbranches .get ("*-stable" )
334+ if can_update_prot_branch :
335+ assert p_b .allow_force_push
336+
337+ p_b .delete ()
338+
339+
315340def test_group_transfer (gl , group ):
316341 transfer_group = gl .groups .create (
317342 {"name" : "transfer-test-group" , "path" : "transfer-test-group" }
You can’t perform that action at this time.
0 commit comments