Search code examples
searchgithubgraphqlgithub-apigithub-graphql

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?


Solution

  • 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