githubgraphql

How to get GitHub repository Default Branch name with GraphQL?


Is there a way to use GitHub's GraphQL API to retrieve the default branch name of a repository? I can build a query to get all the branch names, but none of the properties I see reference the default branch name. Some repositories I deal with have 'master' for their default, and others have 'main'.

I am aware I can use the HEAD in some commands to workaround this. Such as "HEAD:README.md" for fetching the README.md file, like in this example query below. This repository's default branch is 'main', and I only know that from manual trial and error.

query {
  repository(owner: "newrelic", name: "newrelic-ruby-agent") {
    object(expression: "HEAD:README.md") {
      ... on Blob {
        text
      }
    }
  }
}

But when I check the local cloned copy of that repository, the .git/HEAD file points to ref: refs/heads/dev. So it seems I am actually pulling the README.md file from the dev branch, and not the default branch?

So is there a nice way to get the name of the default branch for a GitHub repository using their GraphQL API?


Solution

  • There's a field defaultBranchRef on the repository object:

    query { 
      repository(owner: "newrelic", name: "newrelic-ruby-agent") { 
        defaultBranchRef {
          name
        }
      }
    }