@@ -182,16 +182,16 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
182
182
self ._get_org_members ()
183
183
184
184
# Get open invitations
185
- open_invitations = [user .login for user in self .org .invitations ()]
185
+ open_invitations = [user .login . lower () for user in self .org .invitations ()]
186
186
187
187
for team , team_attrs in self .current_teams .items ():
188
188
# Update current team members with dict[NamedUser, str (role)]
189
189
team_attrs ["members" ] = self ._get_current_team_members (team )
190
190
191
191
# For the rest of the function however, we use just the login name
192
- # for each current user
192
+ # for each current user. All lower-case
193
193
current_team_members = {
194
- user .login : role for user , role in team_attrs ["members" ].items ()
194
+ user .login . lower () : role for user , role in team_attrs ["members" ].items ()
195
195
}
196
196
197
197
# Handle the team not being configured locally
@@ -209,16 +209,17 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
209
209
else :
210
210
team_configuration = {}
211
211
212
- # Analog to team_attrs["members"], add members and maintainers to shared
213
- # dict with respective role, while maintainer role dominates
212
+ # Analog to team_attrs["members"], add members and maintainers to
213
+ # shared dict with respective role, while maintainer role dominates.
214
+ # All user names shall be lower-case to ease comparison
214
215
configured_users : dict [str , str ] = {}
215
216
for config_role in ("member" , "maintainer" ):
216
217
team_members = self ._get_configured_team_members (
217
218
team_configuration , team .name , config_role
218
219
)
219
220
for team_member in team_members :
220
- # Add user with role to dict
221
- configured_users .update ({team_member : config_role })
221
+ # Add user with role to dict, in lower-case
222
+ configured_users .update ({team_member . lower () : config_role })
222
223
223
224
# Consider all GitHub organisation team maintainers if they are member of the team
224
225
# This is because GitHub API returns them as maintainers even if they are just members
@@ -227,7 +228,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
227
228
logging .debug (
228
229
"Overriding role of organisation owner '%s' to maintainer" , user .login
229
230
)
230
- configured_users [user .login ] = "maintainer"
231
+ configured_users [user .login . lower () ] = "maintainer"
231
232
232
233
# Only make edits to the team membership if the current state differs from config
233
234
if configured_users == current_team_members :
@@ -278,8 +279,11 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
278
279
# Loop through all current members. Remove them if they are not configured
279
280
for current_user in current_team_members :
280
281
if current_user not in configured_users :
282
+ logging .debug ("User '%s' not found within configured users" , current_user )
281
283
# Turn user to GitHub object, trying to find them
282
284
if not (gh_user := self ._resolve_gh_username (current_user , team .name )):
285
+ # If the user cannot be found for some reason, log an
286
+ # error and skip this loop
283
287
continue
284
288
if team .has_in_members (gh_user ):
285
289
logging .info (
@@ -561,7 +565,7 @@ def _get_configured_repos_and_user_perms(self):
561
565
)
562
566
)
563
567
else :
564
- self .configured_repos_collaborators [repo ][team_member ] = perm
568
+ self .configured_repos_collaborators [repo ][team_member . lower () ] = perm
565
569
566
570
def _convert_graphql_perm_to_rest (self , permission : str ) -> str :
567
571
"""Convert a repo permission coming from the GraphQL API to the ones
0 commit comments