From e586ade3a48412f5f8e519192ff5f7b04e555b40 Mon Sep 17 00:00:00 2001 From: malhomaid Date: Wed, 11 Dec 2024 11:44:47 +0300 Subject: [PATCH 1/2] pkg/github/repositories: fetch repos using direct organization query instead of search API --- pkg/github/repositories.go | 45 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/pkg/github/repositories.go b/pkg/github/repositories.go index b853e9d4..6c49a1b3 100644 --- a/pkg/github/repositories.go +++ b/pkg/github/repositories.go @@ -2,12 +2,11 @@ package github import ( "context" - "fmt" - "strings" "time" "github.com/grafana/github-datasource/pkg/models" "github.com/grafana/grafana-plugin-sdk-go/data" + "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/shurcooL/githubv4" ) @@ -22,12 +21,14 @@ import ( // } // } type QueryListRepositories struct { - Search struct { - Nodes []struct { - Repository Repository `graphql:"... on Repository"` - } + Organization struct { + Repositories struct { + Nodes []struct { + Repository `graphql:"... on Repository"` + } PageInfo models.PageInfo - } `graphql:"search(query: $query, type: REPOSITORY, first: 100, after: $cursor)"` + } `graphql:"repositories(first: 100, after: $cursor)"` + } `graphql:"organization(login: $owner)"` } // Repository is a code repository @@ -37,12 +38,12 @@ type Repository struct { Login string } NameWithOwner string - URL string - ForkCount int64 - IsFork bool - IsMirror bool - IsPrivate bool - CreatedAt githubv4.DateTime + URL string + ForkCount int64 + IsFork bool + IsMirror bool + IsPrivate bool + CreatedAt githubv4.DateTime } // Repositories is a list of GitHub repositories @@ -83,17 +84,12 @@ func (r Repositories) Frames() data.Frames { // GetAllRepositories retrieves all available repositories for an organization func GetAllRepositories(ctx context.Context, client models.Client, opts models.ListRepositoriesOptions) (Repositories, error) { - query := strings.Join([]string{ - fmt.Sprintf("org:%s", opts.Owner), - opts.Repository, - }, " ") var ( variables = map[string]interface{}{ "cursor": (*githubv4.String)(nil), - "query": githubv4.String(query), + "owner": githubv4.String(opts.Owner), } - repos = []Repository{} ) @@ -102,18 +98,15 @@ func GetAllRepositories(ctx context.Context, client models.Client, opts models.L if err := client.Query(ctx, q, variables); err != nil { return nil, err } - r := make([]Repository, len(q.Search.Nodes)) - for i, v := range q.Search.Nodes { - r[i] = v.Repository + for _, v := range q.Organization.Repositories.Nodes { + repos = append(repos, v.Repository) } - repos = append(repos, r...) - - if !q.Search.PageInfo.HasNextPage { + if !q.Organization.Repositories.PageInfo.HasNextPage { break } - variables["cursor"] = q.Search.PageInfo.EndCursor + variables["cursor"] = q.Organization.Repositories.PageInfo.EndCursor } return repos, nil From b47c6a4fb9aff0a72d9863c827b1ce93ec7dc350 Mon Sep 17 00:00:00 2001 From: malhomaid Date: Wed, 11 Dec 2024 11:58:10 +0300 Subject: [PATCH 2/2] pkg/github/repositories: remove unused imports --- pkg/github/repositories.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/github/repositories.go b/pkg/github/repositories.go index 6c49a1b3..a1e76770 100644 --- a/pkg/github/repositories.go +++ b/pkg/github/repositories.go @@ -6,7 +6,6 @@ import ( "github.com/grafana/github-datasource/pkg/models" "github.com/grafana/grafana-plugin-sdk-go/data" - "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/shurcooL/githubv4" )