【问题标题】:How to get all tags from github api如何从 github api 获取所有标签
【发布时间】:2020-08-06 06:36:03
【问题描述】:

我通常使用以下命令从 github API 获取版本/标签

$ repo="helm/helm"
$ curl -sL https://api.github.com/repos/${repo}/tags |jq -r ".[].name"

v3.2.0-rc.1
v3.2.0
v3.1.3
v3.1.2
v3.1.1
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc.1
v3.1.0
v3.0.3
v3.0.2
v3.0.1
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-beta.5
v3.0.0-beta.4
v3.0.0-beta.3
v3.0.0-beta.2
v3.0.0-beta.1
v3.0.0-alpha.2
v3.0.0-alpha.1
v3.0.0
v2.16.6
v2.16.5
v2.16.4
v2.16.3
v2.16.2
v2.16.1

但实际上并没有列出所有的发布,我该怎么办?

例如,我无法在 v2.16.1 之前发布,如下链接

https://github.com/helm/helm/tags?after=v2.16.1

我尝试引用相同的方式在 curl api 中添加 ?after=v2.16.1 命令,但没有帮助

curl -sL https://api.github.com/repos/${repo}/tags?after=v2.16.1 |jq -r ".[].name"

我得到了相同的输出。

参考https://developer.github.com/v3/git/tags/

【问题讨论】:

    标签: api github curl postman


    【解决方案1】:

    在@VonC 的帮助下,我得到了带有额外查询字符串?page=2 的结果,如果我想查询旧版本等等。

    curl -sL https://api.github.com/repos/${repo}/tags?page=2 |jq -r ".[].name"
    

    我现在可以轻松获得最后一页了。

    $ GITHUB_API_REST="/repos/helm/helm/tags"
    $ GITHUB_API_HEADER_ACCEPT="Accept: application/vnd.github.v3+json"
    $ GITHUB_TOKEN=xxxxxxxx
    $ last_page=`curl -s -I "https://api.github.com${GITHUB_API_REST}" -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:' | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`
    $ echo $last_page
    4
    

    【讨论】:

      【解决方案2】:

      这可能是因为pagination

      See this script 作为检测页面的示例,并添加所需的?page=x 以访问来自 GitHub API 调用的所有数据。

      相关摘录:

      # single page result-s (no pagination), have no Link: section, the grep result is empty                                                                                                                                                                  
      last_page=`curl -s -I "https://api.github.com${GITHUB_API_REST}" -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:' | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`
      
      # does this result use pagination?                                                                                                                                                                                                                       
      if [ -z "$last_page" ]; then
          # no - this result has only one page                                                                                                                                                                                                                 
          rest_call "https://api.github.com${GITHUB_API_REST}"
      else
          # yes - this result is on multiple pages                                                                                                                                                                                                             
          for p in `seq 1 $last_page`; do
              rest_call "https://api.github.com${GITHUB_API_REST}?page=$p"
          done
      fi
      

      【讨论】:

      • 谢谢,您的回答给了我获取正确查询字符串的指令,它应该是?page=2,等等。
      猜你喜欢
      • 2015-01-31
      • 2017-03-10
      • 2015-11-02
      • 1970-01-01
      • 2021-08-23
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多