@@ -102,10 +102,7 @@ func (o *orgResourceType) List(
102102
103103 orgs , resp , err := o .client .Organizations .List (ctx , "" , opts )
104104 if err != nil {
105- if isRatelimited (resp ) {
106- return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
107- }
108- return nil , "" , nil , fmt .Errorf ("github-connector: failed to fetch org: %w" , err )
105+ return nil , "" , nil , wrapGitHubError (err , resp , "github-connector: failed to fetch organizations" )
109106 }
110107
111108 nextPage , reqAnnos , err := parseResp (resp )
@@ -129,11 +126,7 @@ func (o *orgResourceType) List(
129126 l .Warn ("insufficient access to list org membership, skipping org" , zap .String ("org" , org .GetLogin ()))
130127 continue
131128 }
132-
133- if isRatelimited (resp ) {
134- return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
135- }
136- return nil , "" , nil , err
129+ return nil , "" , nil , wrapGitHubError (err , resp , "github-connector: failed to get org membership" )
137130 }
138131
139132 // Only sync orgs that we are an admin for
@@ -227,11 +220,7 @@ func (o *orgResourceType) Grants(
227220 if isNotFoundError (resp ) {
228221 return nil , "" , nil , uhttp .WrapErrors (codes .NotFound , fmt .Sprintf ("org: %s not found" , orgName ))
229222 }
230- errMsg := "github-connectorv2: failed to list org members"
231- if isRatelimited (resp ) {
232- return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
233- }
234- return nil , "" , nil , fmt .Errorf ("%s: %w" , errMsg , err )
223+ return nil , "" , nil , wrapGitHubError (err , resp , "github-connector: failed to list org members" )
235224 }
236225
237226 var nextPage string
@@ -294,9 +283,9 @@ func (o *orgResourceType) Grant(ctx context.Context, principal *v2.Resource, en
294283 return nil , err
295284 }
296285
297- user , _ , err := o .client .Users .GetByID (ctx , principalID )
286+ user , resp , err := o .client .Users .GetByID (ctx , principalID )
298287 if err != nil {
299- return nil , fmt . Errorf ( "github-connectorv2 : failed to get user: %w" , err )
288+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to get user" )
300289 }
301290
302291 requestedRole := ""
@@ -309,21 +298,21 @@ func (o *orgResourceType) Grant(ctx context.Context, principal *v2.Resource, en
309298 return nil , fmt .Errorf ("github-connectorv2: invalid entitlement id: %s" , en .Id )
310299 }
311300
312- isMember , _ , err := o .client .Organizations .IsMember (ctx , orgName , user .GetLogin ())
301+ isMember , resp , err := o .client .Organizations .IsMember (ctx , orgName , user .GetLogin ())
313302 if err != nil {
314- return nil , fmt . Errorf ( "github-connectorv2 : failed to get org membership: %w" , err )
303+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to check org membership" )
315304 }
316305
317306 // TODO: check existing invitations. Duplicate invitations aren't allowed, so this will fail with 4xx from github.
318307
319308 // If user isn't a member, invite them to the org with the requested role
320309 if ! isMember {
321- _ , _ , err = o .client .Organizations .CreateOrgInvitation (ctx , orgName , & github.CreateOrgInvitationOptions {
310+ _ , resp , err = o .client .Organizations .CreateOrgInvitation (ctx , orgName , & github.CreateOrgInvitationOptions {
322311 InviteeID : user .ID ,
323312 Role : & requestedRole ,
324313 })
325314 if err != nil {
326- return nil , fmt . Errorf ( "github-connectorv2 : failed to invite user to org: %w" , err )
315+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to invite user to org" )
327316 }
328317 return nil , nil
329318 }
@@ -334,9 +323,9 @@ func (o *orgResourceType) Grant(ctx context.Context, principal *v2.Resource, en
334323 }
335324
336325 // If the user is a member, check to see what role they have
337- membership , _ , err := o .client .Organizations .GetOrgMembership (ctx , user .GetLogin (), orgName )
326+ membership , resp , err := o .client .Organizations .GetOrgMembership (ctx , user .GetLogin (), orgName )
338327 if err != nil {
339- return nil , fmt . Errorf ( "github-connectorv2 : failed to get org membership: %w" , err )
328+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to get org membership" )
340329 }
341330
342331 // Skip if user already has requested role
@@ -346,9 +335,9 @@ func (o *orgResourceType) Grant(ctx context.Context, principal *v2.Resource, en
346335 }
347336
348337 // User is a member but grant is for admin, so make them an admin.
349- _ , _ , err = o .client .Organizations .EditOrgMembership (ctx , user .GetLogin (), orgName , & github.Membership {Role : github .Ptr (orgRoleAdmin )})
338+ _ , resp , err = o .client .Organizations .EditOrgMembership (ctx , user .GetLogin (), orgName , & github.Membership {Role : github .Ptr (orgRoleAdmin )})
350339 if err != nil {
351- return nil , fmt . Errorf ( "github-connectorv2 : failed to make user an admin : %w" , err )
340+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to make user an admin" )
352341 }
353342
354343 return nil , nil
@@ -386,31 +375,31 @@ func (o *orgResourceType) Revoke(ctx context.Context, grant *v2.Grant) (annotati
386375 return nil , err
387376 }
388377
389- user , _ , err := o .client .Users .GetByID (ctx , principalID )
378+ user , resp , err := o .client .Users .GetByID (ctx , principalID )
390379 if err != nil {
391- return nil , fmt . Errorf ( "github-connectorv2 : failed to get user: %w" , err )
380+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to get user" )
392381 }
393382
394- membership , _ , err := o .client .Organizations .GetOrgMembership (ctx , user .GetLogin (), orgName )
383+ membership , resp , err := o .client .Organizations .GetOrgMembership (ctx , user .GetLogin (), orgName )
395384 if err != nil {
396- return nil , fmt . Errorf ( "github-connectorv2 : failed to get org membership: %w" , err )
385+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to get org membership" )
397386 }
398387
399388 if membership .GetState () != "active" {
400389 return nil , fmt .Errorf ("github-connectorv2: user is not an active member of the org" )
401390 }
402391
403392 if en .Id == memberRoleID {
404- _ , err = o .client .Organizations .RemoveOrgMembership (ctx , user .GetLogin (), orgName )
393+ resp , err = o .client .Organizations .RemoveOrgMembership (ctx , user .GetLogin (), orgName )
405394 if err != nil {
406- return nil , fmt . Errorf ( "github-connectorv2 : failed to revoke org membership from user: %w" , err )
395+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to revoke org membership from user" )
407396 }
408397 return nil , nil
409398 }
410399
411- _ , _ , err = o .client .Organizations .EditOrgMembership (ctx , user .GetLogin (), orgName , & github.Membership {Role : github .Ptr (orgRoleMember )})
400+ _ , resp , err = o .client .Organizations .EditOrgMembership (ctx , user .GetLogin (), orgName , & github.Membership {Role : github .Ptr (orgRoleMember )})
412401 if err != nil {
413- return nil , fmt . Errorf ( "github-connectorv2 : failed to revoke org admin from user: %w" , err )
402+ return nil , wrapGitHubError ( err , resp , "github-connector : failed to revoke org admin from user" )
414403 }
415404
416405 return nil , nil
@@ -449,7 +438,7 @@ func (o *orgResourceType) listOrganizationsFromAppInstallations(
449438 for orgName := range o .orgs {
450439 org , resp , err = o .client .Organizations .Get (ctx , orgName )
451440 if err != nil {
452- return nil , "" , nil , fmt . Errorf ( "github-connector: failed to fetch organization: %w" , err )
441+ return nil , "" , nil , wrapGitHubError ( err , resp , "github-connector: failed to fetch organization" )
453442 }
454443 }
455444
0 commit comments