Github 标签列表和发布资产 url

Github list of tag and release asset urls

我正在努力使用 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" 生成没有 tarball 的标签。当我查看 spring-framework repo 时,它显然有发布资产。

为什么他们没有显示在此查询中?当我查看 git 每个版本和标签都有资产时,即使在我的查询中,结果也是命中或未命中。我错过了什么?

目标是一个 git reference, in that case it can point to a Tag or a Commit 对象。当它指向 Commit 时,您的查询 returns 因为 ...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
  }
}

Try it in the explorer

请注意,在上面的示例中,我使用 fragments 来减少查询大小并提高可读性

我的猜测是,如果 ref 指向一个 Tag 对象,那是一个 annotated tag which can hold a message, a specific tagging date & tagger info. If it points to a Commit object, it's a lightweight tag 对象,它只是链接到一个提交