@@ -33,7 +33,9 @@ def add_args(parser) -> None:
3333 help = "GitHub API URL (https://github-hostname-here/api/v3/ for GHES, EMU or data residency)" ,
3434 )
3535 parser .add_argument (
36- "--token-file" , required = False , help = "GitHub Personal Access Token file (or use GITHUB_TOKEN)"
36+ "--token-file" ,
37+ required = False ,
38+ help = "GitHub Personal Access Token file (or use GITHUB_TOKEN)" ,
3739 )
3840 parser .add_argument (
3941 "--org-list" , default = "all_orgs.csv" , help = "CSV file of organizations"
@@ -42,8 +44,14 @@ def add_args(parser) -> None:
4244 "--sec-team-name" , default = "security-managers" , help = "Security team name"
4345 )
4446 parser .add_argument ("--sec-team-members" , nargs = "*" , help = "Security team members" )
45- parser .add_argument ("--sec-team-members-file" , required = False , help = "Security team members file" )
46- parser .add_argument ("--legacy" , action = "store_true" , help = "Use legacy API endpoints to manage the security managers" )
47+ parser .add_argument (
48+ "--sec-team-members-file" , required = False , help = "Security team members file"
49+ )
50+ parser .add_argument (
51+ "--legacy" ,
52+ action = "store_true" ,
53+ help = "Use legacy API endpoints to manage the security managers" ,
54+ )
4755 parser .add_argument (
4856 "--debug" ,
4957 "-d" ,
@@ -53,22 +61,36 @@ def add_args(parser) -> None:
5361
5462
5563def make_security_managers_team (
56- org_name : str , sec_team_name : str , api_url : str , headers : dict [str , str ], legacy = False
64+ org_name : str ,
65+ sec_team_name : str ,
66+ api_url : str ,
67+ headers : dict [str , str ],
68+ legacy = False ,
5769) -> None :
5870 """Create or update the security managers team in the specified organization."""
5971 security_manager_role_id : str | None = None
6072
6173 if not legacy :
62- org_roles : dict [str , Any ] = organizations .list_org_roles (api_url , headers , org_name )
74+ org_roles : dict [str , Any ] = organizations .list_org_roles (
75+ api_url , headers , org_name
76+ )
6377
6478 # Check if the "security manager" role exists
6579 if "roles" not in org_roles :
6680 LOG .error ("⨯ Malformed response from GitHub API" )
6781 return
6882
69- security_manager_role_id_list = [role ["id" ] for role in org_roles ["roles" ] if role ["name" ] == "security_manager" ]
83+ security_manager_role_id_list = [
84+ role ["id" ]
85+ for role in org_roles ["roles" ]
86+ if role ["name" ] == "security_manager"
87+ ]
7088 if not security_manager_role_id_list :
71- LOG .error ("⨯ Organization {} does not have a security manager role" .format (org_name ))
89+ LOG .error (
90+ "⨯ Organization {} does not have a security manager role" .format (
91+ org_name
92+ )
93+ )
7294 return
7395 security_manager_role_id = security_manager_role_id_list [0 ]
7496
@@ -87,13 +109,33 @@ def make_security_managers_team(
87109 # Update that team to have the "security manager" role
88110 try :
89111 # only update it if the team does not already have the role
90- if not teams .has_team_role (api_url , headers , org_name , sec_team_name , security_manager_role_id , legacy = legacy ):
91- teams .change_team_role (api_url , headers , org_name , sec_team_name , security_manager_role_id , legacy = legacy )
112+ if not teams .has_team_role (
113+ api_url ,
114+ headers ,
115+ org_name ,
116+ sec_team_name ,
117+ security_manager_role_id ,
118+ legacy = legacy ,
119+ ):
120+ teams .change_team_role (
121+ api_url ,
122+ headers ,
123+ org_name ,
124+ sec_team_name ,
125+ security_manager_role_id ,
126+ legacy = legacy ,
127+ )
92128 LOG .info (
93- "✓ Team {} updated as a security manager for {}" .format (sec_team_name , org_name )
129+ "✓ Team {} updated as a security manager for {}" .format (
130+ sec_team_name , org_name
131+ )
94132 )
95133 else :
96- LOG .debug ("✓ Team {} already has the security manager role for {}" .format (sec_team_name , org_name ))
134+ LOG .debug (
135+ "✓ Team {} already has the security manager role for {}" .format (
136+ sec_team_name , org_name
137+ )
138+ )
97139 except Exception as e :
98140 LOG .error ("⨯ Failed to update team {}: {}" .format (sec_team_name , e ))
99141 if LOG .getEffectiveLevel () == logging .DEBUG :
@@ -117,7 +159,11 @@ def add_security_managers_to_team(
117159 try :
118160 organizations .add_org_user (api_url , headers , org_name , username )
119161 except Exception as e :
120- LOG .error ("⨯ Failed to add user {} to org {}: {}" .format (username , org_name , e ))
162+ LOG .error (
163+ "⨯ Failed to add user {} to org {}: {}" .format (
164+ username , org_name , e
165+ )
166+ )
121167 return
122168
123169 # Get the list of team members, adding the missing ones to the team and removing the extra ones
@@ -131,18 +177,30 @@ def add_security_managers_to_team(
131177 api_url , headers , org_name , sec_team_name , username
132178 )
133179 except Exception as e :
134- LOG .error ("⨯ Failed to remove user {} from team {}: {}" .format (username , sec_team_name , e ))
180+ LOG .error (
181+ "⨯ Failed to remove user {} from team {}: {}" .format (
182+ username , sec_team_name , e
183+ )
184+ )
135185 return
136186 for username in sec_team_members :
137187 if username not in team_members_list :
138188 LOG .info ("Adding {} to {}" .format (username , sec_team_name ))
139189 try :
140- teams .add_team_member (api_url , headers , org_name , sec_team_name , username )
190+ teams .add_team_member (
191+ api_url , headers , org_name , sec_team_name , username
192+ )
141193 except Exception as e :
142- LOG .error ("⨯ Failed to add user {} to team {}: {}" .format (username , sec_team_name , e ))
194+ LOG .error (
195+ "⨯ Failed to add user {} to team {}: {}" .format (
196+ username , sec_team_name , e
197+ )
198+ )
143199 return
144200 else :
145- LOG .debug ("✓ User {} is already a member of {}" .format (username , sec_team_name ))
201+ LOG .debug (
202+ "✓ User {} is already a member of {}" .format (username , sec_team_name )
203+ )
146204
147205
148206def main () -> None :
@@ -174,7 +232,9 @@ def main() -> None:
174232 elif args .sec_team_members :
175233 sec_team_members = args .sec_team_members
176234 else :
177- LOG .error ("⨯ Please provide either --sec-team-members or --sec-team-members-file" )
235+ LOG .error (
236+ "⨯ Please provide either --sec-team-members or --sec-team-members-file"
237+ )
178238 return
179239
180240 # Set up the headers
@@ -186,7 +246,9 @@ def main() -> None:
186246 for org in orgs :
187247 org_name = org ["login" ]
188248
189- make_security_managers_team (org_name , args .sec_team_name , args .api_url , headers , legacy = args .legacy )
249+ make_security_managers_team (
250+ org_name , args .sec_team_name , args .api_url , headers , legacy = args .legacy
251+ )
190252 add_security_managers_to_team (
191253 org_name , args .sec_team_name , sec_team_members , args .api_url , headers
192254 )
0 commit comments