Github список URL-адресов тегов и релизов - PullRequest
0 голосов
/ 20 декабря 2018

Я борюсь с интерфейсом github graphql, чтобы получить данные, которые мне нужны.Я хочу получить список URL ресурсов для тегов и выпусков.Кажется, что некоторые репозитории дают желаемый результат, в то время как другие ничего не дают.

query {
 repository(owner:"erlang",name:"otp") {
    releases(last:100) {
      edges {
        node {
          url
          releaseAssets(last:100) {
            edges {
              node {
                downloadUrl
              }
            }
          }
          tag {
            name
            target {
              ... on Commit {
                zipballUrl
                tarballUrl
              }
            }
          }
        }
      }
    }
    tags:refs(refPrefix:"refs/tags/", last:30) {
      edges {
        tag:node {
          name
          target {
            sha:oid
            commitResourcePath
            ... on Commit {
              zipballUrl
              tarballUrl
              author {
                name
                email
                date
              }
            }
          }
        }
      }
    }
  }
}

Этот запрос, как есть, выдает желаемые результаты (или, по крайней мере, некоторые из них), тогда как владелец: "spring-projects", name: "spring-framework" создает теги без тарбола.Когда я смотрю на репозиторий Spring-Framework, у него, очевидно, есть ресурсы для релизов.

Почему они не отображаются в этом запросе?Когда я смотрю на git, у каждого релиза и тега есть ресурсы, но даже в моем запросе результаты совпадают или не совпадают.Чего мне не хватает?

1 Ответ

0 голосов
/ 25 декабря 2018

target - это git reference , в этом случае он может указывать на объект Tag или Commit.Когда он указывает на Commit, ваш запрос возвращает ожидаемый результат, поскольку ...on Commit не является пустым.Чтобы получить Tag, просто попробуйте с помощью ...on Tag и извлеките теггер или коммит, на который он указывает, в зависимости от того, что вы хотите.Вот пример:

{
  repository(owner: "spring-projects", name: "spring-framework") {
    releases(last: 100) {
      edges {
        node {
          url
          releaseAssets(last: 100) {
            edges {
              node {
                downloadUrl
              }
            }
          }
          tag {
            ...refInfo
          }
        }
      }
    }
    tags: refs(refPrefix: "refs/tags/", last: 30) {
      edges {
        node {
          ...refInfo
        }
      }
    }
  }
}

fragment refInfo on Ref {
  name
  target {
    sha: oid
    commitResourcePath
    __typename
    ... on Tag {
      target {
        ... on Commit {
          ...commitInfo
        }
      }
      tagger {
        name
        email
        date
      }
    }
    ... on Commit {
      ...commitInfo
    }
  }
}

fragment commitInfo on Commit {
  zipballUrl
  tarballUrl
  author {
    name
    email
    date
  }
}

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

Обратите внимание, что в приведенном выше примере я использовал фрагментов дляуменьшить размер запроса и улучшить читаемость

Я предполагаю, что в случае, когда ссылка указывает на Tag объект, который является аннотированным тегом , который может содержать сообщение, определенную дату тегирования иинформация о тегереЕсли он указывает на Commit объект, это легкий тег , который просто ссылается на коммит

...