Skip to content

Commit fa02655

Browse files
carocadpascal-hofmannkfcampbell
authored
fix: use pagination to fetch all team members (#1092)
* fix: use pagination to fetch all team members * chore: typo Co-authored-by: Pascal Hofmann <[email protected]> Co-authored-by: Camilo Roca <[email protected]> Co-authored-by: Pascal Hofmann <[email protected]> Co-authored-by: Keegan Campbell <[email protected]>
1 parent 0f94cc2 commit fa02655

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

github/resource_github_team_members.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,17 +205,52 @@ func resourceGithubTeamMembersRead(d *schema.ResourceData, meta interface{}) err
205205
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
206206
}
207207

208+
etags := make([]string, 0)
208209
// List members & maintainers as list 'all' drops role information
209210
log.Printf("[DEBUG] Reading team members: %s", teamIdString)
210-
members, resp1, err := client.Teams.ListTeamMembersByID(ctx, orgId, teamId, &github.TeamListTeamMembersOptions{Role: "member"})
211-
if err != nil {
212-
return err
211+
memberOptions := github.TeamListTeamMembersOptions{
212+
ListOptions: github.ListOptions{
213+
PerPage: maxPerPage,
214+
},
215+
Role: "member",
216+
}
217+
218+
var members []*github.User
219+
for {
220+
member, resp, err := client.Teams.ListTeamMembersByID(ctx, orgId, teamId, &memberOptions)
221+
if err != nil {
222+
return err
223+
}
224+
225+
etags = append(etags, resp.Header.Get("ETag"))
226+
members = append(members, member...)
227+
if resp.NextPage == 0 {
228+
break
229+
}
230+
memberOptions.Page = resp.NextPage
213231
}
214232

215233
log.Printf("[DEBUG] Reading team maintainers: %s", teamIdString)
216-
maintainers, resp2, err := client.Teams.ListTeamMembersByID(ctx, orgId, teamId, &github.TeamListTeamMembersOptions{Role: "maintainer"})
217-
if err != nil {
218-
return err
234+
maintainerOptions := github.TeamListTeamMembersOptions{
235+
ListOptions: github.ListOptions{
236+
PerPage: maxPerPage,
237+
},
238+
Role: "maintainer",
239+
}
240+
var maintainers []*github.User
241+
for {
242+
maintaner, resp, err := client.Teams.ListTeamMembersByID(ctx, orgId, teamId, &maintainerOptions)
243+
if err != nil {
244+
return err
245+
}
246+
247+
etags = append(etags, resp.Header.Get("ETag"))
248+
maintainers = append(maintainers, maintaner...)
249+
250+
if resp.NextPage == 0 {
251+
break
252+
}
253+
maintainerOptions.Page = resp.NextPage
219254
}
220255

221256
teamMembersAndMaintainers := make([]interface{}, len(members)+len(maintainers))
@@ -238,8 +273,8 @@ func resourceGithubTeamMembersRead(d *schema.ResourceData, meta interface{}) err
238273
return err
239274
}
240275

241-
// Combine etag of both requests
242-
d.Set("etag", buildTwoPartID(resp1.Header.Get("ETag"), resp2.Header.Get("ETag")))
276+
// Combine etag of all requests
277+
d.Set("etag", buildChecksumID(etags))
243278

244279
return nil
245280
}

0 commit comments

Comments
 (0)