Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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,

  • stars > 10
  • forks > 3
  • total commit >= 5
  • total issues >= 1
  • open issues <= 60
  • size > 2k
  • score > 5
  • last update is within a year

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

like image 411
xpt Avatar asked Mar 18 '18 04:03

xpt


2 Answers

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

like image 157
Igor Akkerman Avatar answered Oct 12 '22 13:10

Igor Akkerman


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.

like image 25
xpt Avatar answered Oct 12 '22 13:10

xpt