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  }