我对github API相对较新,我很难获得给定repo的最新标签。
**A:**作为QA,我负责测试和发布到LIVE,我们的团队拥有大约40个工件(github中的repos)。我想构建一个工具,列出在最新标签之后提交的项目。这样我就可以更有效地管理发布。
说到点子上了
根据Github API获取给予存储库的所有标签的方法是
GET /repos/:owner/:repo/tags
但这给出了仓库所具有的标签的完整列表。
有没有一种简单的方法可以找到最新的标签,而不需要从上面的API调用中迭代所有可用的标签?
如果我为了找到最新的标签(基于每个标签的时间戳)而迭代每个标签,这显然不是有效的方法,随着时间的推移,标签的数量会增加,因为我想重复相同的过程至少超过10个repos。
任何帮助都将不胜感激。
先谢谢你了
6条答案
按热度按时间p5fdfcr11#
GitHub没有API来检索最新的标签,因为它有检索最新版本的API。这可能是因为标签可以是任意字符串,不一定是semvers,但这并不是一个真正的借口,因为标签有时间戳,GitHub在通过Tags API返回标签时会按字典顺序排序标签。
无论如何,要获得最新的标记,需要调用该API,然后根据semver规则对标记进行排序,因为这些规则并不简单(请参见该链接的第11点),所以最好使用the semver library(ported for the browser)。
2w3rbyxf2#
您可以在
https://api.github.com/repos/$org/$repo/releases/latest
上获得最新版本如果你只想要标签名,你可以尝试这样做:
kjthegm63#
我发现最简单的(对我的情况很有用,没有“最新”,我不想 checkout 分支)是:
该jus打印来自(例如)对应的certbot标签页(在https://github.com/certbot/certbot/tags处)的“最高”标签号。
https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2649739
68de4m5k4#
你可以考虑,作为GitHub API的替代方案,在“Is there a simple way to “
git describe
” a remote repository?”(source,作者svnpenn
)中提到的一个简单脚本:这确实提取了标签(以及更多),而不必克隆存储库。
注意:正如下面Joels Elf所注解的,确保
/usr/bin/awk
指的是gawk
,而不是mawk
。xmq68pz95#
使用GraphQL API v4,你可以通过字母顺序或提交日期来获取最后一个标签。例如,通过提交日期(例如,指向最近提交的标签):
test it in the explorer
请注意,如果标签是轻量级标签,则不会有
tagger
或message
字段。您也可以按字母顺序为最后一个标签使用field: ALPHABETICAL
。如果你想获取最后一个被创建的标签(它可能与指向最近提交的标签不同,也可能与按字母顺序排列的最后一个标签不同),只有带注解的标签才有可能,因为它们的创建日期是存储的,并且可以在
tagger
字段中找到。要获取最后创建的标签,您需要获取所有标签,并在以下请求的响应中的
data.repository.refs.edges.node.target.tagger.date
字段中过滤最近的日期:test it in the explorer
wpx232ag6#
我建议使用
awk
从bash
简单的东西curl https://api.github.com/repos/{organization}/{repository_name}/releases/latest | grep -i "tag_name" | awk -F '"' '{print $4}'
curl
获取最新版本信息grep
查找字段**“tag_name”:“1.1.1”**awk
解析**“tag_name”:“1.1.1”改为1.1.1**