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  }