github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/pkg/clients/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 const ( 13 HEADS = "heads/%s" 14 ) 15 16 type Github struct { 17 client *github.Client 18 organization string 19 } 20 21 func NewGithubClient(token, organization string) (*Github, error) { 22 ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) 23 tc := oauth2.NewClient(context.Background(), ts) 24 // https://docs.github.com/en/rest/guides/best-practices-for-integrators?apiVersion=2022-11-28#dealing-with-secondary-rate-limits 25 rateLimiter, err := github_ratelimit.NewRateLimitWaiterClient(tc.Transport, github_ratelimit.WithSingleSleepLimit(time.Minute, nil)) 26 if err != nil { 27 return &Github{}, err 28 } 29 client := github.NewClient(rateLimiter) 30 githubClient := &Github{ 31 client: client, 32 organization: organization, 33 } 34 35 return githubClient, nil 36 }