@@ -94,7 +94,18 @@ def reset_gitlab(gl: gitlab.Gitlab) -> None:
9494helpers .safe_delete (deploy_token )
9595logging .info (f"Deleting project:{ project .path_with_namespace !r} " )
9696helpers .safe_delete (project )
97+
9798for group in gl .groups .list ():
99+
100+ # skip deletion of a descendant group to prevent scenarios where parent group
101+ # gets deleted leaving a dangling descendant whose deletion will throw 404s.
102+ if group .parent_id :
103+ logging .info (
104+ f"Skipping deletion of{ group .full_path } as it is a descendant "
105+ f"group and will be removed when the parent group is deleted"
106+ )
107+ continue
108+
98109for deploy_token in group .deploytokens .list ():
99110logging .info (
100111f"Deleting deploy token:{ deploy_token .username !r} in "
@@ -110,7 +121,7 @@ def reset_gitlab(gl: gitlab.Gitlab) -> None:
110121logging .info (f"Deleting variable:{ variable .key !r} " )
111122helpers .safe_delete (variable )
112123for user in gl .users .list ():
113- if user .username != "root" :
124+ if user .username not in [ "root" , "ghost" ] :
114125logging .info (f"Deleting user:{ user .username !r} " )
115126helpers .safe_delete (user ,hard_delete = True )
116127