Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not warn about members without team if they just have been added #48

Merged
merged 1 commit into from
Aug 23, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions gh_org_mgr/_gh_org.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class GHorg: # pylint: disable=too-many-instance-attributes, too-many-lines
org_members: list[NamedUser] = field(default_factory=list)
current_teams: dict[Team, dict] = field(default_factory=dict)
configured_teams: dict[str, dict | None] = field(default_factory=dict)
newly_added_users: list[NamedUser] = field(default_factory=list)
current_repos_teams: dict[Repository, dict[Team, str]] = field(default_factory=dict)
current_repos_collaborators: dict[Repository, dict[str, str]] = field(default_factory=dict)
configured_repos_collaborators: dict[str, dict[str, str]] = field(default_factory=dict)
Expand Down Expand Up @@ -485,6 +486,13 @@ def _get_current_team_members(self, team: Team) -> dict[NamedUser, str]:

return current_users

def _add_or_update_user_in_team(self, team: Team, user: NamedUser, role: str):
"""Add or update membership of a user in a team"""
team.add_membership(member=user, role=role)
# Document that the user has just been added to a team. Relevant when we
# will later find users without team membership
self.newly_added_users.append(user)

def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-many-branches
"""Check the configured members of each team, add missing ones and delete unconfigured"""
logging.debug("Starting to sync team members")
Expand Down Expand Up @@ -571,7 +579,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
config_role,
)
if not dry:
team.add_membership(member=gh_user, role=config_role)
self._add_or_update_user_in_team(team=team, user=gh_user, role=config_role)

# Update roles if they differ from old role
elif config_role != current_team_members.get(config_user, ""):
Expand All @@ -585,7 +593,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
config_role,
)
if not dry:
team.add_membership(member=gh_user, role=config_role)
self._add_or_update_user_in_team(team=team, user=gh_user, role=config_role)

# Loop through all current members. Remove them if they are not configured
for current_user in current_team_members:
Expand Down Expand Up @@ -618,11 +626,12 @@ def get_members_without_team(self) -> None:
all_org_members = set(self.org_members + self.current_org_owners)

# Get all members of all teams
all_team_members_lst = []
all_team_members_lst: list[NamedUser] = []
for _, team_attrs in self.current_teams.items():
for member in team_attrs.get("members", {}):
all_team_members_lst.append(member)
all_team_members = set(all_team_members_lst)
# Also add users that have just been added to a team, and unify them
all_team_members: set[NamedUser] = set(all_team_members_lst + self.newly_added_users)

# Find members that are in org_members but not team_members
members_without_team = all_org_members.difference(all_team_members)
Expand Down