diff --git a/docs/content/docs/install/metrics.md b/docs/content/docs/install/metrics.md index fb707acac..1761bf7f9 100644 --- a/docs/content/docs/install/metrics.md +++ b/docs/content/docs/install/metrics.md @@ -12,6 +12,15 @@ You can configure these exporters by referring to the [observability configurati | Name | Type | Description | |------------------------------------------------------|---------|--------------------------------------------------------------------| +| `pipelines_as_code_git_provider_api_request_count` | Counter | Number of API requests submitted to git providers | | `pipelines_as_code_pipelinerun_count` | Counter | Number of pipelineruns created by pipelines-as-code | | `pipelines_as_code_pipelinerun_duration_seconds_sum` | Counter | Number of seconds all pipelineruns have taken in pipelines-as-code | | `pipelines_as_code_running_pipelineruns_count` | Gauge | Number of running pipelineruns in pipelines-as-code | + +**Note:** The metric `pipelines_as_code_git_provider_api_request_count` +is emitted by both the Controller and the Watcher, since both services +use Git providers' APIs. When analyzing this metric, you may need to +combine both services' metrics. For example, using PromQL: + +- `sum (pac_controller_pipelines_as_code_git_provider_api_request_count or pac_watcher_pipelines_as_code_git_provider_api_request_count)` +- `sum (rate(pac_controller_pipelines_as_code_git_provider_api_request_count[1m]) or rate(pac_watcher_pipelines_as_code_git_provider_api_request_count[1m]))` diff --git a/pkg/matcher/annotation_matcher_test.go b/pkg/matcher/annotation_matcher_test.go index a1f0c451f..7b465d347 100644 --- a/pkg/matcher/annotation_matcher_test.go +++ b/pkg/matcher/annotation_matcher_test.go @@ -1350,9 +1350,9 @@ func TestMatchPipelinerunAnnotationAndRepositories(t *testing.T) { fakeclient, mux, ghTestServerURL, teardown := ghtesthelper.SetupGH() defer teardown() vcx := &ghprovider.Provider{ - Client: fakeclient, - Token: github.Ptr("None"), + Token: github.Ptr("None"), } + vcx.SetGithubClient(fakeclient) if tt.args.runevent.Request == nil { tt.args.runevent.Request = &info.Request{Header: http.Header{}, Payload: nil} } diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 805422aae..ee621b315 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -30,6 +30,12 @@ var runningPRCount = stats.Float64("pipelines_as_code_running_pipelineruns_count "number of running pipelineruns by pipelines as code", stats.UnitDimensionless) +var gitProviderAPIRequestCount = stats.Int64( + "pipelines_as_code_git_provider_api_request_count", + "number of API requests from pipelines as code to git providers", + stats.UnitDimensionless, +) + // Recorder holds keys for metrics. type Recorder struct { initialized bool @@ -61,36 +67,42 @@ func NewRecorder() (*Recorder, error) { provider, errRegistering := tag.NewKey("provider") if errRegistering != nil { + ErrRegistering = errRegistering return } R.provider = provider eventType, errRegistering := tag.NewKey("event-type") if errRegistering != nil { + ErrRegistering = errRegistering return } R.eventType = eventType namespace, errRegistering := tag.NewKey("namespace") if errRegistering != nil { + ErrRegistering = errRegistering return } R.namespace = namespace repository, errRegistering := tag.NewKey("repository") if errRegistering != nil { + ErrRegistering = errRegistering return } R.repository = repository status, errRegistering := tag.NewKey("status") if errRegistering != nil { + ErrRegistering = errRegistering return } R.status = status reason, errRegistering := tag.NewKey("reason") if errRegistering != nil { + ErrRegistering = errRegistering return } R.reason = reason @@ -116,11 +128,18 @@ func NewRecorder() (*Recorder, error) { Aggregation: view.LastValue(), TagKeys: []tag.Key{R.namespace, R.repository}, } + gitProviderAPIRequestView = &view.View{ + Description: gitProviderAPIRequestCount.Description(), + Measure: gitProviderAPIRequestCount, + Aggregation: view.Count(), + TagKeys: []tag.Key{R.provider, R.eventType, R.namespace, R.repository}, + } ) - view.Unregister(prCountView, prDurationView, runningPRView) - errRegistering = view.Register(prCountView, prDurationView, runningPRView) + view.Unregister(prCountView, prDurationView, runningPRView, gitProviderAPIRequestView) + errRegistering = view.Register(prCountView, prDurationView, runningPRView, gitProviderAPIRequestView) if errRegistering != nil { + ErrRegistering = errRegistering R.initialized = false return } @@ -129,12 +148,19 @@ func NewRecorder() (*Recorder, error) { return R, ErrRegistering } -// Count logs number of times a pipelinerun is ran for a provider. -func (r *Recorder) Count(provider, event, namespace, repository string) error { +func (r Recorder) assertInitialized() error { if !r.initialized { return fmt.Errorf( "ignoring the metrics recording for pipelineruns, failed to initialize the metrics recorder") } + return nil +} + +// Count logs number of times a pipelinerun is ran for a provider. +func (r *Recorder) Count(provider, event, namespace, repository string) error { + if err := r.assertInitialized(); err != nil { + return err + } ctx, err := tag.New( context.Background(), @@ -153,9 +179,8 @@ func (r *Recorder) Count(provider, event, namespace, repository string) error { // CountPRDuration collects duration taken by a pipelinerun in seconds accumulate them in prDurationCount. func (r *Recorder) CountPRDuration(namespace, repository, status, reason string, duration time.Duration) error { - if !r.initialized { - return fmt.Errorf( - "ignoring the metrics recording for pipelineruns, failed to initialize the metrics recorder") + if err := r.assertInitialized(); err != nil { + return err } ctx, err := tag.New( @@ -175,9 +200,8 @@ func (r *Recorder) CountPRDuration(namespace, repository, status, reason string, // RunningPipelineRuns emits the number of running PipelineRuns for a repository and namespace. func (r *Recorder) RunningPipelineRuns(namespace, repository string, runningPRs float64) error { - if !r.initialized { - return fmt.Errorf( - "ignoring the metrics recording for pipelineruns, failed to initialize the metrics recorder") + if err := r.assertInitialized(); err != nil { + return err } ctx, err := tag.New( @@ -266,6 +290,26 @@ func (r *Recorder) ReportRunningPipelineRuns(ctx context.Context, lister listers } } +func (r *Recorder) ReportGitProviderAPIUsage(provider, event, namespace, repository string) error { + if err := r.assertInitialized(); err != nil { + return err + } + + ctx, err := tag.New( + context.Background(), + tag.Insert(r.provider, provider), + tag.Insert(r.eventType, event), + tag.Insert(r.namespace, namespace), + tag.Insert(r.repository, repository), + ) + if err != nil { + return err + } + + metrics.Record(ctx, gitProviderAPIRequestCount.M(1)) + return nil +} + func ResetRecorder() { Once = sync.Once{} R = nil diff --git a/pkg/pipelineascode/match_test.go b/pkg/pipelineascode/match_test.go index 747eeb801..f34f8f5ef 100644 --- a/pkg/pipelineascode/match_test.go +++ b/pkg/pipelineascode/match_test.go @@ -254,10 +254,10 @@ func TestGetPipelineRunsFromRepo(t *testing.T) { ConsoleURL: "https://console.url", } vcx := &ghprovider.Provider{ - Client: fakeclient, Token: github.Ptr("None"), Logger: logger, } + vcx.SetGithubClient(fakeclient) pacInfo := &info.PacOpts{ Settings: settings.Settings{ ApplicationName: "Pipelines as Code CI", diff --git a/pkg/pipelineascode/pipelineascode_test.go b/pkg/pipelineascode/pipelineascode_test.go index b2e124041..322d85dd7 100644 --- a/pkg/pipelineascode/pipelineascode_test.go +++ b/pkg/pipelineascode/pipelineascode_test.go @@ -606,11 +606,11 @@ func TestRun(t *testing.T) { }, } vcx := &ghprovider.Provider{ - Client: fakeclient, Run: cs, Token: github.Ptr("None"), Logger: logger, } + vcx.SetGithubClient(fakeclient) vcx.SetPacInfo(pacInfo) p := NewPacs(&tt.runevent, vcx, cs, pacInfo, k8int, logger, nil) err := p.Run(ctx) diff --git a/pkg/provider/bitbucketcloud/acl.go b/pkg/provider/bitbucketcloud/acl.go index 0653d71b1..f6cdbb676 100644 --- a/pkg/provider/bitbucketcloud/acl.go +++ b/pkg/provider/bitbucketcloud/acl.go @@ -27,7 +27,7 @@ func (v *Provider) IsAllowed(ctx context.Context, event *info.Event) (bool, erro } func (v *Provider) isWorkspaceMember(event *info.Event) (bool, error) { - members, err := v.Client.Workspaces.Members(event.Organization) + members, err := v.Client().Workspaces.Members(event.Organization) if err != nil { return false, err } @@ -83,7 +83,7 @@ func (v *Provider) checkMember(ctx context.Context, event *info.Event) (bool, er } func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, event *info.Event) (bool, error) { - commentsIntf, err := v.Client.Repositories.PullRequests.GetComments(&bitbucket.PullRequestsOptions{ + commentsIntf, err := v.Client().Repositories.PullRequests.GetComments(&bitbucket.PullRequestsOptions{ Owner: event.Organization, RepoSlug: event.Repository, ID: strconv.Itoa(event.PullRequestNumber), diff --git a/pkg/provider/bitbucketcloud/acl_test.go b/pkg/provider/bitbucketcloud/acl_test.go index 03f1fcca1..f6285f135 100644 --- a/pkg/provider/bitbucketcloud/acl_test.go +++ b/pkg/provider/bitbucketcloud/acl_test.go @@ -179,7 +179,7 @@ func TestIsAllowed(t *testing.T) { bbcloudtest.MuxComments(t, mux, tt.event, tt.fields.comments) bbcloudtest.MuxFiles(t, mux, tt.event, tt.fields.filescontents, "") - v := &Provider{Client: bbclient} + v := &Provider{bbClient: bbclient} got, err := v.IsAllowed(ctx, tt.event) if (err != nil) != tt.wantErr { t.Errorf("Provider.IsAllowed() error = %v, wantErr %v", err, tt.wantErr) diff --git a/pkg/provider/bitbucketcloud/bitbucket.go b/pkg/provider/bitbucketcloud/bitbucket.go index 6cee655f1..b9db74c23 100644 --- a/pkg/provider/bitbucketcloud/bitbucket.go +++ b/pkg/provider/bitbucketcloud/bitbucket.go @@ -11,6 +11,7 @@ import ( "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" "github.com/openshift-pipelines/pipelines-as-code/pkg/changedfiles" "github.com/openshift-pipelines/pipelines-as-code/pkg/events" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/triggertype" @@ -22,13 +23,43 @@ import ( var _ provider.Interface = (*Provider)(nil) type Provider struct { - Client *bitbucket.Client + bbClient *bitbucket.Client Logger *zap.SugaredLogger + metrics *metrics.Recorder run *params.Run pacInfo *info.PacOpts Token, APIURL *string Username *string provenance string + repo *v1alpha1.Repository + triggerEvent string +} + +func (v Provider) Client() *bitbucket.Client { + v.recordAPIUsageMetrics() + return v.bbClient +} + +func (v *Provider) recordAPIUsageMetrics() { + if v.metrics == nil { + m, err := metrics.NewRecorder() + if err != nil { + v.Logger.Errorf("Error initializing bitbucketcloud metrics recorder: %v", err) + return + } + v.metrics = m + } + + name := "" + namespace := "" + if v.repo != nil { + name = v.repo.Name + namespace = v.repo.Namespace + } + + if err := v.metrics.ReportGitProviderAPIUsage("bitbucketcloud", v.triggerEvent, namespace, name); err != nil { + v.Logger.Errorf("Error reporting git API usage metrics: %v", err) + } } // CheckPolicyAllowing TODO: Implement ME. @@ -104,11 +135,11 @@ func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusopts Revision: event.SHA, } - if v.Client == nil { + if v.bbClient == nil { return fmt.Errorf("no token has been set, cannot set status") } - _, err := v.Client.Repositories.Commits.CreateCommitStatus(cmo, cso) + _, err := v.Client().Repositories.Commits.CreateCommitStatus(cmo, cso) if err != nil { return err } @@ -121,7 +152,7 @@ func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusopts if statusopts.OriginalPipelineRunName != "" { onPr = "/" + statusopts.OriginalPipelineRunName } - _, err = v.Client.Repositories.PullRequests.AddComment( + _, err = v.Client().Repositories.PullRequests.AddComment( &bitbucket.PullRequestCommentOptions{ Owner: event.Organization, RepoSlug: event.Repository, @@ -161,7 +192,7 @@ func (v *Provider) getDir(event *info.Event, path string) ([]bitbucket.Repositor Path: path, } - repositoryFiles, err := v.Client.Repositories.Repository.ListFiles(repoFileOpts) + repositoryFiles, err := v.Client().Repositories.Repository.ListFiles(repoFileOpts) if err != nil { return nil, err } @@ -176,17 +207,19 @@ func (v *Provider) GetFileInsideRepo(_ context.Context, event *info.Event, path, return v.getBlob(event, revision, path) } -func (v *Provider) SetClient(_ context.Context, run *params.Run, event *info.Event, _ *v1alpha1.Repository, _ *events.EventEmitter) error { +func (v *Provider) SetClient(_ context.Context, run *params.Run, event *info.Event, repo *v1alpha1.Repository, _ *events.EventEmitter) error { if event.Provider.Token == "" { return fmt.Errorf("no git_provider.secret has been set in the repo crd") } if event.Provider.User == "" { return fmt.Errorf("no git_provider.user has been in repo crd") } - v.Client = bitbucket.NewBasicAuth(event.Provider.User, event.Provider.Token) + v.bbClient = bitbucket.NewBasicAuth(event.Provider.User, event.Provider.Token) v.Token = &event.Provider.Token v.Username = &event.Provider.User v.run = run + v.repo = repo + v.triggerEvent = event.EventType return nil } @@ -195,7 +228,7 @@ func (v *Provider) GetCommitInfo(_ context.Context, event *info.Event) error { if branchortag == "" { branchortag = event.HeadBranch } - response, err := v.Client.Repositories.Commits.GetCommits(&bitbucket.CommitsOptions{ + response, err := v.Client().Repositories.Commits.GetCommits(&bitbucket.CommitsOptions{ Owner: event.Organization, RepoSlug: event.Repository, Branchortag: branchortag, @@ -226,7 +259,7 @@ func (v *Provider) GetCommitInfo(_ context.Context, event *info.Event) error { event.SHA = commitinfo.Hash // now to get the default branch from repository.Get - repo, err := v.Client.Repositories.Repository.Get(&bitbucket.RepositoryOptions{ + repo, err := v.Client().Repositories.Repository.Get(&bitbucket.RepositoryOptions{ Owner: event.Organization, RepoSlug: event.Repository, }) @@ -278,7 +311,7 @@ func (v *Provider) concatAllYamlFiles(objects []bitbucket.RepositoryFile, event } func (v *Provider) getBlob(runevent *info.Event, ref, path string) (string, error) { - blob, err := v.Client.Repositories.Repository.GetFileBlob(&bitbucket.RepositoryBlobOptions{ + blob, err := v.Client().Repositories.Repository.GetFileBlob(&bitbucket.RepositoryBlobOptions{ Owner: runevent.Organization, RepoSlug: runevent.Repository, Ref: ref, diff --git a/pkg/provider/bitbucketcloud/bitbucket_test.go b/pkg/provider/bitbucketcloud/bitbucket_test.go index 98c4584df..0e0ccafa5 100644 --- a/pkg/provider/bitbucketcloud/bitbucket_test.go +++ b/pkg/provider/bitbucketcloud/bitbucket_test.go @@ -75,7 +75,7 @@ func TestGetTektonDir(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) bbclient, mux, tearDown := bbcloudtest.SetupBBCloudClient(t) defer tearDown() - v := &Provider{Logger: fakelogger, Client: bbclient} + v := &Provider{Logger: fakelogger, bbClient: bbclient} bbcloudtest.MuxDirContent(t, mux, tt.event, tt.testDirPath, tt.provenance) content, err := v.GetTektonDir(ctx, tt.event, ".tekton", tt.provenance) if tt.wantErr != "" { @@ -202,7 +202,7 @@ func TestGetCommitInfo(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) bbclient, mux, tearDown := bbcloudtest.SetupBBCloudClient(t) defer tearDown() - v := &Provider{Client: bbclient} + v := &Provider{bbClient: bbclient} bbcloudtest.MuxCommits(t, mux, tt.event, []types.Commit{ tt.commitinfo, }) @@ -295,8 +295,8 @@ func TestCreateStatus(t *testing.T) { bbclient, mux, tearDown := bbcloudtest.SetupBBCloudClient(t) defer tearDown() v := &Provider{ - Client: bbclient, - run: params.New(), + bbClient: bbclient, + run: params.New(), pacInfo: &info.PacOpts{ Settings: settings.Settings{ ApplicationName: settings.PACApplicationNameDefaultValue, diff --git a/pkg/provider/bitbucketdatacenter/acl.go b/pkg/provider/bitbucketdatacenter/acl.go index 80fc676e2..2094ee3ed 100644 --- a/pkg/provider/bitbucketdatacenter/acl.go +++ b/pkg/provider/bitbucketdatacenter/acl.go @@ -53,7 +53,7 @@ func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, e if nextPage > 0 { localVarOptionals["start"] = int(nextPage) } - return v.Client.DefaultApi.GetActivities(v.projectKey, event.Repository, v.pullRequestNumber, localVarOptionals) + return v.Client().DefaultApi.GetActivities(v.projectKey, event.Repository, v.pullRequestNumber, localVarOptionals) }) if err != nil { return false, err @@ -120,7 +120,7 @@ func (v *Provider) checkMemberShip(ctx context.Context, event *info.Event) (bool if nextPage > 0 { localVarOptionals["start"] = int(nextPage) } - return v.Client.DefaultApi.GetUsersWithAnyPermission_23(v.projectKey, localVarOptionals) + return v.Client().DefaultApi.GetUsersWithAnyPermission_23(v.projectKey, localVarOptionals) }) if err != nil { return false, err @@ -139,7 +139,7 @@ func (v *Provider) checkMemberShip(ctx context.Context, event *info.Event) (bool if nextPage > 0 { localVarOptionals["start"] = int(nextPage) } - return v.Client.DefaultApi.GetUsersWithAnyPermission_24(v.projectKey, event.Repository, localVarOptionals) + return v.Client().DefaultApi.GetUsersWithAnyPermission_24(v.projectKey, event.Repository, localVarOptionals) }) if err != nil { return false, err diff --git a/pkg/provider/bitbucketdatacenter/acl_test.go b/pkg/provider/bitbucketdatacenter/acl_test.go index 2196b1af7..1fb66793d 100644 --- a/pkg/provider/bitbucketdatacenter/acl_test.go +++ b/pkg/provider/bitbucketdatacenter/acl_test.go @@ -212,8 +212,8 @@ func TestIsAllowed(t *testing.T) { v := &Provider{ baseURL: tURL, - Client: bbclient, - ScmClient: scmClient, + bbClient: bbclient, + scmClient: scmClient, defaultBranchLatestCommit: tt.fields.defaultBranchLatestCommit, pullRequestNumber: tt.fields.pullRequestNumber, projectKey: tt.event.Organization, diff --git a/pkg/provider/bitbucketdatacenter/bitbucketdatacenter.go b/pkg/provider/bitbucketdatacenter/bitbucketdatacenter.go index 6a693d951..02a865fb3 100644 --- a/pkg/provider/bitbucketdatacenter/bitbucketdatacenter.go +++ b/pkg/provider/bitbucketdatacenter/bitbucketdatacenter.go @@ -16,6 +16,7 @@ import ( "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" "github.com/openshift-pipelines/pipelines-as-code/pkg/changedfiles" "github.com/openshift-pipelines/pipelines-as-code/pkg/events" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/triggertype" @@ -31,9 +32,10 @@ const apiResponseLimit = 100 var _ provider.Interface = (*Provider)(nil) type Provider struct { - Client *bbv1.APIClient // temporarily keeping it after the refactor finishes, will be removed - ScmClient *scm.Client + bbClient *bbv1.APIClient // temporarily keeping it after the refactor finishes, will be removed + scmClient *scm.Client Logger *zap.SugaredLogger + metrics *metrics.Recorder run *params.Run pacInfo *info.PacOpts baseURL string @@ -42,6 +44,48 @@ type Provider struct { apiURL string provenance string projectKey string + repo *v1alpha1.Repository + triggerEvent string +} + +func (v Provider) Client() *bbv1.APIClient { + v.recordAPIUsageMetrics() + return v.bbClient +} + +func (v *Provider) SetBitBucketClient(client *bbv1.APIClient) { + v.bbClient = client +} + +func (v Provider) ScmClient() *scm.Client { + v.recordAPIUsageMetrics() + return v.scmClient +} + +func (v *Provider) SetScmClient(client *scm.Client) { + v.scmClient = client +} + +func (v *Provider) recordAPIUsageMetrics() { + if v.metrics == nil { + m, err := metrics.NewRecorder() + if err != nil { + v.Logger.Errorf("Error initializing bitbucketserver metrics recorder: %v", err) + return + } + v.metrics = m + } + + name := "" + namespace := "" + if v.repo != nil { + name = v.repo.Name + namespace = v.repo.Namespace + } + + if err := v.metrics.ReportGitProviderAPIUsage("bitbucketserver", v.triggerEvent, namespace, name); err != nil { + v.Logger.Errorf("Error reporting git API usage metrics: %v", err) + } } func (v *Provider) SetPacInfo(pacInfo *info.PacOpts) { @@ -99,7 +143,7 @@ func (v *Provider) CreateStatus(ctx context.Context, event *info.Event, statusOp if statusOpts.DetailsURL != "" { detailsURL = statusOpts.DetailsURL } - if v.ScmClient == nil { + if v.scmClient == nil { return fmt.Errorf("no token has been set, cannot set status") } @@ -119,7 +163,7 @@ func (v *Provider) CreateStatus(ctx context.Context, event *info.Event, statusOp Desc: statusOpts.Title, Link: detailsURL, } - _, _, err := v.ScmClient.Repositories.CreateStatus(ctx, OrgAndRepo, event.SHA, opts) + _, _, err := v.ScmClient().Repositories.CreateStatus(ctx, OrgAndRepo, event.SHA, opts) if err != nil { return err } @@ -135,7 +179,7 @@ func (v *Provider) CreateStatus(ctx context.Context, event *info.Event, statusOp input := &scm.CommentInput{ Body: bbComment, } - _, _, err := v.ScmClient.PullRequests.CreateComment(ctx, OrgAndRepo, event.PullRequestNumber, input) + _, _, err := v.ScmClient().PullRequests.CreateComment(ctx, OrgAndRepo, event.PullRequestNumber, input) if err != nil { return err } @@ -185,7 +229,7 @@ func (v *Provider) concatAllYamlFiles(ctx context.Context, objects []string, sha func (v *Provider) getRaw(ctx context.Context, runevent *info.Event, revision, path string) (string, error) { repo := fmt.Sprintf("%s/%s", runevent.Organization, runevent.Repository) - content, _, err := v.ScmClient.Contents.Find(ctx, repo, path, revision) + content, _, err := v.ScmClient().Contents.Find(ctx, repo, path, revision) if err != nil { return "", fmt.Errorf("cannot find %s inside the %s repository: %w", path, runevent.Repository, err) } @@ -206,7 +250,7 @@ func (v *Provider) GetTektonDir(ctx context.Context, event *info.Event, path, pr var fileEntries []*scm.FileEntry opts := &scm.ListOptions{Page: 1, Size: apiResponseLimit} for { - entries, _, err := v.ScmClient.Contents.List(ctx, orgAndRepo, path, at, opts) + entries, _, err := v.ScmClient().Contents.List(ctx, orgAndRepo, path, at, opts) if err != nil { return "", fmt.Errorf("cannot list content of %s directory: %w", path, err) } @@ -257,7 +301,7 @@ func removeLastSegment(urlStr string) string { return u.String() } -func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.Event, _ *v1alpha1.Repository, _ *events.EventEmitter) error { +func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.Event, repo *v1alpha1.Repository, _ *events.EventEmitter) error { if event.Provider.User == "" { return fmt.Errorf("no spec.git_provider.user has been set in the repo crd") } @@ -281,11 +325,11 @@ func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.E ctx = context.WithValue(ctx, bbv1.ContextBasicAuth, basicAuth) cfg := bbv1.NewConfiguration(event.Provider.URL) - if v.Client == nil { - v.Client = bbv1.NewAPIClient(ctx, cfg) + if v.bbClient == nil { + v.bbClient = bbv1.NewAPIClient(ctx, cfg) } - if v.ScmClient == nil { + if v.scmClient == nil { client, err := stash.New(removeLastSegment(event.Provider.URL)) // remove `/rest` from url if err != nil { return err @@ -299,10 +343,12 @@ func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.E ), }, } - v.ScmClient = client + v.scmClient = client } v.run = run - _, resp, err := v.ScmClient.Users.FindLogin(ctx, event.Provider.User) + v.repo = repo + v.triggerEvent = event.EventType + _, resp, err := v.ScmClient().Users.FindLogin(ctx, event.Provider.User) if resp != nil && resp.Status == http.StatusUnauthorized { return fmt.Errorf("cannot get user %s with token: %w", event.Provider.User, err) } @@ -315,14 +361,14 @@ func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.E func (v *Provider) GetCommitInfo(_ context.Context, event *info.Event) error { OrgAndRepo := fmt.Sprintf("%s/%s", event.Organization, event.Repository) - commit, _, err := v.ScmClient.Git.FindCommit(context.Background(), OrgAndRepo, event.SHA) + commit, _, err := v.ScmClient().Git.FindCommit(context.Background(), OrgAndRepo, event.SHA) if err != nil { return err } event.SHATitle = sanitizeTitle(commit.Message) event.SHAURL = fmt.Sprintf("%s/projects/%s/repos/%s/commits/%s", v.baseURL, v.projectKey, event.Repository, event.SHA) - ref, _, err := v.ScmClient.Git.GetDefaultBranch(context.Background(), OrgAndRepo) + ref, _, err := v.ScmClient().Git.GetDefaultBranch(context.Background(), OrgAndRepo) if err != nil { return err } @@ -345,7 +391,7 @@ func (v *Provider) GetFiles(ctx context.Context, runevent *info.Event) (changedf opts := &scm.ListOptions{Page: 1, Size: apiResponseLimit} changedFiles := changedfiles.ChangedFiles{} for { - changes, _, err := v.ScmClient.PullRequests.ListChanges(ctx, OrgAndRepo, runevent.PullRequestNumber, opts) + changes, _, err := v.ScmClient().PullRequests.ListChanges(ctx, OrgAndRepo, runevent.PullRequestNumber, opts) if err != nil { return changedfiles.ChangedFiles{}, fmt.Errorf("failed to list changes for pull request: %w", err) } @@ -383,7 +429,7 @@ func (v *Provider) GetFiles(ctx context.Context, runevent *info.Event) (changedf opts := &scm.ListOptions{Page: 1, Size: apiResponseLimit} changedFiles := changedfiles.ChangedFiles{} for { - changes, _, err := v.ScmClient.Git.ListChanges(ctx, OrgAndRepo, runevent.SHA, opts) + changes, _, err := v.ScmClient().Git.ListChanges(ctx, OrgAndRepo, runevent.SHA, opts) if err != nil { return changedfiles.ChangedFiles{}, fmt.Errorf("failed to list changes for commit %s: %w", runevent.SHA, err) } diff --git a/pkg/provider/bitbucketdatacenter/bitbucketdatacenter_test.go b/pkg/provider/bitbucketdatacenter/bitbucketdatacenter_test.go index 9da4db126..b97c7cc93 100644 --- a/pkg/provider/bitbucketdatacenter/bitbucketdatacenter_test.go +++ b/pkg/provider/bitbucketdatacenter/bitbucketdatacenter_test.go @@ -85,7 +85,7 @@ func TestGetTektonDir(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) _, client, mux, tearDown, tURL := bbtest.SetupBBDataCenterClient(ctx) defer tearDown() - v := &Provider{Logger: logger, baseURL: tURL, ScmClient: client, projectKey: tt.event.Organization} + v := &Provider{Logger: logger, baseURL: tURL, scmClient: client, projectKey: tt.event.Organization} bbtest.MuxDirContent(t, mux, tt.event, tt.testDirPath, tt.path, tt.wantDirAPIErr, tt.wantFilesAPIErr) content, err := v.GetTektonDir(ctx, tt.event, tt.path, "") if tt.wantErr != "" { @@ -203,7 +203,7 @@ func TestCreateStatus(t *testing.T) { event.Provider.Token = "token" v := &Provider{ baseURL: tURL, - ScmClient: client, + scmClient: client, pullRequestNumber: pullRequestNumber, projectKey: event.Organization, run: ¶ms.Run{}, @@ -268,7 +268,7 @@ func TestGetFileInsideRepo(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) _, client, mux, tearDown, tURL := bbtest.SetupBBDataCenterClient(ctx) defer tearDown() - v := &Provider{ScmClient: client, baseURL: tURL, defaultBranchLatestCommit: "1234", projectKey: tt.event.Organization} + v := &Provider{scmClient: client, baseURL: tURL, defaultBranchLatestCommit: "1234", projectKey: tt.event.Organization} bbtest.MuxFiles(t, mux, tt.event, tt.targetbranch, filepath.Dir(tt.path), tt.filescontents, tt.wantErr != "") fc, err := v.GetFileInsideRepo(ctx, tt.event, tt.path, tt.targetbranch) if tt.wantErr != "" { @@ -368,7 +368,7 @@ func TestSetClient(t *testing.T) { if tt.muxUser != nil { mux.HandleFunc("/users/foo", tt.muxUser) } - v := &Provider{ScmClient: client, baseURL: tURL} + v := &Provider{scmClient: client, baseURL: tURL} err := v.SetClient(ctx, nil, tt.opts, nil, nil) if tt.wantErrSubstr != "" { assert.ErrorContains(t, err, tt.wantErrSubstr) @@ -410,7 +410,7 @@ func TestGetCommitInfo(t *testing.T) { bbtest.MuxCommitInfo(t, mux, tt.event, tt.commit) bbtest.MuxDefaultBranch(t, mux, tt.event, tt.defaultBranch, tt.latestCommit) defer tearDown() - v := &Provider{ScmClient: scmClient, baseURL: tURL, projectKey: tt.event.Organization} + v := &Provider{scmClient: scmClient, baseURL: tURL, projectKey: tt.event.Organization} err := v.GetCommitInfo(ctx, tt.event) assert.NilError(t, err) assert.Equal(t, tt.defaultBranch, tt.event.DefaultBranch) @@ -710,7 +710,7 @@ func TestGetFiles(t *testing.T) { } }) } - v := &Provider{ScmClient: client, baseURL: tURL} + v := &Provider{scmClient: client, baseURL: tURL} changedFiles, err := v.GetFiles(ctx, tt.event) if tt.wantError { assert.Equal(t, err.Error(), tt.errMsg) diff --git a/pkg/provider/gitea/acl.go b/pkg/provider/gitea/acl.go index 221be0a34..c7b04ea52 100644 --- a/pkg/provider/gitea/acl.go +++ b/pkg/provider/gitea/acl.go @@ -18,7 +18,7 @@ func (v *Provider) CheckPolicyAllowing(_ context.Context, event *info.Event, all return true, "" } // TODO: caching - orgTeams, resp, err := v.Client.ListOrgTeams(event.Organization, gitea.ListTeamsOptions{}) + orgTeams, resp, err := v.Client().ListOrgTeams(event.Organization, gitea.ListTeamsOptions{}) if resp.StatusCode == http.StatusNotFound { // we explicitly disallow the policy when there is no team on org return false, fmt.Sprintf("no teams on org %s", event.Organization) @@ -30,7 +30,7 @@ func (v *Provider) CheckPolicyAllowing(_ context.Context, event *info.Event, all for _, allowedTeam := range allowedTeams { for _, orgTeam := range orgTeams { if orgTeam.Name == allowedTeam { - teamMember, _, err := v.Client.GetTeamMember(orgTeam.ID, event.Sender) + teamMember, _, err := v.Client().GetTeamMember(orgTeam.ID, event.Sender) if err != nil { v.Logger.Infof("error while getting team member: %s, error: %s", event.Sender, err.Error()) continue @@ -144,7 +144,7 @@ func (v *Provider) aclAllowedOkToTestFromAnOwner(ctx context.Context, event *inf // aclAllowedOkToTestCurrentEvent only check if this is issue comment event // have /ok-to-test regex and sender is allowed. func (v *Provider) aclAllowedOkToTestCurrentComment(ctx context.Context, revent *info.Event, id int64) (bool, error) { - comment, _, err := v.Client.GetIssueComment(revent.Organization, revent.Repository, id) + comment, _, err := v.Client().GetIssueComment(revent.Organization, revent.Repository, id) if err != nil { return false, err } @@ -204,7 +204,7 @@ func (v *Provider) IsAllowedOwnersFile(ctx context.Context, rev *info.Event) (bo } func (v *Provider) checkSenderRepoMembership(_ context.Context, runevent *info.Event) (bool, error) { - ret, _, err := v.Client.IsCollaborator(runevent.Organization, runevent.Repository, runevent.Sender) + ret, _, err := v.Client().IsCollaborator(runevent.Organization, runevent.Repository, runevent.Sender) return ret, err } @@ -227,7 +227,7 @@ func (v *Provider) GetStringPullRequestComment(_ context.Context, runevent *info return nil, err } - comments, _, err := v.Client.ListIssueComments(runevent.Organization, runevent.Repository, int64(prNumber), gitea.ListIssueCommentOptions{}) + comments, _, err := v.Client().ListIssueComments(runevent.Organization, runevent.Repository, int64(prNumber), gitea.ListIssueCommentOptions{}) if err != nil { return nil, err } diff --git a/pkg/provider/gitea/acl_test.go b/pkg/provider/gitea/acl_test.go index 2e52fa302..bc6fa87cc 100644 --- a/pkg/provider/gitea/acl_test.go +++ b/pkg/provider/gitea/acl_test.go @@ -86,9 +86,9 @@ func TestCheckPolicyAllowing(t *testing.T) { }, } gprovider := Provider{ - Client: fakeclient, - repo: repo, - Logger: logger, + giteaClient: fakeclient, + repo: repo, + Logger: logger, } gotAllowed, gotReason := gprovider.CheckPolicyAllowing(ctx, event, tt.allowedTeams) @@ -285,9 +285,9 @@ func TestOkToTestComment(t *testing.T) { }) ctx, _ := rtesting.SetupFakeContext(t) gprovider := Provider{ - Client: fakeclient, - Logger: logger, - run: ¶ms.Run{}, + giteaClient: fakeclient, + Logger: logger, + run: ¶ms.Run{}, pacInfo: &info.PacOpts{ Settings: settings.Settings{ RememberOKToTest: tt.rememberOkToTest, @@ -361,8 +361,8 @@ func TestAclCheckAll(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) gprovider := Provider{ - Client: fakeclient, - Logger: logger, + giteaClient: fakeclient, + Logger: logger, } if tt.allowedRules.collabo { diff --git a/pkg/provider/gitea/gitea.go b/pkg/provider/gitea/gitea.go index 8030de9ef..174acb62e 100644 --- a/pkg/provider/gitea/gitea.go +++ b/pkg/provider/gitea/gitea.go @@ -14,6 +14,7 @@ import ( "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" "github.com/openshift-pipelines/pipelines-as-code/pkg/changedfiles" "github.com/openshift-pipelines/pipelines-as-code/pkg/events" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/opscomments" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" @@ -43,8 +44,9 @@ const ( var _ provider.Interface = (*Provider)(nil) type Provider struct { - Client *gitea.Client + giteaClient *gitea.Client Logger *zap.SugaredLogger + metrics *metrics.Recorder pacInfo *info.PacOpts Token *string giteaInstanceURL string @@ -53,6 +55,38 @@ type Provider struct { repo *v1alpha1.Repository eventEmitter *events.EventEmitter run *params.Run + triggerEvent string +} + +func (v Provider) Client() *gitea.Client { + v.recordAPIUsageMetrics() + return v.giteaClient +} + +func (v *Provider) SetGiteaClient(client *gitea.Client) { + v.giteaClient = client +} + +func (v *Provider) recordAPIUsageMetrics() { + if v.metrics == nil { + m, err := metrics.NewRecorder() + if err != nil { + v.Logger.Errorf("Error initializing gitea metrics recorder: %v", err) + return + } + v.metrics = m + } + + name := "" + namespace := "" + if v.repo != nil { + name = v.repo.Name + namespace = v.repo.Namespace + } + + if err := v.metrics.ReportGitProviderAPIUsage(v.giteaInstanceURL, v.triggerEvent, namespace, name); err != nil { + v.Logger.Errorf("Error reporting git API usage metrics: %v", err) + } } func (v *Provider) SetPacInfo(pacInfo *info.PacOpts) { @@ -96,12 +130,12 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. apiURL := runevent.Provider.URL // password is not exposed to CRD, it's only used from the e2e tests if v.Password != "" && runevent.Provider.User != "" { - v.Client, err = gitea.NewClient(apiURL, gitea.SetBasicAuth(runevent.Provider.User, v.Password)) + v.giteaClient, err = gitea.NewClient(apiURL, gitea.SetBasicAuth(runevent.Provider.User, v.Password)) } else { if runevent.Provider.Token == "" { return fmt.Errorf("no git_provider.secret has been set in the repo crd") } - v.Client, err = gitea.NewClient(apiURL, gitea.SetToken(runevent.Provider.Token)) + v.giteaClient, err = gitea.NewClient(apiURL, gitea.SetToken(runevent.Provider.Token)) } if err != nil { return err @@ -110,11 +144,12 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. v.eventEmitter = emitter v.repo = repo v.run = run + v.triggerEvent = runevent.EventType return nil } func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusOpts provider.StatusOpts) error { - if v.Client == nil { + if v.giteaClient == nil { return fmt.Errorf("cannot set status on gitea no token or url set") } switch statusOpts.Conclusion { @@ -171,7 +206,7 @@ func (v *Provider) createStatusCommit(event *info.Event, pacopts *info.PacOpts, Description: status.Title, Context: provider.GetCheckName(status, pacopts), } - if _, _, err := v.Client.CreateStatus(event.Organization, event.Repository, event.SHA, gStatus); err != nil { + if _, _, err := v.Client().CreateStatus(event.Organization, event.Repository, event.SHA, gStatus); err != nil { return err } @@ -181,7 +216,7 @@ func (v *Provider) createStatusCommit(event *info.Event, pacopts *info.PacOpts, } if status.Text != "" && (eventType == triggertype.PullRequest || event.TriggerTarget == triggertype.PullRequest) { status.Text = strings.ReplaceAll(strings.TrimSpace(status.Text), "
", "\n") - _, _, err := v.Client.CreateIssueComment(event.Organization, event.Repository, + _, _, err := v.Client().CreateIssueComment(event.Organization, event.Repository, int64(event.PullRequestNumber), gitea.CreateIssueCommentOption{ Body: fmt.Sprintf("%s\n%s", status.Summary, status.Text), }, @@ -204,7 +239,7 @@ func (v *Provider) GetTektonDir(_ context.Context, event *info.Event, path, prov } tektonDirSha := "" - rootobjects, _, err := v.Client.GetTrees(event.Organization, event.Repository, revision, false) + rootobjects, _, err := v.Client().GetTrees(event.Organization, event.Repository, revision, false) if err != nil { return "", err } @@ -223,7 +258,7 @@ func (v *Provider) GetTektonDir(_ context.Context, event *info.Event, path, prov } // Get all files in the .tekton directory recursively // TODO: figure out if there is a object limit we need to handle here - tektonDirObjects, _, err := v.Client.GetTrees(event.Organization, event.Repository, tektonDirSha, true) + tektonDirObjects, _, err := v.Client().GetTrees(event.Organization, event.Repository, tektonDirSha, true) if err != nil { return "", err } @@ -255,7 +290,7 @@ func (v *Provider) concatAllYamlFiles(objects []gitea.GitEntry, event *info.Even } func (v *Provider) getObject(sha string, event *info.Event) ([]byte, error) { - blob, _, err := v.Client.GetBlob(event.Organization, event.Repository, sha) + blob, _, err := v.Client().GetBlob(event.Organization, event.Repository, sha) if err != nil { return nil, err } @@ -272,7 +307,7 @@ func (v *Provider) GetFileInsideRepo(_ context.Context, runevent *info.Event, pa ref = runevent.BaseBranch } - content, _, err := v.Client.GetContents(runevent.Organization, runevent.Repository, ref, path) + content, _, err := v.Client().GetContents(runevent.Organization, runevent.Repository, ref, path) if err != nil { return "", err } @@ -285,20 +320,20 @@ func (v *Provider) GetFileInsideRepo(_ context.Context, runevent *info.Event, pa } func (v *Provider) GetCommitInfo(_ context.Context, runevent *info.Event) error { - if v.Client == nil { + if v.giteaClient == nil { return fmt.Errorf("no gitea client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } sha := runevent.SHA if sha == "" && runevent.HeadBranch != "" { - branchinfo, _, err := v.Client.GetRepoBranch(runevent.Organization, runevent.Repository, runevent.HeadBranch) + branchinfo, _, err := v.Client().GetRepoBranch(runevent.Organization, runevent.Repository, runevent.HeadBranch) if err != nil { return err } sha = branchinfo.Commit.ID } else if sha == "" && runevent.PullRequestNumber != 0 { - pr, _, err := v.Client.GetPullRequest(runevent.Organization, runevent.Repository, int64(runevent.PullRequestNumber)) + pr, _, err := v.Client().GetPullRequest(runevent.Organization, runevent.Repository, int64(runevent.PullRequestNumber)) if err != nil { return err } @@ -307,7 +342,7 @@ func (v *Provider) GetCommitInfo(_ context.Context, runevent *info.Event) error runevent.BaseBranch = pr.Base.Ref sha = pr.Head.Sha } - commit, _, err := v.Client.GetSingleCommit(runevent.Organization, runevent.Repository, sha) + commit, _, err := v.Client().GetSingleCommit(runevent.Organization, runevent.Repository, sha) if err != nil { return err } @@ -345,7 +380,7 @@ func (v *Provider) GetFiles(_ context.Context, runevent *info.Event) (changedfil opt := gitea.ListPullRequestFilesOptions{ListOptions: gitea.ListOptions{Page: 1, PageSize: 50}} shouldGetNextPage := false for { - prChangedFiles, resp, err := v.Client.ListPullRequestFiles(runevent.Organization, runevent.Repository, int64(runevent.PullRequestNumber), opt) + prChangedFiles, resp, err := v.Client().ListPullRequestFiles(runevent.Organization, runevent.Repository, int64(runevent.PullRequestNumber), opt) if err != nil { return changedfiles.ChangedFiles{}, err } diff --git a/pkg/provider/gitea/gitea_test.go b/pkg/provider/gitea/gitea_test.go index 5e0a934d0..d48f772ee 100644 --- a/pkg/provider/gitea/gitea_test.go +++ b/pkg/provider/gitea/gitea_test.go @@ -139,8 +139,8 @@ func TestProvider_CreateStatus(t *testing.T) { defer teardown() run := params.New() p := &Provider{ - Client: fakeclient, // Set this to a valid client for the tests where wantErr is false - run: run, + giteaClient: fakeclient, // Set this to a valid client for the tests where wantErr is false + run: run, pacInfo: &info.PacOpts{ Settings: settings.Settings{ ApplicationName: settings.PACApplicationNameDefaultValue, @@ -247,9 +247,9 @@ func TestProvider_GetFiles(t *testing.T) { Settings: &v1alpha1.Settings{}, }} gprovider := Provider{ - Client: fakeclient, - repo: repo, - Logger: logger, + giteaClient: fakeclient, + repo: repo, + Logger: logger, } got, err := gprovider.GetFiles(ctx, tt.args.runevent) @@ -464,7 +464,7 @@ func TestProvider_CreateStatusCommit(t *testing.T) { }) v := &Provider{ - Client: fakeclient, + giteaClient: fakeclient, } if err := v.createStatusCommit(tt.args.event, tt.args.pacopts, tt.args.status); (err != nil) != tt.wantErr { @@ -503,8 +503,8 @@ func TestGetTektonDir(t *testing.T) { fakeclient, mux, teardown := tgitea.Setup(t) defer teardown() gvcs := Provider{ - Client: fakeclient, - Logger: fakelogger, + giteaClient: fakeclient, + Logger: fakelogger, } if tt.provenance == "default_branch" { tt.event.SHA = tt.event.DefaultBranch diff --git a/pkg/provider/github/acl.go b/pkg/provider/github/acl.go index 7dc9e093c..edcf5b006 100644 --- a/pkg/provider/github/acl.go +++ b/pkg/provider/github/acl.go @@ -20,7 +20,7 @@ func (v *Provider) CheckPolicyAllowing(ctx context.Context, event *info.Event, a // TODO: caching opt := github.ListOptions{PerPage: v.PaginedNumber} for { - members, resp, err := v.Client.Teams.ListTeamMembersBySlug(ctx, event.Organization, team, &github.TeamListTeamMembersOptions{ListOptions: opt}) + members, resp, err := v.Client().Teams.ListTeamMembersBySlug(ctx, event.Organization, team, &github.TeamListTeamMembersOptions{ListOptions: opt}) if resp.StatusCode == http.StatusNotFound { // we explicitly disallow the policy when the team is not found // maybe we should ignore it instead? i'd rather keep this explicit @@ -169,7 +169,7 @@ func (v *Provider) aclAllowedOkToTestFromAnOwner(ctx context.Context, event *inf // aclAllowedOkToTestCurrentEvent only check if this is issue comment event // have /ok-to-test regex and sender is allowed. func (v *Provider) aclAllowedOkToTestCurrentComment(ctx context.Context, revent *info.Event, id int64) (bool, error) { - comment, _, err := v.Client.Issues.GetComment(ctx, revent.Organization, revent.Repository, id) + comment, _, err := v.Client().Issues.GetComment(ctx, revent.Organization, revent.Repository, id) if err != nil { return false, err } @@ -235,7 +235,7 @@ func (v *Provider) aclCheckAll(ctx context.Context, rev *info.Event) (bool, erro // // ex: dependabot, *[bot] etc... func (v *Provider) checkPullRequestForSameURL(ctx context.Context, runevent *info.Event) (bool, error) { - pr, resp, err := v.Client.PullRequests.Get(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber) + pr, resp, err := v.Client().PullRequests.Get(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber) if err != nil { return false, err } @@ -258,7 +258,7 @@ func (v *Provider) checkSenderOrgMembership(ctx context.Context, runevent *info. } for { - users, resp, err := v.Client.Organizations.ListMembers(ctx, runevent.Organization, opt) + users, resp, err := v.Client().Organizations.ListMembers(ctx, runevent.Organization, opt) // If we are 404 it means we are checking a repo owner and not a org so let's bail out with grace if resp != nil && resp.StatusCode == http.StatusNotFound { return false, nil @@ -282,7 +282,7 @@ func (v *Provider) checkSenderOrgMembership(ctx context.Context, runevent *info. // checkSenderRepoMembership check if user is allowed to run CI. func (v *Provider) checkSenderRepoMembership(ctx context.Context, runevent *info.Event) (bool, error) { - isCollab, _, err := v.Client.Repositories.IsCollaborator(ctx, + isCollab, _, err := v.Client().Repositories.IsCollaborator(ctx, runevent.Organization, runevent.Repository, runevent.Sender) @@ -313,7 +313,7 @@ func (v *Provider) GetStringPullRequestComment(ctx context.Context, runevent *in ListOptions: github.ListOptions{PerPage: v.PaginedNumber}, } for { - comments, resp, err := v.Client.Issues.ListComments(ctx, runevent.Organization, runevent.Repository, + comments, resp, err := v.Client().Issues.ListComments(ctx, runevent.Organization, runevent.Repository, prNumber, opt) if err != nil { return nil, err diff --git a/pkg/provider/github/acl_test.go b/pkg/provider/github/acl_test.go index 0f3f78aa0..a61e08011 100644 --- a/pkg/provider/github/acl_test.go +++ b/pkg/provider/github/acl_test.go @@ -89,7 +89,7 @@ func TestCheckPolicyAllowing(t *testing.T) { Settings: &v1alpha1.Settings{}, }} gprovider := Provider{ - Client: fakeclient, + ghClient: fakeclient, repo: repo, Logger: logger, PaginedNumber: 1, @@ -326,7 +326,7 @@ func TestOkToTestComment(t *testing.T) { }, } gprovider := Provider{ - Client: fakeclient, + ghClient: fakeclient, repo: repo, Logger: logger, PaginedNumber: 1, @@ -403,7 +403,7 @@ func TestAclCheckAll(t *testing.T) { logger := zap.New(observer).Sugar() ctx, _ := rtesting.SetupFakeContext(t) gprovider := Provider{ - Client: fakeclient, + ghClient: fakeclient, Logger: logger, PaginedNumber: 1, } @@ -593,8 +593,8 @@ func TestIfPullRequestIsForSameRepoWithoutFork(t *testing.T) { Settings: &v1alpha1.Settings{}, }} gprovider := Provider{ - Client: fakeclient, - repo: repo, + ghClient: fakeclient, + repo: repo, } got, err := gprovider.aclCheckAll(ctx, tt.event) diff --git a/pkg/provider/github/app/token_test.go b/pkg/provider/github/app/token_test.go index 7fd39bc12..4c0a51671 100644 --- a/pkg/provider/github/app/token_test.go +++ b/pkg/provider/github/app/token_test.go @@ -226,7 +226,8 @@ func Test_GetAndUpdateInstallationID(t *testing.T) { }, } - gprovider := &github.Provider{Client: fakeghclient, APIURL: &serverURL, Run: run} + gprovider := &github.Provider{APIURL: &serverURL, Run: run} + gprovider.SetGithubClient(fakeghclient) mux.HandleFunc(fmt.Sprintf("/app/installations/%d/access_tokens", wantID), func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "POST") w.Header().Set("Authorization", "Bearer "+jwtToken) @@ -295,7 +296,8 @@ func Test_ListRepos(t *testing.T) { } ctx, _ := rtesting.SetupFakeContext(t) - gprovider := &github.Provider{Client: fakeclient} + gprovider := &github.Provider{} + gprovider.SetGithubClient(fakeclient) ip := NewInstallation(httptest.NewRequest(http.MethodGet, "http://localhost", strings.NewReader("")), ¶ms.Run{}, repo, gprovider, testNamespace.GetName()) exist, err := ip.matchRepos(ctx) diff --git a/pkg/provider/github/github.go b/pkg/provider/github/github.go index b89a17b03..cee3159d9 100644 --- a/pkg/provider/github/github.go +++ b/pkg/provider/github/github.go @@ -16,6 +16,7 @@ import ( "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" "github.com/openshift-pipelines/pipelines-as-code/pkg/changedfiles" "github.com/openshift-pipelines/pipelines-as-code/pkg/events" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/triggertype" @@ -40,7 +41,8 @@ const ( var _ provider.Interface = (*Provider)(nil) type Provider struct { - Client *github.Client + ghClient *github.Client + metrics *metrics.Recorder Logger *zap.SugaredLogger Run *params.Run pacInfo *info.PacOpts @@ -54,6 +56,7 @@ type Provider struct { PaginedNumber int userType string // The type of user i.e bot or not skippedRun + triggerEvent string } type skippedRun struct { @@ -71,10 +74,41 @@ func New() *Provider { } } +func (v *Provider) Client() *github.Client { + v.recordAPIUsageMetrics() + return v.ghClient +} + +func (v *Provider) SetGithubClient(client *github.Client) { + v.ghClient = client +} + func (v *Provider) SetPacInfo(pacInfo *info.PacOpts) { v.pacInfo = pacInfo } +func (v *Provider) recordAPIUsageMetrics() { + if v.metrics == nil { + m, err := metrics.NewRecorder() + if err != nil { + v.Logger.Errorf("Error initializing github metrics recorder: %v", err) + return + } + v.metrics = m + } + + name := "" + namespace := "" + if v.repo != nil { + name = v.repo.Name + namespace = v.repo.Namespace + } + + if err := v.metrics.ReportGitProviderAPIUsage(v.providerName, v.triggerEvent, namespace, name); err != nil { + v.Logger.Errorf("Error reporting git API usage metrics: %v", err) + } +} + // detectGHERawURL Detect if we have a raw URL in GHE. func detectGHERawURL(event *info.Event, taskHost string) bool { gheURL, err := url.Parse(event.GHEURL) @@ -240,7 +274,7 @@ func parseTS(headerTS string) (time.Time, error) { // but this gives a nice hint to the user into their namespace event of where // the issue was. func (v *Provider) checkWebhookSecretValidity(ctx context.Context, cw clockwork.Clock) error { - rl, resp, err := v.Client.RateLimit.Get(ctx) + rl, resp, err := v.Client().RateLimit.Get(ctx) if resp.StatusCode == http.StatusNotFound { v.Logger.Info("skipping checking if token has expired, rate_limit api is not enabled on token") return nil @@ -273,13 +307,14 @@ func (v *Provider) SetClient(ctx context.Context, run *params.Run, event *info.E v.Run = run v.repo = repo v.eventEmitter = eventsEmitter + v.triggerEvent = event.EventType // check that the Client is not already set, so we don't override our fakeclient // from unittesting. - if v.Client == nil { - v.Client = client + if v.ghClient == nil { + v.ghClient = client } - if v.Client == nil { + if v.ghClient == nil { return fmt.Errorf("no github client has been initialized") } @@ -309,7 +344,7 @@ func (v *Provider) GetTektonDir(ctx context.Context, runevent *info.Event, path, v.Logger.Infof("Using PipelineRun definition from source pull request %s/%s#%d SHA on %s", runevent.Organization, runevent.Repository, runevent.PullRequestNumber, runevent.SHA) } - rootobjects, _, err := v.Client.Git.GetTree(ctx, runevent.Organization, runevent.Repository, revision, false) + rootobjects, _, err := v.Client().Git.GetTree(ctx, runevent.Organization, runevent.Repository, revision, false) if err != nil { return "", err } @@ -331,7 +366,7 @@ func (v *Provider) GetTektonDir(ctx context.Context, runevent *info.Event, path, // there is a limit on this recursive calls to 500 entries, as documented here: // https://docs.github.com/en/rest/reference/git#get-a-tree // so we may need to address it in the future. - tektonDirObjects, _, err := v.Client.Git.GetTree(ctx, runevent.Organization, runevent.Repository, tektonDirSha, + tektonDirObjects, _, err := v.Client().Git.GetTree(ctx, runevent.Organization, runevent.Repository, tektonDirSha, true) if err != nil { return "", err @@ -342,7 +377,7 @@ func (v *Provider) GetTektonDir(ctx context.Context, runevent *info.Event, path, // GetCommitInfo get info (url and title) on a commit in runevent, this needs to // be run after sewebhook while we already matched a token. func (v *Provider) GetCommitInfo(ctx context.Context, runevent *info.Event) error { - if v.Client == nil { + if v.ghClient == nil { return fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -352,14 +387,14 @@ func (v *Provider) GetCommitInfo(ctx context.Context, runevent *info.Event) erro var commit *github.Commit sha := runevent.SHA if runevent.SHA == "" && runevent.HeadBranch != "" { - branchinfo, _, err := v.Client.Repositories.GetBranch(ctx, runevent.Organization, runevent.Repository, runevent.HeadBranch, 1) + branchinfo, _, err := v.Client().Repositories.GetBranch(ctx, runevent.Organization, runevent.Repository, runevent.HeadBranch, 1) if err != nil { return err } sha = branchinfo.Commit.GetSHA() } var err error - commit, _, err = v.Client.Git.GetCommit(ctx, runevent.Organization, runevent.Repository, sha) + commit, _, err = v.Client().Git.GetCommit(ctx, runevent.Organization, runevent.Repository, sha) if err != nil { return err } @@ -382,7 +417,7 @@ func (v *Provider) GetFileInsideRepo(ctx context.Context, runevent *info.Event, ref = runevent.DefaultBranch } - fp, objects, _, err := v.Client.Repositories.GetContents(ctx, runevent.Organization, + fp, objects, _, err := v.Client().Repositories.GetContents(ctx, runevent.Organization, runevent.Repository, path, &github.RepositoryContentGetOptions{Ref: ref}) if err != nil { return "", err @@ -424,7 +459,7 @@ func (v *Provider) concatAllYamlFiles(ctx context.Context, objects []*github.Tre // getPullRequest get a pull request details. func (v *Provider) getPullRequest(ctx context.Context, runevent *info.Event) (*info.Event, error) { - pr, _, err := v.Client.PullRequests.Get(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber) + pr, _, err := v.Client().PullRequests.Get(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber) if err != nil { return runevent, err } @@ -463,7 +498,7 @@ func (v *Provider) GetFiles(ctx context.Context, runevent *info.Event) (changedf opt := &github.ListOptions{PerPage: v.PaginedNumber} changedFiles := changedfiles.ChangedFiles{} for { - repoCommit, resp, err := v.Client.PullRequests.ListFiles(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber, opt) + repoCommit, resp, err := v.Client().PullRequests.ListFiles(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber, opt) if err != nil { return changedfiles.ChangedFiles{}, err } @@ -492,7 +527,7 @@ func (v *Provider) GetFiles(ctx context.Context, runevent *info.Event) (changedf if runevent.TriggerTarget == "push" { changedFiles := changedfiles.ChangedFiles{} - rC, _, err := v.Client.Repositories.GetCommit(ctx, runevent.Organization, runevent.Repository, runevent.SHA, &github.ListOptions{}) + rC, _, err := v.Client().Repositories.GetCommit(ctx, runevent.Organization, runevent.Repository, runevent.SHA, &github.ListOptions{}) if err != nil { return changedfiles.ChangedFiles{}, err } @@ -518,7 +553,7 @@ func (v *Provider) GetFiles(ctx context.Context, runevent *info.Event) (changedf // getObject Get an object from a repository. func (v *Provider) getObject(ctx context.Context, sha string, runevent *info.Event) ([]byte, error) { - blob, _, err := v.Client.Git.GetBlob(ctx, runevent.Organization, runevent.Repository, sha) + blob, _, err := v.Client().Git.GetBlob(ctx, runevent.Organization, runevent.Repository, sha) if err != nil { return nil, err } @@ -532,7 +567,7 @@ func (v *Provider) getObject(ctx context.Context, sha string, runevent *info.Eve // ListRepos lists all the repos for a particular token. func ListRepos(ctx context.Context, v *Provider) ([]string, error) { - if v.Client == nil { + if v.ghClient == nil { return []string{}, fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -540,7 +575,7 @@ func ListRepos(ctx context.Context, v *Provider) ([]string, error) { opt := &github.ListOptions{PerPage: v.PaginedNumber} repoURLs := []string{} for { - repoList, resp, err := v.Client.Apps.ListRepos(ctx, opt) + repoList, resp, err := v.Client().Apps.ListRepos(ctx, opt) if err != nil { return []string{}, err } @@ -558,7 +593,7 @@ func ListRepos(ctx context.Context, v *Provider) ([]string, error) { func (v *Provider) CreateToken(ctx context.Context, repository []string, event *info.Event) (string, error) { for _, r := range repository { split := strings.Split(r, "/") - infoData, _, err := v.Client.Repositories.Get(ctx, split[0], split[1]) + infoData, _, err := v.Client().Repositories.Get(ctx, split[0], split[1]) if err != nil { v.Logger.Warn("we have an invalid repository: `%s` or no access to it: %v", r, err) continue @@ -589,12 +624,12 @@ func uniqueRepositoryID(repoIDs []int64, id int64) []int64 { // isHeadCommitOfBranch checks whether provided branch is valid or not and SHA is HEAD commit of the branch. func (v *Provider) isHeadCommitOfBranch(ctx context.Context, runevent *info.Event, branchName string) error { - if v.Client == nil { + if v.ghClient == nil { return fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } - branchInfo, _, err := v.Client.Repositories.GetBranch(ctx, runevent.Organization, runevent.Repository, branchName, 1) + branchInfo, _, err := v.Client().Repositories.GetBranch(ctx, runevent.Organization, runevent.Repository, branchName, 1) if err != nil { return err } diff --git a/pkg/provider/github/github_test.go b/pkg/provider/github/github_test.go index 9ce1a6e49..57fca549d 100644 --- a/pkg/provider/github/github_test.go +++ b/pkg/provider/github/github_test.go @@ -20,6 +20,7 @@ import ( "github.com/jonboulle/clockwork" "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/keys" "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/clients" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" @@ -31,6 +32,8 @@ import ( "gotest.tools/v3/assert" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "knative.dev/pkg/metrics/metricstest" + _ "knative.dev/pkg/metrics/testing" "knative.dev/pkg/ptr" rtesting "knative.dev/pkg/reconciler/testing" ) @@ -72,7 +75,7 @@ func TestGetTaskURI(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) fakeclient, mux, _, teardown := ghtesthelper.SetupGH() defer teardown() - provider := &Provider{Client: fakeclient} + provider := &Provider{ghClient: fakeclient} event := info.NewEvent() event.HeadBranch = "main" event.URL = tt.eventURL @@ -232,6 +235,7 @@ func TestGetTektonDir(t *testing.T) { provenance string filterMessageSnippet string wantErr string + expectedGHApiCalls int64 }{ { name: "test no subtree", @@ -243,6 +247,10 @@ func TestGetTektonDir(t *testing.T) { expectedString: "PipelineRun", treepath: "testdata/tree/simple", filterMessageSnippet: "Using PipelineRun definition from source pull request tekton/cat#0", + // 1. Get Repo root objects + // 2. Get Tekton Dir objects + // 3/4. Get object content for each object (pipelinerun.yaml, pipeline.yaml) + expectedGHApiCalls: 4, }, { name: "test provenance default_branch ", @@ -255,6 +263,10 @@ func TestGetTektonDir(t *testing.T) { treepath: "testdata/tree/defaultbranch", provenance: "default_branch", filterMessageSnippet: "Using PipelineRun definition from default_branch: main", + // 1. Get Repo root objects + // 2. Get Tekton Dir objects + // 3/4. Get object content for each object (pipelinerun.yaml, pipeline.yaml) + expectedGHApiCalls: 4, }, { name: "test with subtree", @@ -265,6 +277,10 @@ func TestGetTektonDir(t *testing.T) { }, expectedString: "FROMSUBTREE", treepath: "testdata/tree/subdir", + // 1. Get Repo root objects + // 2. Get Tekton Dir objects + // 3-5. Get object content for each object (foo/bar/pipeline.yaml) + expectedGHApiCalls: 3, }, { name: "test with badly formatted yaml", @@ -276,19 +292,64 @@ func TestGetTektonDir(t *testing.T) { expectedString: "FROMSUBTREE", treepath: "testdata/tree/badyaml", wantErr: "error unmarshalling yaml file badyaml.yaml: yaml: line 2: did not find expected key", + // 1. Get Repo root objects + // 2. Get Tekton Dir objects + // 3. Get object content for object (badyaml.yaml) + expectedGHApiCalls: 3, + }, + { + name: "test no tekton directory", + event: &info.Event{ + Organization: "tekton", + Repository: "cat", + SHA: "123", + }, + expectedString: "", + treepath: "testdata/tree/notektondir", + filterMessageSnippet: "Using PipelineRun definition from source pull request tekton/cat#0", + // 1. Get Repo root objects + // _. No tekton dir to fetch + expectedGHApiCalls: 1, + }, + { + name: "test tekton directory path is file", + event: &info.Event{ + Organization: "tekton", + Repository: "cat", + SHA: "123", + }, + treepath: "testdata/tree/tektondirisfile", + wantErr: ".tekton has been found but is not a directory", + // 1. Get Repo root objects + // _. Tekton dir is file, no directory to fetch + expectedGHApiCalls: 1, }, } for _, tt := range testGetTektonDir { t.Run(tt.name, func(t *testing.T) { + resetMetrics() observer, exporter := zapobserver.New(zap.InfoLevel) fakelogger := zap.New(observer).Sugar() ctx, _ := rtesting.SetupFakeContext(t) fakeclient, mux, _, teardown := ghtesthelper.SetupGH() defer teardown() gvcs := Provider{ - Client: fakeclient, - Logger: fakelogger, + ghClient: fakeclient, + providerName: "github", + Logger: fakelogger, } + + defer func() { + if !t.Failed() { + metricstest.CheckCountData( + t, + "pipelines_as_code_git_provider_api_request_count", + map[string]string{"provider": "github"}, + tt.expectedGHApiCalls, + ) + } + }() + if tt.provenance == "default_branch" { tt.event.SHA = tt.event.DefaultBranch } else { @@ -304,7 +365,15 @@ func TestGetTektonDir(t *testing.T) { return } assert.NilError(t, err) - assert.Assert(t, strings.Contains(got, tt.expectedString), "expected %s, got %s", tt.expectedString, got) + + var gotMatch bool + if tt.expectedString == "" { + gotMatch = got == tt.expectedString + } else { + gotMatch = strings.Contains(got, tt.expectedString) + } + + assert.Assert(t, gotMatch, "expected %s, got %s", tt.expectedString, got) if tt.filterMessageSnippet != "" { gotcha := exporter.FilterMessageSnippet(tt.filterMessageSnippet) assert.Assert(t, gotcha.Len() > 0, "expected to find %s in logs, found %v", tt.filterMessageSnippet, exporter.All()) @@ -374,7 +443,7 @@ func TestGetFileInsideRepo(t *testing.T) { fakeclient, mux, _, teardown := ghtesthelper.SetupGH() defer teardown() gvcs := Provider{ - Client: fakeclient, + ghClient: fakeclient, } for s, f := range tt.rets { mux.HandleFunc(s, f) @@ -438,7 +507,7 @@ func TestCheckSenderOrgMembership(t *testing.T) { defer teardown() ctx, _ := rtesting.SetupFakeContext(t) gprovider := Provider{ - Client: fakeclient, + ghClient: fakeclient, } mux.HandleFunc(fmt.Sprintf("/orgs/%s/members", tt.runevent.Organization), func(rw http.ResponseWriter, _ *http.Request) { fmt.Fprint(rw, tt.apiReturn) @@ -483,7 +552,7 @@ func TestGetStringPullRequestComment(t *testing.T) { defer teardown() ctx, _ := rtesting.SetupFakeContext(t) gprovider := Provider{ - Client: fakeclient, + ghClient: fakeclient, } mux.HandleFunc(fmt.Sprintf("/repos/issues/%s/comments", filepath.Base(tt.runevent.URL)), func(rw http.ResponseWriter, _ *http.Request) { fmt.Fprint(rw, tt.apiReturn) @@ -551,7 +620,7 @@ func TestGithubGetCommitInfo(t *testing.T) { fmt.Fprintf(rw, `{"html_url": "%s", "message": "%s"}`, tt.shaurl, tt.shatitle) }) ctx, _ := rtesting.SetupFakeContext(t) - provider := &Provider{Client: fakeclient} + provider := &Provider{ghClient: fakeclient} if tt.noclient { provider = &Provider{} } @@ -596,11 +665,11 @@ func TestGithubSetClient(t *testing.T) { err := v.SetClient(ctx, nil, tt.event, nil, nil) assert.NilError(t, err) assert.Equal(t, tt.expectedURL, *v.APIURL) - assert.Equal(t, "https", v.Client.BaseURL.Scheme) + assert.Equal(t, "https", v.Client().BaseURL.Scheme) if tt.isGHE { - assert.Equal(t, "/api/v3/", v.Client.BaseURL.Path) + assert.Equal(t, "/api/v3/", v.Client().BaseURL.Path) } else { - assert.Equal(t, "/", v.Client.BaseURL.Path) + assert.Equal(t, "/", v.Client().BaseURL.Path) } }) } @@ -801,7 +870,7 @@ func TestGetFiles(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) provider := &Provider{ - Client: fakeclient, + ghClient: fakeclient, PaginedNumber: 1, } changedFiles, err := provider.GetFiles(ctx, tt.event) @@ -908,8 +977,8 @@ func TestProvider_checkWebhookSecretValidity(t *testing.T) { } defer teardown() v := &Provider{ - Client: fakeclient, - Logger: logger, + ghClient: fakeclient, + Logger: logger, } err := v.checkWebhookSecretValidity(ctx, cw) if tt.wantSubErr != "" { @@ -983,7 +1052,7 @@ func TestListRepos(t *testing.T) { }) ctx, _ := rtesting.SetupFakeContext(t) - provider := &Provider{Client: fakeclient, PaginedNumber: 1} + provider := &Provider{ghClient: fakeclient, PaginedNumber: 1} data, err := ListRepos(ctx, provider) assert.NilError(t, err) assert.Equal(t, data[0], "https://matched/by/incoming") @@ -1078,7 +1147,7 @@ func TestCreateToken(t *testing.T) { }) } - provider := &Provider{Client: fakeclient} + provider := &Provider{ghClient: fakeclient} provider.Run = run _, err := provider.CreateToken(ctx, urlData, info) assert.Assert(t, len(provider.RepositoryIDs) == 2, "found repositoryIDs are %d which is less than expected", len(provider.RepositoryIDs)) @@ -1124,9 +1193,21 @@ func TestIsHeadCommitOfBranch(t *testing.T) { }) ctx, _ := rtesting.SetupFakeContext(t) - provider := &Provider{Client: fakeclient} + provider := &Provider{ghClient: fakeclient} err := provider.isHeadCommitOfBranch(ctx, runEvent, "test1") assert.Equal(t, err != nil, tt.wantErr) }) } } + +func resetMetrics() { + metricstest.Unregister( + "pipelines_as_code_pipelinerun_count", + "pipelines_as_code_pipelinerun_duration_seconds_sum", + "pipelines_as_code_running_pipelineruns_count", + "pipelines_as_code_git_provider_api_request_count", + ) + + // have to reset sync.Once to allow recreation of Recorder. + metrics.ResetRecorder() +} diff --git a/pkg/provider/github/parse_payload.go b/pkg/provider/github/parse_payload.go index 9f2293dd5..f9eb6caf2 100644 --- a/pkg/provider/github/parse_payload.go +++ b/pkg/provider/github/parse_payload.go @@ -74,10 +74,10 @@ func (v *Provider) GetAppToken(ctx context.Context, kube kubernetes.Interface, g gheURL = "https://" + gheURL } uploadURL := gheURL + "/api/uploads" - v.Client, _ = github.NewClient(&http.Client{Transport: itr}).WithEnterpriseURLs(gheURL, uploadURL) - itr.BaseURL = strings.TrimSuffix(v.Client.BaseURL.String(), "/") + v.ghClient, _ = github.NewClient(&http.Client{Transport: itr}).WithEnterpriseURLs(gheURL, uploadURL) + itr.BaseURL = strings.TrimSuffix(v.Client().BaseURL.String(), "/") } else { - v.Client = github.NewClient(&http.Client{Transport: itr}) + v.ghClient = github.NewClient(&http.Client{Transport: itr}) } // Get a token ASAP because we need it for setting private repos @@ -217,7 +217,7 @@ func (v *Provider) processEvent(ctx context.Context, event *info.Event, eventInt switch gitEvent := eventInt.(type) { case *github.CheckRunEvent: - if v.Client == nil { + if v.ghClient == nil { return nil, fmt.Errorf("check run rerequest is only supported with github apps integration") } @@ -226,7 +226,7 @@ func (v *Provider) processEvent(ctx context.Context, event *info.Event, eventInt } return v.handleReRequestEvent(ctx, gitEvent) case *github.CheckSuiteEvent: - if v.Client == nil { + if v.ghClient == nil { return nil, fmt.Errorf("check suite rerequest is only supported with github apps integration") } @@ -235,7 +235,7 @@ func (v *Provider) processEvent(ctx context.Context, event *info.Event, eventInt } return v.handleCheckSuites(ctx, gitEvent) case *github.IssueCommentEvent: - if v.Client == nil { + if v.ghClient == nil { return nil, fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -247,7 +247,7 @@ func (v *Provider) processEvent(ctx context.Context, event *info.Event, eventInt return nil, err } case *github.CommitCommentEvent: - if v.Client == nil { + if v.ghClient == nil { return nil, fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } diff --git a/pkg/provider/github/parse_payload_test.go b/pkg/provider/github/parse_payload_test.go index 5add0e71e..f60f3dc39 100644 --- a/pkg/provider/github/parse_payload_test.go +++ b/pkg/provider/github/parse_payload_test.go @@ -617,8 +617,8 @@ func TestParsePayLoad(t *testing.T) { } logger, _ := logger.GetLogger() gprovider := Provider{ - Client: ghClient, - Logger: logger, + ghClient: ghClient, + Logger: logger, pacInfo: &info.PacOpts{ Settings: settings.Settings{}, }, @@ -801,8 +801,8 @@ func TestAppTokenGeneration(t *testing.T) { jeez, _ := json.Marshal(samplePRevent) logger, _ := logger.GetLogger() gprovider := Provider{ - Logger: logger, - Client: fakeghclient, + Logger: logger, + ghClient: fakeghclient, pacInfo: &info.PacOpts{ Settings: settings.Settings{}, }, @@ -856,7 +856,7 @@ func TestAppTokenGeneration(t *testing.T) { } assert.NilError(t, err) if tt.nilClient { - assert.Assert(t, gprovider.Client == nil) + assert.Assert(t, gprovider.Client() == nil) return } @@ -878,9 +878,9 @@ func TestAppTokenGeneration(t *testing.T) { assert.Assert(t, found, "Could not find %s in %s", extraIDInt, tt.extraRepoInstallIDs) } - assert.Assert(t, gprovider.Client != nil) + assert.Assert(t, gprovider.Client() != nil) if tt.resultBaseURL != "" { - assert.Equal(t, gprovider.Client.BaseURL.String(), tt.resultBaseURL) + assert.Equal(t, gprovider.Client().BaseURL.String(), tt.resultBaseURL) } }) } diff --git a/pkg/provider/github/scope_test.go b/pkg/provider/github/scope_test.go index f370f97cf..6073c4f6a 100644 --- a/pkg/provider/github/scope_test.go +++ b/pkg/provider/github/scope_test.go @@ -226,10 +226,10 @@ func TestScopeTokenToListOfRepos(t *testing.T) { } gvcs := &Provider{ - Logger: logger, - Client: fakeghclient, - Run: run, - pacInfo: pacInfo, + ghClient: fakeghclient, + Logger: logger, + Run: run, + pacInfo: pacInfo, } extraRepoInstallIDs := map[string]string{"owner/repo": "789", "owner1/repo1": "10112", "owner2/repo2": "112233"} diff --git a/pkg/provider/github/status.go b/pkg/provider/github/status.go index 3345e868c..5c7c8a56f 100644 --- a/pkg/provider/github/status.go +++ b/pkg/provider/github/status.go @@ -43,7 +43,7 @@ const taskStatusTemplate = ` func (v *Provider) getExistingCheckRunID(ctx context.Context, runevent *info.Event, status provider.StatusOpts) (*int64, error) { opt := github.ListOptions{PerPage: v.PaginedNumber} for { - res, resp, err := v.Client.Checks.ListCheckRunsForRef(ctx, runevent.Organization, runevent.Repository, + res, resp, err := v.Client().Checks.ListCheckRunsForRef(ctx, runevent.Organization, runevent.Repository, runevent.SHA, &github.ListCheckRunsOptions{ AppID: v.ApplicationID, ListOptions: opt, @@ -118,7 +118,7 @@ func (v *Provider) createCheckRunStatus(ctx context.Context, runevent *info.Even StartedAt: &now, } - checkRun, _, err := v.Client.Checks.CreateCheckRun(ctx, runevent.Organization, runevent.Repository, checkrunoption) + checkRun, _, err := v.Client().Checks.CreateCheckRun(ctx, runevent.Organization, runevent.Repository, checkrunoption) if err != nil { return nil, err } @@ -270,7 +270,7 @@ func (v *Provider) getOrUpdateCheckRunStatus(ctx context.Context, runevent *info opts.Conclusion = github.Ptr("cancelled") } - _, _, err = v.Client.Checks.UpdateCheckRun(ctx, runevent.Organization, runevent.Repository, *checkRunID, opts) + _, _, err = v.Client().Checks.UpdateCheckRun(ctx, runevent.Organization, runevent.Repository, *checkRunID, opts) return err } @@ -323,7 +323,7 @@ func (v *Provider) createStatusCommit(ctx context.Context, runevent *info.Event, CreatedAt: &github.Timestamp{Time: now}, } - if _, _, err := v.Client.Repositories.CreateStatus(ctx, + if _, _, err := v.Client().Repositories.CreateStatus(ctx, runevent.Organization, runevent.Repository, runevent.SHA, ghstatus); err != nil { return err } @@ -334,7 +334,7 @@ func (v *Provider) createStatusCommit(ctx context.Context, runevent *info.Event, if (status.Status == "completed" || (status.Status == "queued" && status.Title == pendingApproval)) && status.Text != "" && eventType == triggertype.PullRequest { - _, _, err = v.Client.Issues.CreateComment(ctx, runevent.Organization, runevent.Repository, + _, _, err = v.Client().Issues.CreateComment(ctx, runevent.Organization, runevent.Repository, runevent.PullRequestNumber, &github.IssueComment{ Body: github.Ptr(fmt.Sprintf("%s
%s", status.Summary, status.Text)), @@ -349,7 +349,7 @@ func (v *Provider) createStatusCommit(ctx context.Context, runevent *info.Event, } func (v *Provider) CreateStatus(ctx context.Context, runevent *info.Event, statusOpts provider.StatusOpts) error { - if v.Client == nil { + if v.ghClient == nil { return fmt.Errorf("cannot set status on github no token or url set") } diff --git a/pkg/provider/github/status_test.go b/pkg/provider/github/status_test.go index c16fa7367..acf0bafab 100644 --- a/pkg/provider/github/status_test.go +++ b/pkg/provider/github/status_test.go @@ -30,8 +30,8 @@ func TestGithubProviderCreateCheckRun(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) fakeclient, mux, _, teardown := ghtesthelper.SetupGH() cnx := Provider{ - Client: fakeclient, - Run: params.New(), + ghClient: fakeclient, + Run: params.New(), pacInfo: &info.PacOpts{ Settings: settings.Settings{ ApplicationName: settings.PACApplicationNameDefaultValue, @@ -64,9 +64,9 @@ func TestGetOrUpdateCheckRunStatusForMultipleFailedPipelineRun(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) fakeclient, mux, _, teardown := ghtesthelper.SetupGH() cnx := Provider{ - Client: fakeclient, - Run: params.New(), - pacInfo: &info.PacOpts{}, + ghClient: fakeclient, + Run: params.New(), + pacInfo: &info.PacOpts{}, } defer teardown() statusOptionData := []provider.StatusOpts{{ @@ -104,7 +104,7 @@ func TestGetExistingCheckRunIDFromMultiple(t *testing.T) { defer teardown() cnx := &Provider{ - Client: client, + ghClient: client, PaginedNumber: 1, } event := &info.Event{ @@ -151,7 +151,7 @@ func TestGetExistingPendingApprovalCheckRunID(t *testing.T) { defer teardown() cnx := New() - cnx.Client = client + cnx.SetGithubClient(client) event := &info.Event{ Organization: "owner", @@ -190,7 +190,7 @@ func TestGetExistingFailedCheckRunID(t *testing.T) { defer teardown() cnx := New() - cnx.Client = client + cnx.SetGithubClient(client) event := &info.Event{ Organization: "owner", @@ -407,7 +407,7 @@ func TestGithubProviderCreateStatus(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) gcvs := New() - gcvs.Client = fakeclient + gcvs.SetGithubClient(fakeclient) gcvs.Logger, _ = logger.GetLogger() gcvs.Run = params.New() if tt.args.isBot { @@ -591,8 +591,8 @@ func TestGithubProvidercreateStatusCommit(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) provider := &Provider{ - Client: fakeclient, - Run: params.New(), + ghClient: fakeclient, + Run: params.New(), pacInfo: &info.PacOpts{ Settings: settings.Settings{ ApplicationName: settings.PACApplicationNameDefaultValue, @@ -653,7 +653,7 @@ func TestProviderGetExistingCheckRunID(t *testing.T) { SHA: "sha", } v := &Provider{ - Client: client, + ghClient: client, } mux.HandleFunc(fmt.Sprintf("/repos/%v/%v/commits/%v/check-runs", event.Organization, event.Repository, event.SHA), func(w http.ResponseWriter, _ *http.Request) { _, _ = fmt.Fprintf(w, "%s", tt.jsonret) diff --git a/pkg/provider/github/testdata/tree/notektondir/.gitignore b/pkg/provider/github/testdata/tree/notektondir/.gitignore new file mode 100644 index 000000000..5e7d2734c --- /dev/null +++ b/pkg/provider/github/testdata/tree/notektondir/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/pkg/provider/github/testdata/tree/tektondirisfile/.tekton b/pkg/provider/github/testdata/tree/tektondirisfile/.tekton new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/provider/gitlab/acl.go b/pkg/provider/gitlab/acl.go index a384e83a7..da70ce5bb 100644 --- a/pkg/provider/gitlab/acl.go +++ b/pkg/provider/gitlab/acl.go @@ -27,7 +27,7 @@ func (v *Provider) IsAllowedOwnersFile(_ context.Context, event *info.Event) (bo } func (v *Provider) checkMembership(ctx context.Context, event *info.Event, userid int) bool { - member, _, err := v.Client.ProjectMembers.GetInheritedProjectMember(v.targetProjectID, userid) + member, _, err := v.Client().ProjectMembers.GetInheritedProjectMember(v.targetProjectID, userid) if err == nil && member.ID != 0 && member.ID == userid { return true } @@ -39,7 +39,7 @@ func (v *Provider) checkMembership(ctx context.Context, event *info.Event, useri func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, event *info.Event, page int) (bool, error) { var nextPage int opt := &gitlab.ListMergeRequestDiscussionsOptions{Page: page} - discussions, resp, err := v.Client.Discussions.ListMergeRequestDiscussions(v.targetProjectID, event.PullRequestNumber, opt) + discussions, resp, err := v.Client().Discussions.ListMergeRequestDiscussions(v.targetProjectID, event.PullRequestNumber, opt) if err != nil || len(discussions) == 0 { return false, err } @@ -72,7 +72,7 @@ func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, e } func (v *Provider) IsAllowed(ctx context.Context, event *info.Event) (bool, error) { - if v.Client == nil { + if v.gitlabClient == nil { return false, fmt.Errorf("no github client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } diff --git a/pkg/provider/gitlab/acl_test.go b/pkg/provider/gitlab/acl_test.go index 8f0c5fbca..77aa98fe0 100644 --- a/pkg/provider/gitlab/acl_test.go +++ b/pkg/provider/gitlab/acl_test.go @@ -101,7 +101,7 @@ func TestIsAllowed(t *testing.T) { } if tt.wantClient { client, mux, tearDown := thelp.Setup(t) - v.Client = client + v.gitlabClient = client if tt.allowMemberID != 0 { thelp.MuxAllowUserID(mux, tt.fields.targetProjectID, tt.allowMemberID) } else { diff --git a/pkg/provider/gitlab/gitlab.go b/pkg/provider/gitlab/gitlab.go index cad3b86da..7dfbd5b13 100644 --- a/pkg/provider/gitlab/gitlab.go +++ b/pkg/provider/gitlab/gitlab.go @@ -12,6 +12,7 @@ import ( "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1" "github.com/openshift-pipelines/pipelines-as-code/pkg/changedfiles" "github.com/openshift-pipelines/pipelines-as-code/pkg/events" + "github.com/openshift-pipelines/pipelines-as-code/pkg/metrics" "github.com/openshift-pipelines/pipelines-as-code/pkg/opscomments" "github.com/openshift-pipelines/pipelines-as-code/pkg/params" "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info" @@ -45,8 +46,9 @@ var anyMergeRequestEventType = []string{"Merge Request", "MergeRequest"} var _ provider.Interface = (*Provider)(nil) type Provider struct { - Client *gitlab.Client + gitlabClient *gitlab.Client Logger *zap.SugaredLogger + metrics *metrics.Recorder run *params.Run pacInfo *info.PacOpts Token *string @@ -58,6 +60,38 @@ type Provider struct { apiURL string eventEmitter *events.EventEmitter repo *v1alpha1.Repository + triggerEvent string +} + +func (v Provider) Client() *gitlab.Client { + v.recordAPIUsageMetrics() + return v.gitlabClient +} + +func (v *Provider) SetGitlabClient(client *gitlab.Client) { + v.gitlabClient = client +} + +func (v *Provider) recordAPIUsageMetrics() { + if v.metrics == nil { + m, err := metrics.NewRecorder() + if err != nil { + v.Logger.Errorf("Error initializing gitlab metrics recorder: %v", err) + return + } + v.metrics = m + } + + name := "" + namespace := "" + if v.repo != nil { + name = v.repo.Name + namespace = v.repo.Namespace + } + + if err := v.metrics.ReportGitProviderAPIUsage(v.apiURL, v.triggerEvent, namespace, name); err != nil { + v.Logger.Errorf("Error reporting git API usage metrics: %v", err) + } } func (v *Provider) SetPacInfo(pacInfo *info.PacOpts) { @@ -132,7 +166,7 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. } v.apiURL = apiURL - v.Client, err = gitlab.NewClient(runevent.Provider.Token, gitlab.WithBaseURL(apiURL)) + v.gitlabClient, err = gitlab.NewClient(runevent.Provider.Token, gitlab.WithBaseURL(apiURL)) if err != nil { return err } @@ -151,7 +185,7 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. // it ASAP if we can. if v.sourceProjectID == 0 && runevent.Organization != "" && runevent.Repository != "" { projectSlug := filepath.Join(runevent.Organization, runevent.Repository) - projectinfo, _, err := v.Client.Projects.GetProject(projectSlug, &gitlab.GetProjectOptions{}) + projectinfo, _, err := v.Client().Projects.GetProject(projectSlug, &gitlab.GetProjectOptions{}) if err != nil { return err } @@ -165,6 +199,7 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. v.run = run v.eventEmitter = eventsEmitter v.repo = repo + v.triggerEvent = runevent.EventType return nil } @@ -172,7 +207,7 @@ func (v *Provider) SetClient(_ context.Context, run *params.Run, runevent *info. func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusOpts provider.StatusOpts, ) error { var detailsURL string - if v.Client == nil { + if v.gitlabClient == nil { return fmt.Errorf("no gitlab client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -222,7 +257,7 @@ func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusOpts // a status comment on it. // This would work on a push or an MR from a branch within the same repo. // Ignoring errors because of the write access issues, - if _, _, err := v.Client.Commits.SetCommitStatus(event.SourceProjectID, event.SHA, opt); err != nil { + if _, _, err := v.Client().Commits.SetCommitStatus(event.SourceProjectID, event.SHA, opt); err != nil { v.eventEmitter.EmitMessage(v.repo, zap.ErrorLevel, "FailedToSetCommitStatus", "cannot set status with the GitLab token because of: "+err.Error()) } @@ -236,14 +271,14 @@ func (v *Provider) CreateStatus(_ context.Context, event *info.Event, statusOpts // only add a note when we are on a MR if eventType == triggertype.PullRequest || provider.Valid(event.EventType, anyMergeRequestEventType) { mopt := &gitlab.CreateMergeRequestNoteOptions{Body: gitlab.Ptr(body)} - _, _, err := v.Client.Notes.CreateMergeRequestNote(event.TargetProjectID, event.PullRequestNumber, mopt) + _, _, err := v.Client().Notes.CreateMergeRequestNote(event.TargetProjectID, event.PullRequestNumber, mopt) return err } return nil } func (v *Provider) GetTektonDir(_ context.Context, event *info.Event, path, provenance string) (string, error) { - if v.Client == nil { + if v.gitlabClient == nil { return "", fmt.Errorf("no gitlab client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -272,7 +307,7 @@ func (v *Provider) GetTektonDir(_ context.Context, event *info.Event, path, prov nodes := []*gitlab.TreeNode{} for { - objects, resp, err := v.Client.Repositories.ListTree(v.sourceProjectID, opt, options...) + objects, resp, err := v.Client().Repositories.ListTree(v.sourceProjectID, opt, options...) if err != nil { return "", fmt.Errorf("failed to list %s dir: %w", path, err) } @@ -323,7 +358,7 @@ func (v *Provider) getObject(fname, branch string, pid int) ([]byte, *gitlab.Res opt := &gitlab.GetRawFileOptions{ Ref: gitlab.Ptr(branch), } - file, resp, err := v.Client.RepositoryFiles.GetRawFile(pid, fname, opt) + file, resp, err := v.Client().RepositoryFiles.GetRawFile(pid, fname, opt) if err != nil { return []byte{}, resp, fmt.Errorf("failed to get filename from api %s dir: %w", fname, err) } @@ -342,14 +377,14 @@ func (v *Provider) GetFileInsideRepo(_ context.Context, runevent *info.Event, pa } func (v *Provider) GetCommitInfo(_ context.Context, runevent *info.Event) error { - if v.Client == nil { + if v.gitlabClient == nil { return fmt.Errorf("%s", noClientErrStr) } // if we don't have a SHA (ie: incoming-webhook) then get it from the branch // and populate in the runevent. if runevent.SHA == "" && runevent.HeadBranch != "" { - branchinfo, _, err := v.Client.Commits.GetCommit(v.sourceProjectID, runevent.HeadBranch, &gitlab.GetCommitOptions{}) + branchinfo, _, err := v.Client().Commits.GetCommit(v.sourceProjectID, runevent.HeadBranch, &gitlab.GetCommitOptions{}) if err != nil { return err } @@ -362,7 +397,7 @@ func (v *Provider) GetCommitInfo(_ context.Context, runevent *info.Event) error } func (v *Provider) GetFiles(_ context.Context, runevent *info.Event) (changedfiles.ChangedFiles, error) { - if v.Client == nil { + if v.gitlabClient == nil { return changedfiles.ChangedFiles{}, fmt.Errorf("no gitlab client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } @@ -379,7 +414,7 @@ func (v *Provider) GetFiles(_ context.Context, runevent *info.Event) (changedfil changedFiles := changedfiles.ChangedFiles{} for { - mrchanges, resp, err := v.Client.MergeRequests.ListMergeRequestDiffs(v.targetProjectID, runevent.PullRequestNumber, opt, options...) + mrchanges, resp, err := v.Client().MergeRequests.ListMergeRequestDiffs(v.targetProjectID, runevent.PullRequestNumber, opt, options...) if err != nil { return changedfiles.ChangedFiles{}, err } @@ -414,7 +449,7 @@ func (v *Provider) GetFiles(_ context.Context, runevent *info.Event) (changedfil } if runevent.TriggerTarget == "push" { - pushChanges, _, err := v.Client.Commits.GetCommitDiff(v.sourceProjectID, runevent.SHA, &gitlab.GetCommitDiffOptions{}) + pushChanges, _, err := v.Client().Commits.GetCommitDiff(v.sourceProjectID, runevent.SHA, &gitlab.GetCommitDiffOptions{}) if err != nil { return changedfiles.ChangedFiles{}, err } @@ -445,11 +480,11 @@ func (v *Provider) CreateToken(_ context.Context, _ []string, _ *info.Event) (st // isHeadCommitOfBranch validates that branch exists and the SHA is HEAD commit of the branch. func (v *Provider) isHeadCommitOfBranch(runevent *info.Event, branchName string) error { - if v.Client == nil { + if v.gitlabClient == nil { return fmt.Errorf("no gitlab client has been initialized, " + "exiting... (hint: did you forget setting a secret on your repo?)") } - branch, _, err := v.Client.Branches.GetBranch(v.sourceProjectID, branchName) + branch, _, err := v.Client().Branches.GetBranch(v.sourceProjectID, branchName) if err != nil { return err } diff --git a/pkg/provider/gitlab/gitlab_test.go b/pkg/provider/gitlab/gitlab_test.go index a5fb2b062..58673f01b 100644 --- a/pkg/provider/gitlab/gitlab_test.go +++ b/pkg/provider/gitlab/gitlab_test.go @@ -228,7 +228,7 @@ func TestCreateStatus(t *testing.T) { if tt.wantClient { client, mux, tearDown := thelp.Setup(t) - v.Client = client + v.SetGitlabClient(client) defer tearDown() thelp.MuxNotePost(t, mux, v.targetProjectID, tt.args.event.PullRequestNumber, tt.args.postStr) } @@ -243,7 +243,7 @@ func TestCreateStatus(t *testing.T) { func TestGetCommitInfo(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) client, _, tearDown := thelp.Setup(t) - v := &Provider{Client: client} + v := &Provider{gitlabClient: client} defer tearDown() assert.NilError(t, v.GetCommitInfo(ctx, info.NewEvent())) @@ -265,7 +265,7 @@ func TestSetClient(t *testing.T) { client, _, tearDown := thelp.Setup(t) defer tearDown() - vv := &Provider{Client: client} + vv := &Provider{gitlabClient: client} err := vv.SetClient(ctx, nil, &info.Event{ Provider: &info.Provider{ Token: "hello", @@ -280,7 +280,7 @@ func TestSetClientDetectAPIURL(t *testing.T) { ctx, _ := rtesting.SetupFakeContext(t) client, _, tearDown := thelp.Setup(t) defer tearDown() - v := &Provider{Client: client} + v := &Provider{gitlabClient: client} event := info.NewEvent() err := v.SetClient(ctx, nil, event, nil, nil) assert.ErrorContains(t, err, "no git_provider.secret has been set") @@ -446,7 +446,7 @@ func TestGetTektonDir(t *testing.T) { } if tt.wantClient { client, mux, tearDown := thelp.Setup(t) - v.Client = client + v.SetGitlabClient(client) muxbranch := tt.args.event.HeadBranch if tt.args.provenance == "default_branch" { muxbranch = tt.args.event.DefaultBranch @@ -485,7 +485,7 @@ func TestGetFileInsideRepo(t *testing.T) { } v := Provider{ sourceProjectID: 10, - Client: client, + gitlabClient: client, } thelp.MuxListTektonDir(t, mux, v.sourceProjectID, event.HeadBranch, content, false, false) got, err := v.GetFileInsideRepo(ctx, event, "pr.yaml", "") @@ -714,7 +714,7 @@ func TestGetFiles(t *testing.T) { }) } - providerInfo := &Provider{Client: fakeclient, sourceProjectID: tt.sourceProjectID, targetProjectID: tt.targetProjectID} + providerInfo := &Provider{gitlabClient: fakeclient, sourceProjectID: tt.sourceProjectID, targetProjectID: tt.targetProjectID} changedFiles, err := providerInfo.GetFiles(ctx, tt.event) if tt.wantError != true { assert.NilError(t, err, nil) @@ -788,7 +788,7 @@ func TestIsHeadCommitOfBranch(t *testing.T) { defer teardown() glProvider := &Provider{sourceProjectID: 1} if tt.wantClient { - glProvider.Client = fakeclient + glProvider.SetGitlabClient(fakeclient) mux.HandleFunc("/projects/1/repository/branches/cool-branch", func(rw http.ResponseWriter, _ *http.Request) { if tt.errStatusCode != 0 { diff --git a/pkg/provider/gitlab/parse_payload.go b/pkg/provider/gitlab/parse_payload.go index 0b78ee4a9..4655941a6 100644 --- a/pkg/provider/gitlab/parse_payload.go +++ b/pkg/provider/gitlab/parse_payload.go @@ -173,7 +173,7 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, request *h func (v *Provider) initGitlabClient(ctx context.Context, event *info.Event) (*info.Event, error) { // This is to ensure the base URL of the client is not reinitialized during tests. - if v.Client != nil { + if v.gitlabClient != nil { return event, nil } diff --git a/pkg/provider/gitlab/parse_payload_test.go b/pkg/provider/gitlab/parse_payload_test.go index 9c389eeea..30225e8d7 100644 --- a/pkg/provider/gitlab/parse_payload_test.go +++ b/pkg/provider/gitlab/parse_payload_test.go @@ -364,7 +364,7 @@ func TestParsePayload(t *testing.T) { } if tt.wantClient { client, mux, tearDown := thelp.Setup(t) - v.Client = client + v.SetGitlabClient(client) branchName := "main" if tt.wantBranch != "" { branchName = tt.wantBranch diff --git a/pkg/reconciler/emit_metrics_test.go b/pkg/reconciler/emit_metrics_test.go index 9b5a23259..d6c0aaa7f 100644 --- a/pkg/reconciler/emit_metrics_test.go +++ b/pkg/reconciler/emit_metrics_test.go @@ -102,7 +102,7 @@ func TestCountPipelineRun(t *testing.T) { metricstest.AssertNoMetric(t, "pipelines_as_code_pipelinerun_count") if err = r.countPipelineRun(pr); (err != nil) != tt.wantErr { - t.Errorf("countPipelineRun() error = %v, wantErr %v", err != nil, tt.wantErr) + t.Errorf("countPipelineRun() error = %v, wantErr %v. error: %v", err != nil, tt.wantErr, err) } if !tt.wantErr { @@ -308,9 +308,12 @@ func TestCountRunningPRs(t *testing.T) { } func unregisterMetrics() { - metricstest.Unregister("pipelines_as_code_pipelinerun_count", + metricstest.Unregister( + "pipelines_as_code_pipelinerun_count", "pipelines_as_code_pipelinerun_duration_seconds_sum", - "pipelines_as_code_running_pipelineruns_count") + "pipelines_as_code_running_pipelineruns_count", + "pipelines_as_code_git_provider_api_request_count", + ) // have to reset sync.Once to allow recreation of Recorder. metrics.ResetRecorder() diff --git a/pkg/reconciler/reconciler_test.go b/pkg/reconciler/reconciler_test.go index 41dd9b14b..416e53dc9 100644 --- a/pkg/reconciler/reconciler_test.go +++ b/pkg/reconciler/reconciler_test.go @@ -66,10 +66,11 @@ func TestReconciler_ReconcileKind(t *testing.T) { defer teardown() vcx := &ghprovider.Provider{ - Client: fakeclient, - Token: github.Ptr("None"), + Token: github.Ptr("None"), } + vcx.SetGithubClient(fakeclient) + tests := []struct { name string finalStatus string diff --git a/test/bitbucket_cloud_pullrequest_test.go b/test/bitbucket_cloud_pullrequest_test.go index 776275f19..d86336004 100644 --- a/test/bitbucket_cloud_pullrequest_test.go +++ b/test/bitbucket_cloud_pullrequest_test.go @@ -95,7 +95,7 @@ func TestBitbucketCloudPullRequestCancelInProgressMerged(t *testing.T) { Owner: opts.Organization, ID: fmt.Sprintf("%d", pr.ID), } - _, err = bprovider.Client.Repositories.PullRequests.Decline(po) + _, err = bprovider.Client().Repositories.PullRequests.Decline(po) assert.NilError(t, err) runcnx.Clients.Log.Info("Waiting 10 seconds to check things has been canceled") diff --git a/test/gitea_access_control_test.go b/test/gitea_access_control_test.go index 5c137d392..2ac3fce7e 100644 --- a/test/gitea_access_control_test.go +++ b/test/gitea_access_control_test.go @@ -64,7 +64,7 @@ func TestGiteaPolicyPullRequest(t *testing.T) { normalUserNamePasswd := fmt.Sprintf("normal-%s", topts.TargetRefName) normalUserCnx, normalUser, err := tgitea.CreateGiteaUserSecondCnx(topts, normalUserNamePasswd, normalUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(normalTeam.ID, normalUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(normalTeam.ID, normalUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", normalUser.UserName, normalTeam.Name) tgitea.CreateForkPullRequest(t, topts, normalUserCnx, "") @@ -79,7 +79,7 @@ func TestGiteaPolicyPullRequest(t *testing.T) { pullRequesterUserNamePasswd := fmt.Sprintf("pullRequester-%s", topts.TargetRefName) pullRequesterUserCnx, pullRequesterUser, err := tgitea.CreateGiteaUserSecondCnx(topts, pullRequesterUserNamePasswd, pullRequesterUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(pullRequesterTeam.ID, pullRequesterUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(pullRequesterTeam.ID, pullRequesterUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", pullRequesterUser.UserName, pullRequesterTeam.Name) tgitea.CreateForkPullRequest(t, topts, pullRequesterUserCnx, "") @@ -124,7 +124,7 @@ func TestGiteaPolicyOkToTestRetest(t *testing.T) { okToTestUserNamePasswd := fmt.Sprintf("ok-to-test-%s", topts.TargetRefName) okToTestUserCnx, okToTestUser, err := tgitea.CreateGiteaUserSecondCnx(topts, okToTestUserNamePasswd, okToTestUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(oktotestTeam.ID, okToTestUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(oktotestTeam.ID, okToTestUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", okToTestUser.UserName, oktotestTeam.Name) @@ -134,7 +134,7 @@ func TestGiteaPolicyOkToTestRetest(t *testing.T) { normalUserNamePasswd := fmt.Sprintf("normal-%s", topts.TargetRefName) normalUserCnx, normalUser, err := tgitea.CreateGiteaUserSecondCnx(topts, normalUserNamePasswd, normalUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(normalTeam.ID, normalUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(normalTeam.ID, normalUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", normalUser.UserName, normalTeam.Name) @@ -315,7 +315,7 @@ func TestGiteaACLCommentsAllowingRememberOkToTestFalse(t *testing.T) { tgitea.PushToPullRequest(t, topts, secondcnx, "echo Hello from user "+topts.TargetRefName) // get the latest PR for the new sha - pr, _, err := topts.GiteaCNX.Client.GetPullRequest("pac", topts.PullRequest.Head.Name, topts.PullRequest.Index) + pr, _, err := topts.GiteaCNX.Client().GetPullRequest("pac", topts.PullRequest.Head.Name, topts.PullRequest.Index) assert.NilError(t, err) // status of CI is pending because pushed to PR and remember-ok-to-test is false @@ -398,7 +398,7 @@ func TestGiteaPolicyAllowedOwnerFiles(t *testing.T) { normalUserNamePasswd := fmt.Sprintf("normal-%s", topts.TargetRefName) _, normalUser, err := tgitea.CreateGiteaUserSecondCnx(topts, normalUserNamePasswd, normalUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(normalTeam.ID, normalUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(normalTeam.ID, normalUser.UserName) assert.NilError(t, err) // create an allowed user w @@ -481,7 +481,7 @@ func TestGiteaPolicyOnComment(t *testing.T) { normalUserNamePasswd := fmt.Sprintf("normal-%s", topts.TargetRefName) normalUserCnx, normalUser, err := tgitea.CreateGiteaUserSecondCnx(topts, normalUserNamePasswd, normalUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(normalTeam.ID, normalUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(normalTeam.ID, normalUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", normalUser.UserName, normalTeam.Name) tgitea.CreateForkPullRequest(t, topts, normalUserCnx, "") @@ -500,7 +500,7 @@ func TestGiteaPolicyOnComment(t *testing.T) { pullRequesterUserNamePasswd := fmt.Sprintf("pullRequester-%s", topts.TargetRefName) pullRequesterUserCnx, pullRequesterUser, err := tgitea.CreateGiteaUserSecondCnx(topts, pullRequesterUserNamePasswd, pullRequesterUserNamePasswd) assert.NilError(t, err) - _, err = topts.GiteaCNX.Client.AddTeamMember(pullRequesterTeam.ID, pullRequesterUser.UserName) + _, err = topts.GiteaCNX.Client().AddTeamMember(pullRequesterTeam.ID, pullRequesterUser.UserName) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("User %s has been added to team %s", pullRequesterUser.UserName, pullRequesterTeam.Name) topts.GiteaCNX = pullRequesterUserCnx diff --git a/test/gitea_params_test.go b/test/gitea_params_test.go index f78aa444e..368914c27 100644 --- a/test/gitea_params_test.go +++ b/test/gitea_params_test.go @@ -47,7 +47,7 @@ func TestGiteaParamsStandardCheckForPushAndPullEvent(t *testing.T) { } _, f := tgitea.TestPR(t, topts) defer f() - merged, resp, err := topts.GiteaCNX.Client.MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, + merged, resp, err := topts.GiteaCNX.Client().MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.MergePullRequestOption{ Title: "Merged with Panache", Style: "merge", @@ -355,7 +355,7 @@ my email is a true beauty and like groot, I AM pac` assert.NilError(t, err) // Merge the pull request so we can generate a push event and wait that it is updated - merged, resp, err := topts.GiteaCNX.Client.MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, + merged, resp, err := topts.GiteaCNX.Client().MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.MergePullRequestOption{ Title: "Merged with Panache", Style: "merge", @@ -439,7 +439,7 @@ func TestGiteaParamsChangedFilesCEL(t *testing.T) { // ====================================================================================================================== // Merge the pull request so we can generate a push event and wait that it is updated // ====================================================================================================================== - merged, resp, err := topts.GiteaCNX.Client.MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, + merged, resp, err := topts.GiteaCNX.Client().MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.MergePullRequestOption{ Title: "Merged with Panache", Style: "merge", @@ -486,7 +486,7 @@ func TestGiteaParamsChangedFilesCEL(t *testing.T) { // ====================================================================================================================== // Merge the pull request so we can generate a second push event and wait that it is updated // ====================================================================================================================== - merged, resp, err = topts.GiteaCNX.Client.MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, + merged, resp, err = topts.GiteaCNX.Client().MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.MergePullRequestOption{ Title: "Merged with Panache", Style: "merge", diff --git a/test/gitea_test.go b/test/gitea_test.go index 4b27f25bb..23a3f34e5 100644 --- a/test/gitea_test.go +++ b/test/gitea_test.go @@ -445,7 +445,7 @@ func TestGiteaConfigCancelInProgress(t *testing.T) { } _ = scm.PushFilesToRefGit(t, scmOpts, entries) - pr, _, err := topts.GiteaCNX.Client.CreatePullRequest(topts.Opts.Organization, topts.Opts.Repo, gitea.CreatePullRequestOption{ + pr, _, err := topts.GiteaCNX.Client().CreatePullRequest(topts.Opts.Organization, topts.Opts.Repo, gitea.CreatePullRequestOption{ Title: "Test Pull Request - " + targetRef, Head: targetRef, Base: topts.DefaultBranch, @@ -508,7 +508,7 @@ func TestGiteaConfigCancelInProgressAfterPRClosed(t *testing.T) { assert.NilError(t, err) closed := gitea.StateClosed - _, _, err = topts.GiteaCNX.Client.EditPullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.EditPullRequestOption{ + _, _, err = topts.GiteaCNX.Client().EditPullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.EditPullRequestOption{ State: &closed, }) assert.NilError(t, err) @@ -535,7 +535,7 @@ func TestGiteaPush(t *testing.T) { } _, f := tgitea.TestPR(t, topts) defer f() - merged, resp, err := topts.GiteaCNX.Client.MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, + merged, resp, err := topts.GiteaCNX.Client().MergePullRequest(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.MergePullRequestOption{ Title: "Merged with Panache", Style: "merge", @@ -1059,7 +1059,7 @@ func verifyProvenance(t *testing.T, topts *tgitea.TestOpts, expectedOutput, cNam scmOpts.TargetRefName = targetRef _ = scm.PushFilesToRefGit(t, scmOpts, entries) - pr, _, err := topts.GiteaCNX.Client.CreatePullRequest(topts.Opts.Organization, targetRef, gitea.CreatePullRequestOption{ + pr, _, err := topts.GiteaCNX.Client().CreatePullRequest(topts.Opts.Organization, targetRef, gitea.CreatePullRequestOption{ Title: "Test Pull Request - " + targetRef, Head: targetRef, Base: options.MainBranch, diff --git a/test/github_config_maxkeepruns_test.go b/test/github_config_maxkeepruns_test.go index 554576d4b..69aa7a9d8 100644 --- a/test/github_config_maxkeepruns_test.go +++ b/test/github_config_maxkeepruns_test.go @@ -27,7 +27,7 @@ func TestGithubMaxKeepRuns(t *testing.T) { defer g.TearDown(ctx, t) g.Cnx.Clients.Log.Infof("Creating /retest in PullRequest") - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &ghlib.IssueComment{Body: ghlib.Ptr("/retest")}) assert.NilError(t, err) diff --git a/test/github_incoming_test.go b/test/github_incoming_test.go index 05866834d..36301862c 100644 --- a/test/github_incoming_test.go +++ b/test/github_incoming_test.go @@ -81,7 +81,7 @@ func verifyIncomingWebhook(t *testing.T, randomedString, pipelinerunName string, logmsg := fmt.Sprintf("Testing %s with Github APPS integration on %s", label, randomedString) runcnx.Clients.Log.Info(logmsg) - repoinfo, resp, err := ghprovider.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghprovider.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -110,7 +110,7 @@ func verifyIncomingWebhook(t *testing.T, randomedString, pipelinerunName string, targetRefName := fmt.Sprintf("refs/heads/%s", randomedString) title := "TestGithubAppIncoming - " + randomedString - sha, vref, err := tgithub.PushFilesToRef(ctx, ghprovider.Client, title, + sha, vref, err := tgithub.PushFilesToRef(ctx, ghprovider.Client(), title, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, diff --git a/test/github_pullrequest_concurrency_multiplepr_test.go b/test/github_pullrequest_concurrency_multiplepr_test.go index 0054a33f8..37bded287 100644 --- a/test/github_pullrequest_concurrency_multiplepr_test.go +++ b/test/github_pullrequest_concurrency_multiplepr_test.go @@ -46,7 +46,7 @@ func TestGithubSecondPullRequestConcurrencyMultiplePR(t *testing.T) { runcnx.Clients.Log.Infof("Starting %d pipelineruns, (numberOfPullRequest=%d*numberOfPipelineRuns=%d) + (numberOfPullRequest=%d*numberOfRetests=%d*numberOfPipelineRuns=%d) Should end after clean up (maxKeepRun=%d) with %d", allPipelinesRunsCnt, numberOfPullRequest, numberOfPipelineRuns, numberOfPullRequest, numberOfRetests, numberOfPipelineRuns, maxKeepRun, allPipelinesRunAfterCleanUp) - repoinfo, resp, err := ghcnx.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghcnx.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -74,7 +74,7 @@ func TestGithubSecondPullRequestConcurrencyMultiplePR(t *testing.T) { targetRefName := fmt.Sprintf("refs/heads/%s", names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")) - sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client, logmsg, repoinfo.GetDefaultBranch(), targetRefName, + sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client(), logmsg, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit %s has been created and pushed to %s", sha, vref.GetURL()) @@ -98,7 +98,7 @@ func TestGithubSecondPullRequestConcurrencyMultiplePR(t *testing.T) { // send some retest to spice things up on concurrency and test the maxKeepRun for i := 0; i < numberOfRetests; i++ { for _, g := range allPullRequests { - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/retest")}) diff --git a/test/github_pullrequest_concurrency_test.go b/test/github_pullrequest_concurrency_test.go index a385135d8..bf2b67e7f 100644 --- a/test/github_pullrequest_concurrency_test.go +++ b/test/github_pullrequest_concurrency_test.go @@ -154,7 +154,7 @@ func setupGithubConcurrency(ctx context.Context, t *testing.T, maxNumberOfConcur logmsg := fmt.Sprintf("Testing %s with Github APPS integration on %s", label, targetNS) runcnx.Clients.Log.Info(logmsg) - repoinfo, resp, err := ghcnx.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghcnx.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -178,7 +178,7 @@ func setupGithubConcurrency(ctx context.Context, t *testing.T, maxNumberOfConcur targetRefName := fmt.Sprintf("refs/heads/%s", names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")) - sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client, logmsg, repoinfo.GetDefaultBranch(), targetRefName, + sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client(), logmsg, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit %s has been created and pushed to %s", sha, vref.GetURL()) diff --git a/test/github_pullrequest_oktotest_test.go b/test/github_pullrequest_oktotest_test.go index 4bed744f1..220c79f0b 100644 --- a/test/github_pullrequest_oktotest_test.go +++ b/test/github_pullrequest_oktotest_test.go @@ -33,7 +33,7 @@ func TestGithubPullRequestOkToTest(t *testing.T) { g.RunPullRequest(ctx, t) defer g.TearDown(ctx, t) - repoinfo, resp, err := g.Provider.Client.Repositories.Get(ctx, g.Options.Organization, g.Options.Repo) + repoinfo, resp, err := g.Provider.Client().Repositories.Get(ctx, g.Options.Organization, g.Options.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", g.Options.Organization, g.Options.Repo) diff --git a/test/github_pullrequest_rerequest_test.go b/test/github_pullrequest_rerequest_test.go index 3aaa23472..06f7fca8c 100644 --- a/test/github_pullrequest_rerequest_test.go +++ b/test/github_pullrequest_rerequest_test.go @@ -34,7 +34,7 @@ func TestGithubPullRerequest(t *testing.T) { g.RunPullRequest(ctx, t) defer g.TearDown(ctx, t) - repoinfo, resp, err := g.Provider.Client.Repositories.Get(ctx, g.Options.Organization, g.Options.Repo) + repoinfo, resp, err := g.Provider.Client().Repositories.Get(ctx, g.Options.Organization, g.Options.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", g.Options.Organization, g.Options.Repo) diff --git a/test/github_pullrequest_retest_test.go b/test/github_pullrequest_retest_test.go index 40d80196e..c7c29521c 100644 --- a/test/github_pullrequest_retest_test.go +++ b/test/github_pullrequest_retest_test.go @@ -35,7 +35,7 @@ func TestGithubSecondPullRequestGitopsCommentRetest(t *testing.T) { defer g.TearDown(ctx, t) g.Cnx.Clients.Log.Infof("Creating /retest in PullRequest") - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/retest")}) @@ -76,7 +76,7 @@ func TestGithubSecondPullRequestGitopsCommentCancel(t *testing.T) { assert.Equal(t, len(pruns.Items), 2) g.Cnx.Clients.Log.Info("/test pr-gitops-comment on Pull Request before canceling") - _, _, err = g.Provider.Client.Issues.CreateComment(ctx, + _, _, err = g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, @@ -94,7 +94,7 @@ func TestGithubSecondPullRequestGitopsCommentCancel(t *testing.T) { assert.NilError(t, err) g.Cnx.Clients.Log.Infof("/cancel pr-gitops-comment on Pull Request") - _, _, err = g.Provider.Client.Issues.CreateComment(ctx, + _, _, err = g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/cancel pr-gitops-comment")}) diff --git a/test/github_pullrequest_test.go b/test/github_pullrequest_test.go index 82008fb13..f7eee307c 100644 --- a/test/github_pullrequest_test.go +++ b/test/github_pullrequest_test.go @@ -89,7 +89,7 @@ func TestGithubPullRequestOnLabel(t *testing.T) { time.Sleep(5 * time.Second) g.Cnx.Clients.Log.Infof("Creating a label bug on PullRequest") - _, _, err := g.Provider.Client.Issues.AddLabelsToIssue(ctx, + _, _, err := g.Provider.Client().Issues.AddLabelsToIssue(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, []string{"bug"}) @@ -109,7 +109,7 @@ func TestGithubPullRequestOnLabel(t *testing.T) { resp := &github.Response{} counter := 0 for { - res, resp, err = g.Provider.Client.Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ + res, resp, err = g.Provider.Client().Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ AppID: g.Provider.ApplicationID, ListOptions: opt, }) @@ -177,7 +177,7 @@ func TestGithubPullRequestSecondBadYaml(t *testing.T) { var err error counter := 0 for { - res, resp, err = g.Provider.Client.Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ + res, resp, err = g.Provider.Client().Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ AppID: g.Provider.ApplicationID, ListOptions: opt, }) @@ -222,7 +222,7 @@ func TestGithubPullRequestInvalidSpecValues(t *testing.T) { var err error counter := 0 for { - res, resp, err = g.Provider.Client.Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ + res, resp, err = g.Provider.Client().Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ AppID: g.Provider.ApplicationID, Status: github.Ptr("completed"), ListOptions: opt, @@ -260,7 +260,7 @@ func TestGithubSecondTestExplicitelyNoMatchedPipelineRun(t *testing.T) { defer g.TearDown(ctx, t) g.Cnx.Clients.Log.Infof("Creating /test no-match on PullRequest") - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/test no-match")}) @@ -298,7 +298,7 @@ func TestGithubSecondCancelInProgress(t *testing.T) { time.Sleep(10 * time.Second) g.Cnx.Clients.Log.Infof("Creating /retest on PullRequest") - _, _, err = g.Provider.Client.Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, + _, _, err = g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/retest")}) assert.NilError(t, err) @@ -369,7 +369,7 @@ func TestGithubSecondCancelInProgressPRClosed(t *testing.T) { assert.NilError(t, err) g.Cnx.Clients.Log.Infof("Closing the PullRequest") - _, _, err = g.Provider.Client.PullRequests.Edit(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.PullRequest{ + _, _, err = g.Provider.Client().PullRequests.Edit(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.PullRequest{ State: github.Ptr("closed"), }) assert.NilError(t, err) @@ -385,7 +385,7 @@ func TestGithubSecondCancelInProgressPRClosed(t *testing.T) { assert.Equal(t, prs.Items[0].GetStatusCondition().GetCondition(apis.ConditionSucceeded).GetReason(), "Cancelled", "should have been canceled") - res, resp, err := g.Provider.Client.Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ + res, resp, err := g.Provider.Client().Checks.ListCheckRunsForRef(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.ListCheckRunsOptions{ AppID: g.Provider.ApplicationID, ListOptions: github.ListOptions{}, }) diff --git a/test/github_pullrequest_test_comment_test.go b/test/github_pullrequest_test_comment_test.go index cccac2184..ccb4f52c5 100644 --- a/test/github_pullrequest_test_comment_test.go +++ b/test/github_pullrequest_test_comment_test.go @@ -32,7 +32,7 @@ func TestGithubPullRequestTest(t *testing.T) { defer g.TearDown(ctx, t) g.Cnx.Clients.Log.Infof("Creating /test in PullRequest") - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr("/test pipeline")}) @@ -66,7 +66,7 @@ func TestGithubSecondOnCommentAnnotation(t *testing.T) { triggerComment := "/hello-world" g.Cnx.Clients.Log.Infof("Creating %s custom comment on PullRequest", triggerComment) - _, _, err := g.Provider.Client.Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, + _, _, err := g.Provider.Client().Issues.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &github.IssueComment{Body: github.Ptr(triggerComment)}) assert.NilError(t, err) sopt := twait.SuccessOpt{ diff --git a/test/github_push_retest_test.go b/test/github_push_retest_test.go index a345e2540..7ec88bc58 100644 --- a/test/github_push_retest_test.go +++ b/test/github_push_retest_test.go @@ -39,7 +39,7 @@ func TestGithubPushRequestGitOpsCommentOnComment(t *testing.T) { assert.Equal(t, len(pruns.Items), 0) g.Cnx.Clients.Log.Infof("Running ops comment %s as Push comment", opsComment) - _, _, err = g.Provider.Client.Repositories.CreateComment(ctx, + _, _, err = g.Provider.Client().Repositories.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.RepositoryComment{Body: github.Ptr(opsComment)}) @@ -95,7 +95,7 @@ func TestGithubPushRequestGitOpsCommentRetest(t *testing.T) { assert.Equal(t, len(pruns.Items), 2) g.Cnx.Clients.Log.Infof("%s on Push Request", comment) - _, _, err = g.Provider.Client.Repositories.CreateComment(ctx, + _, _, err = g.Provider.Client().Repositories.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.RepositoryComment{Body: github.Ptr(comment)}) @@ -148,7 +148,7 @@ func TestGithubPushRequestGitOpsCommentCancel(t *testing.T) { assert.Equal(t, len(pruns.Items), 2) g.Cnx.Clients.Log.Info("/test pipelinerun-on-push on Push Request before canceling") - _, _, err = g.Provider.Client.Repositories.CreateComment(ctx, + _, _, err = g.Provider.Client().Repositories.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.RepositoryComment{Body: github.Ptr("/test pipelinerun-on-push branch:" + g.TargetNamespace)}) @@ -166,7 +166,7 @@ func TestGithubPushRequestGitOpsCommentCancel(t *testing.T) { comment := "/cancel pipelinerun-on-push branch:" + g.TargetNamespace g.Cnx.Clients.Log.Infof("%s on Push Request", comment) - _, _, err = g.Provider.Client.Repositories.CreateComment(ctx, + _, _, err = g.Provider.Client().Repositories.CreateComment(ctx, g.Options.Organization, g.Options.Repo, g.SHA, &github.RepositoryComment{Body: github.Ptr(comment)}) diff --git a/test/github_scope_token_to_list_of_private_public_repos_test.go b/test/github_scope_token_to_list_of_private_public_repos_test.go index 51eef9b89..8ee55a033 100644 --- a/test/github_scope_token_to_list_of_private_public_repos_test.go +++ b/test/github_scope_token_to_list_of_private_public_repos_test.go @@ -105,7 +105,7 @@ func verifyGHTokenScope(t *testing.T, remoteTaskURL, remoteTaskName string, data }) assert.NilError(t, err) - repoinfo, resp, err := ghcnx.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghcnx.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -150,7 +150,7 @@ func verifyGHTokenScope(t *testing.T, remoteTaskURL, remoteTaskName string, data targetRefName := fmt.Sprintf("refs/heads/%s", names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")) - sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client, "TestPullRequestRemoteAnnotations - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) + sha, vref, err := tgithub.PushFilesToRef(ctx, ghcnx.Client(), "TestPullRequestRemoteAnnotations - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit %s has been created and pushed to %s", sha, vref.GetURL()) diff --git a/test/github_tkn_pac_cli_test.go b/test/github_tkn_pac_cli_test.go index 0b0604a4a..9a99bb01e 100644 --- a/test/github_tkn_pac_cli_test.go +++ b/test/github_tkn_pac_cli_test.go @@ -53,7 +53,7 @@ spec: `, targetNS, options.MainBranch, triggertype.PullRequest.String()), } - repoinfo, resp, err := ghprovider.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghprovider.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -85,7 +85,7 @@ spec: targetRefName := fmt.Sprintf("refs/heads/%s", names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")) - sha, vref, err := tgithub.PushFilesToRef(ctx, ghprovider.Client, "TestPacCli - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) + sha, vref, err := tgithub.PushFilesToRef(ctx, ghprovider.Client(), "TestPacCli - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit %s has been created and pushed to %s", sha, vref.GetURL()) diff --git a/test/gitlab_delete_tag_event_test.go b/test/gitlab_delete_tag_event_test.go index 41c35c55c..a21a7c47e 100644 --- a/test/gitlab_delete_tag_event_test.go +++ b/test/gitlab_delete_tag_event_test.go @@ -26,7 +26,7 @@ func TestGitlabDeleteTagEvent(t *testing.T) { assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -37,14 +37,14 @@ func TestGitlabDeleteTagEvent(t *testing.T) { assert.NilError(t, err) tagName := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("v1.0") - err = tgitlab.CreateTag(glprovider.Client, projectinfo.ID, tagName) + err = tgitlab.CreateTag(glprovider.Client(), projectinfo.ID, tagName) // if something goes wrong in creating tag and tag remains in // repository CleanTag will clear that and doesn't throw any error. - defer tgitlab.CleanTag(glprovider.Client, projectinfo.ID, tagName) + defer tgitlab.CleanTag(glprovider.Client(), projectinfo.ID, tagName) assert.NilError(t, err) runcnx.Clients.Log.Infof("Created Tag %s in %s repository", tagName, projectinfo.Name) - err = tgitlab.DeleteTag(glprovider.Client, projectinfo.ID, tagName) + err = tgitlab.DeleteTag(glprovider.Client(), projectinfo.ID, tagName) assert.NilError(t, err) runcnx.Clients.Log.Infof("Deleted Tag %s in %s repository", tagName, projectinfo.Name) diff --git a/test/gitlab_incoming_webhook_test.go b/test/gitlab_incoming_webhook_test.go index bd990fbcd..25a95d2bb 100644 --- a/test/gitlab_incoming_webhook_test.go +++ b/test/gitlab_incoming_webhook_test.go @@ -36,7 +36,7 @@ func TestGitlabIncomingWebhook(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) diff --git a/test/gitlab_merge_request_test.go b/test/gitlab_merge_request_test.go index 0b147a5f8..96f6b4e9e 100644 --- a/test/gitlab_merge_request_test.go +++ b/test/gitlab_merge_request_test.go @@ -38,7 +38,7 @@ func TestGitlabMergeRequest(t *testing.T) { assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -71,7 +71,7 @@ func TestGitlabMergeRequest(t *testing.T) { runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) mrTitle := "TestMergeRequest - " + targetRefName - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) @@ -102,7 +102,7 @@ func TestGitlabMergeRequest(t *testing.T) { } runcnx.Clients.Log.Infof("Sending /retest comment on MergeRequest %s/-/merge_requests/%d", projectinfo.WebURL, mrID) - _, _, err = glprovider.Client.Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ + _, _, err = glprovider.Client().Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ Body: clientGitlab.Ptr("/retest"), }) assert.NilError(t, err) @@ -117,7 +117,7 @@ func TestGitlabMergeRequest(t *testing.T) { runcnx.Clients.Log.Info("Checking that PAC has posted successful comments for all PR that has been tested") twait.Succeeded(ctx, t, runcnx, opts, sopt) - notes, _, err := glprovider.Client.Notes.ListMergeRequestNotes(opts.ProjectID, mrID, nil) + notes, _, err := glprovider.Client().Notes.ListMergeRequestNotes(opts.ProjectID, mrID, nil) assert.NilError(t, err) successCommentsPost := 0 for _, n := range notes { @@ -139,7 +139,7 @@ func TestGitlabOnLabel(t *testing.T) { assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -169,7 +169,7 @@ func TestGitlabOnLabel(t *testing.T) { runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) mrTitle := "TestMergeRequest - " + targetRefName - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) @@ -181,7 +181,7 @@ func TestGitlabOnLabel(t *testing.T) { assert.Assert(t, len(prsNew.Items) == 0) // now add a Label - mr, _, err := glprovider.Client.MergeRequests.UpdateMergeRequest(opts.ProjectID, mrID, &clientGitlab.UpdateMergeRequestOptions{ + mr, _, err := glprovider.Client().MergeRequests.UpdateMergeRequest(opts.ProjectID, mrID, &clientGitlab.UpdateMergeRequestOptions{ Labels: &clientGitlab.LabelOptions{"bug"}, }) assert.NilError(t, err) @@ -209,7 +209,7 @@ func TestGitlabOnComment(t *testing.T) { assert.NilError(t, err) runcnx.Clients.Log.Info("Testing Gitlab on Comment matches") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -238,12 +238,12 @@ func TestGitlabOnComment(t *testing.T) { runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) mrTitle := "TestMergeRequest - " + targetRefName - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) - note, _, err := glprovider.Client.Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ + note, _, err := glprovider.Client().Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ Body: github.Ptr(triggerComment), }) assert.NilError(t, err) @@ -258,7 +258,7 @@ func TestGitlabOnComment(t *testing.T) { twait.Succeeded(ctx, t, runcnx, opts, sopt) // get pull request info - mr, _, err := glprovider.Client.MergeRequests.GetMergeRequest(opts.ProjectID, mrID, nil) + mr, _, err := glprovider.Client().MergeRequests.GetMergeRequest(opts.ProjectID, mrID, nil) assert.NilError(t, err) waitOpts := twait.Opts{ @@ -286,7 +286,7 @@ func TestGitlabCancelInProgressOnChange(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing Gitlab cancel in progress on pr close") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -316,7 +316,7 @@ func TestGitlabCancelInProgressOnChange(t *testing.T) { oldSha := scm.PushFilesToRefGit(t, scmOpts, entries) runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) @@ -371,7 +371,7 @@ func TestGitlabCancelInProgressOnPRClose(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing Gitlab cancel in progress on pr close") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -401,7 +401,7 @@ func TestGitlabCancelInProgressOnPRClose(t *testing.T) { sha := scm.PushFilesToRefGit(t, scmOpts, entries) runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) @@ -416,7 +416,7 @@ func TestGitlabCancelInProgressOnPRClose(t *testing.T) { } err = twait.UntilPipelineRunCreated(ctx, runcnx.Clients, waitOpts) assert.NilError(t, err) - _, _, err = glprovider.Client.MergeRequests.UpdateMergeRequest(opts.ProjectID, mrID, &clientGitlab.UpdateMergeRequestOptions{ + _, _, err = glprovider.Client().MergeRequests.UpdateMergeRequest(opts.ProjectID, mrID, &clientGitlab.UpdateMergeRequestOptions{ StateEvent: clientGitlab.Ptr("close"), }) assert.NilError(t, err) @@ -444,7 +444,7 @@ func TestGitlabIssueGitopsComment(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing Gitlabs test/retest comments") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -475,12 +475,12 @@ func TestGitlabIssueGitopsComment(t *testing.T) { _ = scm.PushFilesToRefGit(t, scmOpts, entries) runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetRefName) - mrID, err := tgitlab.CreateMR(glprovider.Client, opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) + mrID, err := tgitlab.CreateMR(glprovider.Client(), opts.ProjectID, targetRefName, projectinfo.DefaultBranch, mrTitle) assert.NilError(t, err) runcnx.Clients.Log.Infof("MergeRequest %s/-/merge_requests/%d has been created", projectinfo.WebURL, mrID) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, mrID, targetRefName, targetNS, opts.ProjectID) - _, _, err = glprovider.Client.Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ + _, _, err = glprovider.Client().Notes.CreateMergeRequestNote(opts.ProjectID, mrID, &clientGitlab.CreateMergeRequestNoteOptions{ Body: clientGitlab.Ptr("/test no-match"), }) assert.NilError(t, err) diff --git a/test/gitlab_push_gitops_command_test.go b/test/gitlab_push_gitops_command_test.go index 8bdc8bc20..7c52bcfab 100644 --- a/test/gitlab_push_gitops_command_test.go +++ b/test/gitlab_push_gitops_command_test.go @@ -31,7 +31,7 @@ func TestGitlabGitOpsCommandTestOnPush(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -60,7 +60,7 @@ func TestGitlabGitOpsCommandTestOnPush(t *testing.T) { runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetNs) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, -1, targetNs, targetNs, opts.ProjectID) - branch, _, err := glprovider.Client.Branches.GetBranch(opts.ProjectID, targetNs) + branch, _, err := glprovider.Client().Branches.GetBranch(opts.ProjectID, targetNs) assert.NilError(t, err) waitOpts := wait.Opts{ @@ -77,7 +77,7 @@ func TestGitlabGitOpsCommandTestOnPush(t *testing.T) { commentOpts := &gitlab.PostCommitCommentOptions{ Note: gitlab.Ptr("/test branch:" + targetNs), } - cc, _, err := glprovider.Client.Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) + cc, _, err := glprovider.Client().Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit comment %s has been created", cc.Note) @@ -101,7 +101,7 @@ func TestGitlabGitOpsCommandCancelOnPush(t *testing.T) { ctx, err = cctx.GetControllerCtxInfo(ctx, runcnx) assert.NilError(t, err) runcnx.Clients.Log.Info("Testing with Gitlab") - projectinfo, resp, err := glprovider.Client.Projects.GetProject(opts.ProjectID, nil) + projectinfo, resp, err := glprovider.Client().Projects.GetProject(opts.ProjectID, nil) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -130,13 +130,13 @@ func TestGitlabGitOpsCommandCancelOnPush(t *testing.T) { runcnx.Clients.Log.Infof("Branch %s has been created and pushed with files", targetNs) defer tgitlab.TearDown(ctx, t, runcnx, glprovider, -1, targetNs, targetNs, opts.ProjectID) - branch, _, err := glprovider.Client.Branches.GetBranch(opts.ProjectID, targetNs) + branch, _, err := glprovider.Client().Branches.GetBranch(opts.ProjectID, targetNs) assert.NilError(t, err) commentOpts := &gitlab.PostCommitCommentOptions{ Note: gitlab.Ptr("/test branch:" + targetNs), } - cc, _, err := glprovider.Client.Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) + cc, _, err := glprovider.Client().Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit comment %s has been created", cc.Note) @@ -159,7 +159,7 @@ func TestGitlabGitOpsCommandCancelOnPush(t *testing.T) { commentOpts = &gitlab.PostCommitCommentOptions{ Note: gitlab.Ptr("/cancel pipelinerun-on-push branch:" + targetNs), } - cc, _, err = glprovider.Client.Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) + cc, _, err = glprovider.Client().Commits.PostCommitComment(opts.ProjectID, branch.Commit.ID, commentOpts) assert.NilError(t, err) runcnx.Clients.Log.Infof("Commit comment %s has been created", cc.Note) diff --git a/test/pkg/bitbucketcloud/crd.go b/test/pkg/bitbucketcloud/crd.go index abe27388f..12ed3f9d6 100644 --- a/test/pkg/bitbucketcloud/crd.go +++ b/test/pkg/bitbucketcloud/crd.go @@ -19,7 +19,7 @@ import ( ) func CreateCRD(ctx context.Context, t *testing.T, bprovider bitbucketcloud.Provider, run *params.Run, opts options.E2E, targetNS string) *bitbucket.Repository { - repo, err := bprovider.Client.Workspaces.Repositories.Repository.Get( + repo, err := bprovider.Client().Workspaces.Repositories.Repository.Get( &bitbucket.RepositoryOptions{ Owner: opts.Organization, RepoSlug: opts.Repo, diff --git a/test/pkg/bitbucketcloud/pr.go b/test/pkg/bitbucketcloud/pr.go index 1ff06d3e9..f38bd822a 100644 --- a/test/pkg/bitbucketcloud/pr.go +++ b/test/pkg/bitbucketcloud/pr.go @@ -30,7 +30,7 @@ func MakePR(t *testing.T, bprovider bitbucketcloud.Provider, runcnx *params.Run, }) } - err := bprovider.Client.Workspaces.Repositories.Repository.WriteFileBlob(&bitbucket.RepositoryBlobWriteOptions{ + err := bprovider.Client().Workspaces.Repositories.Repository.WriteFileBlob(&bitbucket.RepositoryBlobWriteOptions{ Owner: opts.Organization, RepoSlug: opts.Repo, Files: bbfiles, @@ -41,14 +41,14 @@ func MakePR(t *testing.T, bprovider bitbucketcloud.Provider, runcnx *params.Run, assert.NilError(t, err) runcnx.Clients.Log.Infof("Using repo %s branch %s", bcrepo.Full_name, targetRefName) - repobranch, err := bprovider.Client.Repositories.Repository.GetBranch(&bitbucket.RepositoryBranchOptions{ + repobranch, err := bprovider.Client().Repositories.Repository.GetBranch(&bitbucket.RepositoryBranchOptions{ Owner: opts.Organization, RepoSlug: opts.Repo, BranchName: targetRefName, }) assert.NilError(t, err) - intf, err := bprovider.Client.Repositories.PullRequests.Create(&bitbucket.PullRequestsOptions{ + intf, err := bprovider.Client().Repositories.PullRequests.Create(&bitbucket.PullRequestsOptions{ Owner: opts.Organization, RepoSlug: opts.Repo, Title: title, diff --git a/test/pkg/bitbucketcloud/setup.go b/test/pkg/bitbucketcloud/setup.go index d6bf2223f..b97670855 100644 --- a/test/pkg/bitbucketcloud/setup.go +++ b/test/pkg/bitbucketcloud/setup.go @@ -61,7 +61,7 @@ func TearDown(ctx context.Context, t *testing.T, runcnx *params.Run, bprovider b return } runcnx.Clients.Log.Infof("Closing PR #%d", prNumber) - _, err := bprovider.Client.Repositories.PullRequests.Decline(&bitbucket.PullRequestsOptions{ + _, err := bprovider.Client().Repositories.PullRequests.Decline(&bitbucket.PullRequestsOptions{ ID: fmt.Sprintf("%d", prNumber), Owner: opts.Organization, RepoSlug: opts.Repo, @@ -72,7 +72,7 @@ func TearDown(ctx context.Context, t *testing.T, runcnx *params.Run, bprovider b assert.NilError(t, err) } runcnx.Clients.Log.Infof("Deleting ref %s", ref) - err = bprovider.Client.Repositories.Repository.DeleteBranch( + err = bprovider.Client().Repositories.Repository.DeleteBranch( &bitbucket.RepositoryBranchDeleteOptions{ Owner: opts.Organization, RepoSlug: opts.Repo, diff --git a/test/pkg/gitea/crd.go b/test/pkg/gitea/crd.go index 1a1d4abe0..06d336bf5 100644 --- a/test/pkg/gitea/crd.go +++ b/test/pkg/gitea/crd.go @@ -13,7 +13,7 @@ import ( // CreateToken creates gitea token with all scopes. func CreateToken(topts *TestOpts) (string, error) { - token, _, err := topts.GiteaCNX.Client.CreateAccessToken(gitea.CreateAccessTokenOption{ + token, _, err := topts.GiteaCNX.Client().CreateAccessToken(gitea.CreateAccessTokenOption{ Name: topts.TargetNS, Scopes: []gitea.AccessTokenScope{gitea.AccessTokenScopeAll}, }) diff --git a/test/pkg/gitea/scm.go b/test/pkg/gitea/scm.go index 9f79b5f6d..72f3c728d 100644 --- a/test/pkg/gitea/scm.go +++ b/test/pkg/gitea/scm.go @@ -62,7 +62,7 @@ func PushFilesToRefAPI(t *testing.T, topts *TestOpts, entries map[string]string) Author: gitea.Identity{Name: commitAuthor, Email: commitEmail}, }, } - fr, _, err := topts.GiteaCNX.Client.CreateFile(topts.Opts.Organization, topts.Opts.Repo, filename, fOpts) + fr, _, err := topts.GiteaCNX.Client().CreateFile(topts.Opts.Organization, topts.Opts.Repo, filename, fOpts) sha = fr.Commit.SHA assert.NilError(t, err) } @@ -166,7 +166,7 @@ func GetGiteaRepo(giteaClient *gitea.Client, user, name string, _ *zap.SugaredLo } func CreateTeam(topts *TestOpts, orgName, teamName string) (*gitea.Team, error) { - team, _, err := topts.GiteaCNX.Client.CreateTeam(orgName, gitea.CreateTeamOption{ + team, _, err := topts.GiteaCNX.Client().CreateTeam(orgName, gitea.CreateTeamOption{ Permission: gitea.AccessModeWrite, Units: []gitea.RepoUnitType{ gitea.RepoUnitPulls, @@ -178,14 +178,14 @@ func CreateTeam(topts *TestOpts, orgName, teamName string) (*gitea.Team, error) } func RemoveCommentMatching(topts *TestOpts, commentString *regexp.Regexp) error { - comments, _, err := topts.GiteaCNX.Client.ListIssueComments(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.ListIssueCommentOptions{}) + comments, _, err := topts.GiteaCNX.Client().ListIssueComments(topts.Opts.Organization, topts.Opts.Repo, topts.PullRequest.Index, gitea.ListIssueCommentOptions{}) if err != nil { return err } for _, c := range comments { if commentString.MatchString(c.Body) { topts.ParamsRun.Clients.Log.Infof("Removing comment %d matching %s", c.ID, commentString.String()) - _, err := topts.GiteaCNX.Client.DeleteIssueComment(topts.Opts.Organization, topts.Opts.Repo, c.ID) + _, err := topts.GiteaCNX.Client().DeleteIssueComment(topts.Opts.Organization, topts.Opts.Repo, c.ID) return err } } @@ -211,7 +211,7 @@ func CreateGiteaUser(giteaClient *gitea.Client, username, password string) (*git // CreateGiteaUserSecondCnx creates a new user and a new provider for this user. func CreateGiteaUserSecondCnx(topts *TestOpts, username, password string) (pgitea.Provider, *gitea.User, error) { - newuser, err := CreateGiteaUser(topts.GiteaCNX.Client, username, password) + newuser, err := CreateGiteaUser(topts.GiteaCNX.Client(), username, password) if err != nil { return pgitea.Provider{}, newuser, fmt.Errorf("failed to create user: %w", err) } @@ -223,7 +223,7 @@ func CreateGiteaUserSecondCnx(topts *TestOpts, username, password string) (pgite } func CreateForkPullRequest(t *testing.T, topts *TestOpts, secondcnx pgitea.Provider, accessMode string) *gitea.PullRequest { - forkrepo, _, err := secondcnx.Client.CreateFork(topts.Opts.Organization, topts.TargetRefName, + forkrepo, _, err := secondcnx.Client().CreateFork(topts.Opts.Organization, topts.TargetRefName, gitea.CreateForkOption{}) assert.NilError(t, err) topts.ParamsRun.Clients.Log.Infof("Forked repository %s has been created", forkrepo.CloneURL) @@ -232,7 +232,7 @@ func CreateForkPullRequest(t *testing.T, topts *TestOpts, secondcnx pgitea.Provi assert.NilError(t, CreateAccess(topts, topts.TargetRefName, accessMode)) } - pr, _, err := secondcnx.Client.CreatePullRequest(topts.Opts.Organization, topts.TargetRefName, + pr, _, err := secondcnx.Client().CreatePullRequest(topts.Opts.Organization, topts.TargetRefName, gitea.CreatePullRequestOption{ Base: topts.DefaultBranch, Head: fmt.Sprintf("%s:%s", forkrepo.Owner.UserName, topts.TargetRefName), @@ -244,7 +244,7 @@ func CreateForkPullRequest(t *testing.T, topts *TestOpts, secondcnx pgitea.Provi } func PushToPullRequest(t *testing.T, topts *TestOpts, secondcnx pgitea.Provider, command string) { - forkuserinfo, _, err := secondcnx.Client.GetMyUserInfo() + forkuserinfo, _, err := secondcnx.Client().GetMyUserInfo() assert.NilError(t, err) cloneURL, err := scm.MakeGitCloneURL(topts.PullRequest.Head.Repository.HTMLURL, forkuserinfo.UserName, secondcnx.Password) assert.NilError(t, err) @@ -269,7 +269,7 @@ func PushToPullRequest(t *testing.T, topts *TestOpts, secondcnx pgitea.Provider, func CreateAccess(topts *TestOpts, touser, accessMode string) error { accessmode := gitea.AccessMode(accessMode) - _, err := topts.GiteaCNX.Client.AddCollaborator(topts.Opts.Organization, topts.Opts.Repo, touser, + _, err := topts.GiteaCNX.Client().AddCollaborator(topts.Opts.Organization, topts.Opts.Repo, touser, gitea.AddCollaboratorOption{ Permission: &accessmode, }) diff --git a/test/pkg/gitea/setup.go b/test/pkg/gitea/setup.go index f2aaac0ec..6f22e6fb2 100644 --- a/test/pkg/gitea/setup.go +++ b/test/pkg/gitea/setup.go @@ -80,7 +80,7 @@ func TearDown(ctx context.Context, t *testing.T, topts *TestOpts) { return } repository.NSTearDown(ctx, t, topts.ParamsRun, topts.TargetNS) - _, err := topts.GiteaCNX.Client.DeleteRepo(topts.Opts.Organization, topts.TargetNS) + _, err := topts.GiteaCNX.Client().DeleteRepo(topts.Opts.Organization, topts.TargetNS) if err != nil { t.Logf("Error deleting gitea repo %s/%s: %s", topts.Opts.Organization, topts.TargetNS, err) } else { diff --git a/test/pkg/gitea/test.go b/test/pkg/gitea/test.go index f9a4ae9eb..e83ffca7d 100644 --- a/test/pkg/gitea/test.go +++ b/test/pkg/gitea/test.go @@ -65,7 +65,7 @@ type TestOpts struct { } func PostCommentOnPullRequest(t *testing.T, topt *TestOpts, body string) { - _, _, err := topt.GiteaCNX.Client.CreateIssueComment(topt.Opts.Organization, + _, _, err := topt.GiteaCNX.Client().CreateIssueComment(topt.Opts.Organization, topt.Opts.Repo, topt.PullRequest.Index, gitea.CreateIssueCommentOption{Body: body}) topt.ParamsRun.Clients.Log.Infof("Posted comment \"%s\" in %s", body, topt.PullRequest.HTMLURL) @@ -74,7 +74,7 @@ func PostCommentOnPullRequest(t *testing.T, topt *TestOpts, body string) { func AddLabelToIssue(t *testing.T, topt *TestOpts, label string) { var targetID int64 - allLabels, _, err := topt.GiteaCNX.Client.ListRepoLabels(topt.Opts.Organization, topt.Opts.Repo, gitea.ListLabelsOptions{}) + allLabels, _, err := topt.GiteaCNX.Client().ListRepoLabels(topt.Opts.Organization, topt.Opts.Repo, gitea.ListLabelsOptions{}) assert.NilError(t, err) for _, l := range allLabels { if l.Name == label { @@ -83,7 +83,7 @@ func AddLabelToIssue(t *testing.T, topt *TestOpts, label string) { } opt := gitea.IssueLabelsOption{Labels: []int64{targetID}} - _, _, err = topt.GiteaCNX.Client.AddIssueLabels(topt.Opts.Organization, topt.Opts.Repo, topt.PullRequest.Index, opt) + _, _, err = topt.GiteaCNX.Client().AddIssueLabels(topt.Opts.Organization, topt.Opts.Repo, topt.PullRequest.Index, opt) assert.NilError(t, err) topt.ParamsRun.Clients.Log.Infof("Added label \"%s\" to %s", label, topt.PullRequest.HTMLURL) } @@ -132,7 +132,7 @@ func TestPR(t *testing.T, topts *TestOpts) (context.Context, func()) { topts.DefaultBranch = options.MainBranch } - repoInfo, err := CreateGiteaRepo(topts.GiteaCNX.Client, topts.Opts.Organization, topts.TargetRepoName, topts.DefaultBranch, hookURL, topts.OnOrg, topts.ParamsRun.Clients.Log) + repoInfo, err := CreateGiteaRepo(topts.GiteaCNX.Client(), topts.Opts.Organization, topts.TargetRepoName, topts.DefaultBranch, hookURL, topts.OnOrg, topts.ParamsRun.Clients.Log) assert.NilError(t, err) topts.Opts.Repo = repoInfo.Name topts.Opts.Organization = repoInfo.Owner.UserName @@ -203,7 +203,7 @@ func TestPR(t *testing.T, topts *TestOpts) (context.Context, func()) { topts.ParamsRun.Clients.Log.Infof("Creating PullRequest") for i := 0; i < 5; i++ { - if topts.PullRequest, _, err = topts.GiteaCNX.Client.CreatePullRequest(topts.Opts.Organization, repoInfo.Name, gitea.CreatePullRequestOption{ + if topts.PullRequest, _, err = topts.GiteaCNX.Client().CreatePullRequest(topts.Opts.Organization, repoInfo.Name, gitea.CreatePullRequestOption{ Title: "Test Pull Request - " + topts.TargetRefName, Head: topts.TargetRefName, Base: topts.DefaultBranch, @@ -287,7 +287,7 @@ func NewPR(t *testing.T, topts *TestOpts) func() { topts.TargetRepoName = topts.TargetRefName } - repoInfo, err := GetGiteaRepo(topts.GiteaCNX.Client, topts.Opts.Organization, topts.TargetRepoName, topts.ParamsRun.Clients.Log) + repoInfo, err := GetGiteaRepo(topts.GiteaCNX.Client(), topts.Opts.Organization, topts.TargetRepoName, topts.ParamsRun.Clients.Log) assert.NilError(t, err) topts.Opts.Repo = repoInfo.Name topts.Opts.Organization = repoInfo.Owner.UserName @@ -323,7 +323,7 @@ func NewPR(t *testing.T, topts *TestOpts) func() { topts.ParamsRun.Clients.Log.Infof("Creating PullRequest") for i := 0; i < 5; i++ { - if topts.PullRequest, _, err = topts.GiteaCNX.Client.CreatePullRequest(topts.Opts.Organization, repoInfo.Name, gitea.CreatePullRequestOption{ + if topts.PullRequest, _, err = topts.GiteaCNX.Client().CreatePullRequest(topts.Opts.Organization, repoInfo.Name, gitea.CreatePullRequestOption{ Title: "Test Pull Request - " + topts.TargetRefName, Head: topts.TargetRefName, Base: options.MainBranch, @@ -377,7 +377,7 @@ func NewPR(t *testing.T, topts *TestOpts) func() { func WaitForStatus(t *testing.T, topts *TestOpts, ref, forcontext string, onlylatest bool) { i := 0 if strings.HasPrefix(ref, "heads/") { - refo, _, err := topts.GiteaCNX.Client.GetRepoRefs(topts.Opts.Organization, topts.Opts.Repo, ref) + refo, _, err := topts.GiteaCNX.Client().GetRepoRefs(topts.Opts.Organization, topts.Opts.Repo, ref) assert.NilError(t, err) ref = refo[0].Object.SHA } @@ -388,7 +388,7 @@ func WaitForStatus(t *testing.T, topts *TestOpts, ref, forcontext string, onlyla for { numstatus := 0 // get first sha of tree ref - statuses, _, err := topts.GiteaCNX.Client.ListStatuses(topts.Opts.Organization, topts.Opts.Repo, ref, gitea.ListStatusesOption{}) + statuses, _, err := topts.GiteaCNX.Client().ListStatuses(topts.Opts.Organization, topts.Opts.Repo, ref, gitea.ListStatusesOption{}) assert.NilError(t, err) // sort statuses by id sort.Slice(statuses, func(i, j int) bool { @@ -491,7 +491,7 @@ func WaitForPullRequestCommentMatch(t *testing.T, topts *TestOpts) { i := 0 topts.ParamsRun.Clients.Log.Infof("Looking for regexp \"%s\" in PR comments", topts.Regexp.String()) for { - comments, _, err := topts.GiteaCNX.Client.ListRepoIssueComments(topts.PullRequest.Base.Repository.Owner.UserName, topts.PullRequest.Base.Repository.Name, gitea.ListIssueCommentOptions{}) + comments, _, err := topts.GiteaCNX.Client().ListRepoIssueComments(topts.PullRequest.Base.Repository.Owner.UserName, topts.PullRequest.Base.Repository.Name, gitea.ListIssueCommentOptions{}) assert.NilError(t, err) for _, v := range comments { if topts.Regexp.MatchString(v.Body) { diff --git a/test/pkg/github/pr.go b/test/pkg/github/pr.go index 93867c4fe..1c5380540 100644 --- a/test/pkg/github/pr.go +++ b/test/pkg/github/pr.go @@ -90,7 +90,7 @@ func PushFilesToRef(ctx context.Context, client *ghlib.Client, commitMessage, ba } func PRCreate(ctx context.Context, cs *params.Run, ghcnx *ghprovider.Provider, owner, repo, targetRef, defaultBranch, title string) (int, error) { - pr, _, err := ghcnx.Client.PullRequests.Create(ctx, owner, repo, &ghlib.NewPullRequest{ + pr, _, err := ghcnx.Client().PullRequests.Create(ctx, owner, repo, &ghlib.NewPullRequest{ Title: &title, Head: &targetRef, Base: &defaultBranch, @@ -131,7 +131,7 @@ func (g *PRTest) RunPullRequest(ctx context.Context, t *testing.T) { g.CommitTitle = fmt.Sprintf("Testing %s with Github APPS integration on %s", g.Label, targetNS) g.Logger.Info(g.CommitTitle) - repoinfo, resp, err := ghcnx.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghcnx.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -152,7 +152,7 @@ func (g *PRTest) RunPullRequest(ctx context.Context, t *testing.T) { targetRefName := fmt.Sprintf("refs/heads/%s", names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")) - sha, vref, err := PushFilesToRef(ctx, ghcnx.Client, g.CommitTitle, repoinfo.GetDefaultBranch(), targetRefName, + sha, vref, err := PushFilesToRef(ctx, ghcnx.Client(), g.CommitTitle, repoinfo.GetDefaultBranch(), targetRefName, opts.Organization, opts.Repo, entries) assert.NilError(t, err) @@ -188,7 +188,7 @@ func (g *PRTest) TearDown(ctx context.Context, t *testing.T) { g.Logger.Infof("Closing PR %d", g.PRNumber) if g.PRNumber != -1 { state := "closed" - _, _, err := g.Provider.Client.PullRequests.Edit(ctx, + _, _, err := g.Provider.Client().PullRequests.Edit(ctx, g.Options.Organization, g.Options.Repo, g.PRNumber, &ghlib.PullRequest{State: &state}) if err != nil { @@ -201,7 +201,7 @@ func (g *PRTest) TearDown(ctx context.Context, t *testing.T) { if g.TargetRefName != options.MainBranch { branch := fmt.Sprintf("heads/%s", filepath.Base(g.TargetRefName)) g.Logger.Infof("Deleting Ref %s", branch) - _, err := g.Provider.Client.Git.DeleteRef(ctx, g.Options.Organization, g.Options.Repo, branch) + _, err := g.Provider.Client().Git.DeleteRef(ctx, g.Options.Organization, g.Options.Repo, branch) assert.NilError(t, err) } } @@ -226,7 +226,7 @@ func (g *PRTest) RunPushRequest(ctx context.Context, t *testing.T) { logmsg = fmt.Sprintf("Testing %s with Github APPS integration on %s", g.Label, targetNS) g.Logger.Info(logmsg) } - repoinfo, resp, err := ghcnx.Client.Repositories.Get(ctx, opts.Organization, opts.Repo) + repoinfo, resp, err := ghcnx.Client().Repositories.Get(ctx, opts.Organization, opts.Repo) assert.NilError(t, err) if resp != nil && resp.StatusCode == http.StatusNotFound { t.Errorf("Repository %s not found in %s", opts.Organization, opts.Repo) @@ -255,7 +255,7 @@ func (g *PRTest) RunPushRequest(ctx context.Context, t *testing.T) { CommitTitle: logmsg, } scm.PushFilesToRefGit(t, &scmOpts, entries) - branch, _, err := ghcnx.Client.Repositories.GetBranch(ctx, opts.Organization, opts.Repo, targetBranch, 1) + branch, _, err := ghcnx.Client().Repositories.GetBranch(ctx, opts.Organization, opts.Repo, targetBranch, 1) assert.NilError(t, err) sha := branch.GetCommit().GetSHA() g.Logger.Infof("Commit %s has been created and pushed to %s in branch %s", sha, branch.GetCommit().GetHTMLURL(), branch.GetName()) diff --git a/test/pkg/gitlab/setup.go b/test/pkg/gitlab/setup.go index 404272f63..28e836488 100644 --- a/test/pkg/gitlab/setup.go +++ b/test/pkg/gitlab/setup.go @@ -69,7 +69,7 @@ func TearDown(ctx context.Context, t *testing.T, runcnx *params.Run, glprovider if mrNumber != -1 { runcnx.Clients.Log.Infof("Closing PR %d", mrNumber) - _, _, err := glprovider.Client.MergeRequests.UpdateMergeRequest(projectid, mrNumber, + _, _, err := glprovider.Client().MergeRequests.UpdateMergeRequest(projectid, mrNumber, &gitlab2.UpdateMergeRequestOptions{StateEvent: gitlab2.Ptr("close")}) if err != nil { t.Fatal(err) @@ -78,7 +78,7 @@ func TearDown(ctx context.Context, t *testing.T, runcnx *params.Run, glprovider repository.NSTearDown(ctx, t, runcnx, targetNS) if ref != "" { runcnx.Clients.Log.Infof("Deleting Ref %s", ref) - _, err := glprovider.Client.Branches.DeleteBranch(projectid, ref) + _, err := glprovider.Client().Branches.DeleteBranch(projectid, ref) assert.NilError(t, err) } }