Список Github с URL-адресами тегов и релизов

Я борюсь с интерфейсом 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
              }
            }
          }
        }
      }
    }
  }
}

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

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


person cyberthreat    schedule 20.12.2018    source источник


Ответы (1)


target - это ссылка на git, в этом случае она может указывать на _ 1_ или _ 2_ объект. Когда он указывает на 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, это облегченный тег который просто ссылается на фиксацию

person Bertrand Martel    schedule 25.12.2018
comment
Это именно то, что мне нужно! Спасибо, что нашли время написать этот очень информативный ответ. С Рождеством. - person cyberthreat; 26.12.2018