api - 如何从 github api 获取所有标签
问题描述
我通常使用以下命令从 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
我尝试引用相同的方式添加?after=v2.16.1
curl api 命令,但没有帮助
curl -sL https://api.github.com/repos/${repo}/tags?after=v2.16.1 |jq -r ".[].name"
我得到了相同的输出。
解决方案
这可能是因为分页
将此脚本视为检测页面的示例,并添加?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
推荐阅读
- dictionary - 运行时未检测到切片上的竞争
- reactjs - 如何将 Spring Boot 与 React 集成
- docker - 如何在现有的 docker swarm 中生成交互式容器?
- reactjs - React Table 如何添加/更改单个单元格
- r - 闪亮的 DT 表中的 unbindalll 问题
- c++ - 编译 woff2 时出现错误“需要 libbrotli”
- java - 如何从用户输入数组中调用某些信息
- firebase - Flutter - firebase_analytics 请求权限
- python - 使用 kivy-ios 构建并让 pyrebase/pycryptodome(x) 工作(解决方案)
- c# - Winform 使用通用方法将按钮文本复制到文本框