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

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, это легкий тег, который просто ссылается на фиксацию.
Это именно то, что мне нужно! Спасибо, что нашли время написать этот очень информативный ответ. С Рождеством.