我对github api比较陌生,我正在努力获得给定回购的最新标签。
问: 为什么我需要它?
A: 作为QA,我负责测试并发布到LIVE,我们的团队拥有大约40件文物(github中的回购)。我想构建一个工具,列出在最新标记之后提交的项目。这样我就可以更有效地管理版本。
说到点。
根据Github api获取回购的所有标签
GET /repos/:owner/:repo/tags
但是这给出了repo具有的完整标签列表。
有没有一种简单的方法可以找到最新的标签,而无需迭代上述api调用中的所有可用标签?
如果我遍历每个标签以便找到最新的标签(基于每个标签的时间戳),那么随着时间的推移,这显然不是有效的方式,标签的数量会增加,因为我想要重复相同的过程至少10个以上的回购。
任何帮助都将受到高度赞赏。
非常感谢提前
答案 0 :(得分:10)
GitHub没有用于检索最新代码的API,就像retrieving the latest release一样。这可能是因为标签可能是任意字符串,不一定是semvers,但它并不是一个借口,因为标签有时间戳,而GitHub在通过Tags API返回时按字典顺序对标签进行排序。
无论如何,要获取最新标记,您需要调用该API,然后根据semver规则对标记进行排序。由于这些规则非常重要(请参阅该链接的第11点),最好使用the semver library(ported for the browser)。
var gitHubPath = 'iDoRecall/selection-menu'; // example repo
var url = 'https://api.github.com/repos/' + gitHubPath + '/tags';
$.get(url).done(function (data) {
var versions = data.sort(function (v1, v2) {
return semver.compare(v2.name, v1.name)
});
$('#result').html(versions[0].name);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/hippich/bower-semver/master/semver.min.js"></script>
<p>Latest tag: <span id="result"></span></p>
答案 1 :(得分:4)
作为GitHub API的替代方案,您可以考虑在&#34; Is there a simple way to “git describe
” a remote repository?&#34;中提到的简单脚本。 (source,svnpenn
):
#!/usr/bin/awk -f
BEGIN {
if (ARGC != 2) {
print "git-describe-remote.awk https://github.com/stedolan/jq"
exit
}
FS = "[ /^]+"
while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
if (!sha)
sha = substr($0, 1, 7)
tag = $3
}
while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
if ($3 ~ "commits")
com = $2
printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
}
确实可以提取标签(以及更多),而无需克隆存储库。
注意:commented below为Joels Elf,请确保/usr/bin/awk
引用gawk
,而不是mawk
。
答案 2 :(得分:4)
您可以在https://api.github.com/repos/$org/$repo/releases/latest
如果您只想要标记名称,可以尝试以下方法:
curl https://api.github.com/repos/$org/$repo/releases/latest -s | jq .name -r
答案 3 :(得分:1)
我发现的最简单的(对于我没有“最新”并且我不想结帐分支的情况很有用)是:
curl "https://api.github.com/repos/certbot/certbot/tags" | jq -r '.[0].name'
这只是从(例如)相应的 certbot 标签页面(在 https://github.com/certbot/certbot/tags)打印“最高”标签编号
感谢https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2649739