@@ -965,30 +965,87 @@ def create_var(var):
965965 else :
966966 old_p_branch = {}
967967
968- project .protectedbranches .create (
969- {
970- 'name' : branch ["name" ],
971- 'push_access_level' : branch ["push_access_level" ],
972- 'merge_access_level' : branch ["merge_access_level" ],
973- 'allow_force_push' : default (lambda : branch ["allow_force_push" ], False ),
974- 'code_owner_approval_required' : branch ["code_owner_approval_required" ]
975- }
976- )
968+ branch_dict = {
969+ "name" : branch ["name" ],
970+ "push_access_level" : branch ["push_access_level" ],
971+ "merge_access_level" : branch ["merge_access_level" ],
972+ "allow_force_push" : default (lambda : branch ["allow_force_push" ], False ),
973+ "code_owner_approval_required" : branch ["code_owner_approval_required" ]
974+ }
975+
976+ if "allowed_to_merge" in branch :
977+ branch_dict ["allowed_to_merge" ] = []
978+ for user_or_group in branch ["allowed_to_merge" ]:
979+ if "user" in user_or_group :
980+ user_id = gl .users .list (username = user_or_group ["user" ])[0 ].id
981+ logger .info ("Found user ID: {id}, name: {user}" .format (id = user_id , user = user_or_group ["user" ]))
982+ branch_dict ["allowed_to_merge" ].append ({"user_id" : user_id })
983+ if "group" in user_or_group :
984+ group_id = gl .groups .get (user_or_group ["group" ]).id
985+ logger .info ("Found group ID: {id}, name: {group}" .format (id = group_id , group = user_or_group ["group" ]))
986+ branch_dict ["allowed_to_merge" ].append ({"group_id" : group_id })
987+
988+ if "allowed_to_push" in branch :
989+ branch_dict ["allowed_to_push" ] = []
990+ for user_or_group in branch ["allowed_to_push" ]:
991+ if "user" in user_or_group :
992+ user_id = gl .users .list (username = user_or_group ["user" ])[0 ].id
993+ logger .info ("Found user ID: {id}, name: {user}" .format (id = user_id , user = user_or_group ["user" ]))
994+ branch_dict ["allowed_to_push" ].append ({"user_id" : user_id })
995+ if "group" in user_or_group :
996+ group_id = gl .groups .get (user_or_group ["group" ]).id
997+ logger .info ("Found group ID: {id}, name: {group}" .format (id = group_id , group = user_or_group ["group" ]))
998+ branch_dict ["allowed_to_push" ].append ({"group_id" : group_id })
999+
1000+ project .protectedbranches .create (branch_dict )
9771001 new_p_branch = project .protectedbranches .get (branch ["name" ]).asdict ()
9781002 diff = DeepDiff (old_p_branch , new_p_branch , exclude_regex_paths = [r"root\[.+\]\[.+\]\['id'\]" , r"root\['id'\]" ])
9791003 if diff :
9801004 print ("Protected branch \" {branch_name}\" config diff:" .format (branch_name = branch ["name" ]))
9811005 print ("---" )
9821006 print (diff .pretty ())
9831007 print ("---" )
1008+
9841009 project .save ()
1010+
9851011 # Protected tags
9861012 if "protected_tags" in project_dict :
9871013 for tag in project_dict ["protected_tags" ]:
1014+
9881015 if any (project_tag .name == tag ["name" ] for project_tag in project .protectedtags .list (get_all = True )):
9891016 p_tag = project .protectedtags .get (tag ["name" ])
1017+ old_p_tag = project .protectedtags .get (tag ["name" ]).asdict ()
9901018 p_tag .delete ()
991- project .protectedtags .create ({'name' : tag ["name" ], 'create_access_level' : tag ["create_access_level" ]})
1019+ else :
1020+ old_p_tag = {}
1021+
1022+ tag_dict = {
1023+ "name" : tag ["name" ],
1024+ "create_access_level" : tag ["create_access_level" ]
1025+ }
1026+
1027+ if "allowed_to_create" in tag :
1028+ tag_dict ["allowed_to_create" ] = []
1029+ for user_or_group in tag ["allowed_to_create" ]:
1030+ if "user" in user_or_group :
1031+ user_id = gl .users .list (username = user_or_group ["user" ])[0 ].id
1032+ logger .info ("Found user ID: {id}, name: {user}" .format (id = user_id , user = user_or_group ["user" ]))
1033+ tag_dict ["allowed_to_create" ].append ({"user_id" : user_id })
1034+ if "group" in user_or_group :
1035+ group_id = gl .groups .get (user_or_group ["group" ]).id
1036+ logger .info ("Found group ID: {id}, name: {group}" .format (id = group_id , group = user_or_group ["group" ]))
1037+ tag_dict ["allowed_to_create" ].append ({"group_id" : group_id })
1038+
1039+ project .protectedtags .create (tag_dict )
1040+ new_p_tag = project .protectedtags .get (tag ["name" ]).asdict ()
1041+ diff = DeepDiff (old_p_tag , new_p_tag , exclude_regex_paths = [r"root\[.+\]\[.+\]\['id'\]" , r"root\['id'\]" ])
1042+ if diff :
1043+ print ("Protected tag \" {tag_name}\" config diff:" .format (tag_name = tag ["name" ]))
1044+ print ("---" )
1045+ print (diff .pretty ())
1046+ print ("---" )
1047+
1048+ project .save ()
9921049
9931050 # MR approval rules (should be done after branch protection reset)
9941051 if "merge_request_approval_rules" in project_dict :
@@ -1180,7 +1237,7 @@ def create_var(var):
11801237 project .save ()
11811238 new_project_dict = project .asdict ()
11821239 if old_project_dict != new_project_dict :
1183- print (DeepDiff (old_project_dict , new_project_dict ).pretty ())
1240+ print (DeepDiff (old_project_dict , new_project_dict , exclude_regex_paths = [ r"root\['permissions'\]" ] ).pretty ())
11841241
11851242 logger .info ("Project {project} settings:" .format (project = project_dict ["path" ]))
11861243 logger .info (project )
0 commit comments