Как получить все репозитории, содержащие определенную ветку, в Github GraphQL API

У меня много репозиториев, и некоторые из них содержат ветку с таким же именем. Я хочу иметь возможность получать все репозитории, содержащие определенное имя ветки. Это то, что у меня есть до сих пор, но я не могу понять, как добавить необходимый запрос.

{
  repositoryOwner(login: "dev") {
    repositories(first: 1) {
      nodes {
        name
        refs(first: 15, refPrefix: "refs/heads/") {
          edges {
            node {
              name
            }
          }
        }
      }
    }
  }
}

Любая помощь будет принята с благодарностью.


person Edwin Coronado    schedule 24.07.2018    source источник


Ответы (1)


Один из способов — запросить все репозитории, у которых есть ссылка с qualifiedName как <branch_name>. Затем на стороне клиента удалите все нулевые результаты:

{
  repositoryOwner(login: "JakeWharton") {
    repositories(first: 100) {
      nodes {
        ref(qualifiedName: "gh-pages") {
          repository {
            name
            description
          }
        }
      }
    }
  }
}

Попробуйте в проводнике

С помощью curl и jq, чтобы исключить null результатов:

curl -s -H "Authorization: token YOUR_TOKEN" \
     -d '{ 
          "query": "{ repositoryOwner(login: \"JakeWharton\") { repositories(first: 100) { nodes { ref(qualifiedName: \"gh-pages\") { repository { name } } } } } }"
      }' https://api.github.com/graphql | \
      jq -r '.data.repositoryOwner.repositories.nodes[] | select(.ref != null) | .ref.repository.name'

Вам придется пройти разбиение на страницы, если имеется более 100 репозиториев.

Вы также можете использовать псевдонимы, если вам нужно найти комбинацию названий веток в одном репо (или один из них). Например, поиск ветки gh-pages & 1.0 :

{
  repositoryOwner(login: "JakeWharton") {
    repositories(first: 100) {
      nodes {
        branch1: ref(qualifiedName: "1.0") {
          repository {
            name
            description
          }
        }
        branch2: ref(qualifiedName: "gh-pages") {
          repository {
            name
            description
          }
        }
      }
    }
  }
}

Попробуйте в проводнике

person Bertrand Martel    schedule 24.07.2018