xpt
xpt

Reputation: 23054

Github GraphQL Search with Filtering

Based on my limited searching, it seems GraphQL can only support equal filtering. So,

Is it possible to do Github GraphQL searching with the filtering conditions of,

I.e., filtering will all above conditions. Is it possible?

Upvotes: 9

Views: 17426

Answers (2)

Igor Akkerman
Igor Akkerman

Reputation: 2488

When querying for repositories, you can apply a filter only for a certain number of the fields in your list:

  • number of stars
  • number of forks
  • size
  • last update

Although you cannot specify them in the query filter, you can include other fields in your query and verify the values in the client application:

  • total number of issues
  • number of open issues

While, in theory, you can also query for the number of commits, applying your specific parameter arguments, that query returns a server error, it most probably times out. For that reason, those lines are commented out.

Here's the GraphQL query:

query {
  search(
    type:REPOSITORY, 
    query: """
      stars:>10
      forks:>3
      size:>2000
      pushed:>=2018-08-08
    """,
    last: 100
  ) {
    repos: edges {
      repo: node {
        ... on Repository {
          url

          allIssues: issues {
            totalCount
          }
          openIssues: issues(states:OPEN) {
            totalCount
          }

          # commitsCount: object(expression: "master") {
          #   ... on Commit {
          #      history {
          #       totalCount
          #     }
          #   }
          # }
        }
      }
    }
  }
}

The specification for repository queries can be found here: https://help.github.com/en/articles/searching-for-repositories#search-by-repository-size

Upvotes: 12

xpt
xpt

Reputation: 23054

This is not an answer but an update of what I've collected so far.

  • According to "Select * for Github GraphQL Search", not all above criteria might be available in the Repository edge. Namely, the "total commit", "open issues" and "score" might not be available.

  • The purpose of the question is obviously to find the valuable repositories and weed off the lower-quality ones. I've collected all the available fields that might be helpful for such assessment here.

A copy of it as of 2018-03-18:

query SearchMostTop10Star($queryString: String!, $number_of_repos:Int!) {
  search(query: $queryString, type: REPOSITORY, first: $number_of_repos) {
    repositoryCount
    edges {
      node {
        ... on Repository {
          name
          url
          description
#         shortDescriptionHTML
          repositoryTopics(first: 12) {nodes {topic {name}}}
          primaryLanguage {name}
          languages(first: 3) { nodes {name} }
          releases {totalCount}
          forkCount
          pullRequests {totalCount}
          stargazers {totalCount}
          issues {totalCount}
          createdAt
          pushedAt
          updatedAt
        }
      }
    }
  }
}
variables {
  "queryString": "language:JavaScript stars:>10000", 
  "number_of_repos": 3 
}

Anyone can try it out as per here.

Upvotes: 3

Related Questions