github.com/redhat-appstudio/e2e-tests@v0.0.0-20230619105049-9a422b2094d7/pkg/apis/github/client.go (about) 1 package github 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/gofri/go-github-ratelimit/github_ratelimit" 8 "github.com/google/go-github/v44/github" 9 "golang.org/x/oauth2" 10 ) 11 12 type Github struct { 13 client *github.Client 14 organization string 15 } 16 17 func NewGithubClient(token, organization string) (*Github, error) { 18 ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) 19 tc := oauth2.NewClient(context.Background(), ts) 20 // https://docs.github.com/en/rest/guides/best-practices-for-integrators?apiVersion=2022-11-28#dealing-with-secondary-rate-limits 21 rateLimiter, err := github_ratelimit.NewRateLimitWaiterClient(tc.Transport, github_ratelimit.WithSingleSleepLimit(time.Minute, nil)) 22 if err != nil { 23 return &Github{}, err 24 } 25 client := github.NewClient(rateLimiter) 26 githubClient := &Github{ 27 client: client, 28 organization: organization, 29 } 30 31 return githubClient, nil 32 }