Github GraphQL - получение списка коммитов репозитория

Я использую GraphQL, чтобы получить некоторые данные из списка репозиториев с помощью API Github GraphQL (v4). Я хочу получить список последних коммитов из репозитория, независимо от того, что является веткой коммита / tag / ref.

Сейчас я делаю следующее, чтобы получить список коммитов из определенного репозитория:

... on Repository{
    refs(refPrefix:"refs/",orderBy:$refOrder,first:1){
        edges{
            node{
                ... on Ref{
                    target{
                        ... on Commit{
                            history(first:10){
                                totalCount
                                edges{
                                    node{
                                        ... on Commit{
                                            committedDate
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

куда $refOrder это объект, который я отправляю вместе с запросом, и он определен ниже:

{
    "refOrder": {
        "direction": "DESC",
        "field": "TAG_COMMIT_DATE"
    }
}

Этот кусок кода работает, но не получает результаты, которые я хочу. Ответ возвращается со списком коммитов, но не обязательно последними коммитами из хранилища. Когда я захожу на страницу репозитория и нажимаю "Коммиты", я обычно вижу список коммитов, которые являются более новыми, чем то, что я получил в результате моего вызова API.

Что мне не хватает? Должен ли я попробовать другой refPrefix или же orderBy аргумент? Я уже попробовал "мастер" как refPrefix, но столкнулся с той же проблемой.

2 ответа

Просто понял, что то, что я искал, это поле, которое существует в Repository объект называется defaultBranchRef, Используя это поле, я смог получить данные, которые искал.

Мой запрос теперь выглядит так:

... on Repository{
    defaultBranchRef{
        target{
            ... on Commit{
                history(first:10){
                    edges{
                        node{
                            ... on Commit{
                                committedDate
                            }
                        }
                    }
                }
            }
        }
    }
}

Если вы также заинтересованы в получении последних коммитов для всех веток (не только ветки по умолчанию), вы можете запросить ссылку с префиксом refs/heads/:

{
  repository(owner: "bertrandmartel", name: "callflow-workshop") {
    refs(refPrefix: "refs/heads/", orderBy: {direction: DESC, field: TAG_COMMIT_DATE}, first: 100) {
      edges {
        node {
          ... on Ref {
            name
            target {
              ... on Commit {
                history(first: 2) {
                  edges {
                    node {
                      ... on Commit {
                        committedDate
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

В вашем случае с помощью refs/ также дал вам тег ref.

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

Другие вопросы по тегам