From e1a7dd3ca17667250417817b3dce587082c1e935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Santos?= Date: Thu, 16 Jul 2026 18:40:34 +0100 Subject: [PATCH] perf(teamrec): avoid calling ListMembers inside loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mário Santos --- internal/reconciler/teamrec/rec_members.go | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/internal/reconciler/teamrec/rec_members.go b/internal/reconciler/teamrec/rec_members.go index c5493fd..cc627f2 100644 --- a/internal/reconciler/teamrec/rec_members.go +++ b/internal/reconciler/teamrec/rec_members.go @@ -54,6 +54,19 @@ func (t *GitHubTeamReconciler) reconcileTeamMembers(ctx context.Context) error { memberSuffix = org.Spec.MemberSuffix } + ghMembers, err := githubOrg.Client.ListMembers(ctx, githubOrg.Resource) + if err != nil { + log.Error(err, "failed to get members from GitHub") + return err + } + + orgMembersByName := make(map[string]string, len(ghMembers)) + for _, ghMember := range ghMembers { + if ghMember != nil && ghMember.Login != nil { + orgMembersByName[*ghMember.Login] = *ghMember.Login + } + } + for _, memberRef := range t.Kubernetes.Resource.Spec.Members { memberRef += memberSuffix log := log.WithValues("member", memberRef) @@ -66,21 +79,7 @@ func (t *GitHubTeamReconciler) reconcileTeamMembers(ctx context.Context) error { delete(membersToDelete, memberRef) continue } else { - ghMembers, err := githubOrg.Client.ListMembers(ctx, githubOrg.Resource) - if err != nil { - log.Error(err, "failed to get members from GitHub") - return err - } - - found := false - for _, ghMember := range ghMembers { - if ghMember.Login != nil && *ghMember.Login == memberRef { - found = true - break - } - } - - if found { + if _, found := orgMembersByName[memberRef]; found { if err := githubOrg.Client.AddTeamMember(ctx, githubOrg.Resource, t.Team.GetSlug(), memberRef); err != nil { log.Error(err, "failed to add member to team", "member", memberRef) return err