@@ -342,6 +342,28 @@ async def _sync_github_teams(
342342 """Dry-run GitHub team membership synchronisation with Keycloak."""
343343 keycloak_identities , github_org_members , resolved_keycloak_logins_by_id , _ , _ = common_info
344344 ignored_normalised = self ._ignored_github_users_normalised ()
345+
346+ desired_org_by_user_id = {
347+ identity ["user_id" ].strip (): resolved_keycloak_logins_by_id [identity ["user_id" ].strip ()]
348+ for identity in keycloak_identities .values ()
349+ if identity .get ("user_id" )
350+ and identity ["user_id" ].strip () in resolved_keycloak_logins_by_id
351+ }
352+ desired_org_by_user_id = {
353+ user_id : username
354+ for user_id , username in desired_org_by_user_id .items ()
355+ if self ._normalise_login (username ) not in ignored_normalised
356+ }
357+ github_org_by_user_id = {
358+ user_id : username
359+ for user_id , username in github_org_members .items ()
360+ if self ._normalise_login (username ) not in ignored_normalised
361+ }
362+ org_users_to_remove = set (github_org_by_user_id ) - set (desired_org_by_user_id )
363+ org_users_to_remove_normalised = {
364+ self ._normalise_login (github_org_by_user_id [user_id ]) for user_id in org_users_to_remove
365+ }
366+
345367 keycloak_to_github = {
346368 keycloak_username : resolved_keycloak_logins_by_id [identity ["user_id" ].strip ()]
347369 for keycloak_username , identity in keycloak_identities .items ()
@@ -381,6 +403,7 @@ async def _sync_github_teams(
381403 normalised : username
382404 for normalised , username in current_by_normalised .items ()
383405 if normalised not in ignored_normalised
406+ and normalised not in org_users_to_remove_normalised
384407 }
385408
386409 desired_normalised = set (desired_by_normalised )
0 commit comments