Список 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, в каждом выпуске и теге еще есть активы, даже в моем запросе результаты попадают или пропадают. Что мне не хватает?

Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
3
0
847
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Это именно то, что мне нужно! Спасибо, что нашли время написать этот очень информативный ответ. С Рождеством.

cyberthreat 26.12.2018 01:41

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