下载最新的GitHub版本

时间:2014-01-29 18:13:48

标签: github tags release

我希望在我的网站上有“下载最新版本”按钮,该按钮代表最新版本的链接(存储在 GitHub版本)。我尝试创建名为“latest”的发布标记,但是当我尝试加载新版本时(与标记创建日期混淆,标记交换等),它变得复杂了。手动更新我网站上的下载链接也是一项耗时且严格的任务。我看到了唯一的方法 - 将所有下载按钮重定向到一些html,然后重定向到实际的最新版本。

请注意,我的网站托管在GitHub Pages(静态托管),所以我只是无法使用服务器端脚本来生成链接。有什么想法吗?

8 个答案:

答案 0 :(得分:15)

Github现在提供了一个"最新版本"项目发布页面上的按钮,创建第一个版本后

在您提供的示例中,此按钮链接到https://github.com/reactiveui/ReactiveUI/releases/latest

答案 1 :(得分:10)

您无需任何脚本即可为最新版本生成下载链接。只需使用以下格式:

https://github.com/:owner/:repo/zipball/:branch

示例:

https://github.com/webix-hub/tracker/zipball/master
https://github.com/iDoRecall/selection-menu/zipball/gh-pages

如果由于某种原因您想获得最新版本下载的链接,包括其版本号,您可以从get latest release API获取该链接:

GET /repos/:owner/:repo/releases/latest

示例:

$.get('https://api.github.com/repos/idorecall/selection-menu/releases/latest', function (data) {
  $('#result').attr('href', data.zipball_url);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="result">Download latest release (.ZIP)</a>

答案 2 :(得分:3)

February 18th, 2015起,GitHUb V3 release API有一个get latest release API

GET /repos/:owner/:repo/releases/latest

答案 3 :(得分:2)

也许您可以使用一些客户端脚本并通过调用GitHub API来动态生成链接的目标,通过一些JQuery魔术?

Releases API提供了一种指向 retrieve the list of all the releases from a repository 的方法。例如, this link 会返回所有 releases of the ReactiveUI project 的Json格式列表。

提取第一个将返回最新版本。

在此有效载荷中:

  • html_url属性将保留要构建的网址的第一部分(即。https://github.com/{owner}/{repository}/releases/{version})。

  • assets数组将列出可下载的档案。每个asset都会带有name属性

构建目标下载URL只需要几个字符串操作。

  • 在html_url的download/段和版本号
  • 之间插入releases/关键字
  • 附加要下载的资产名称

生成的网址格式如下:https://github.com/{owner}/{repository}/releases/download/{version}/name_of_asset

例如,关于上面链接ReactiveUI链接中的Json有效负载,我们有html_url: "https://github.com/reactiveui/ReactiveUI/releases/5.99.0"和一个name: "ReactiveUI.6.0.Preview.1.zip"的资产。

因此,下载网址为https://github.com/reactiveui/ReactiveUI/releases/download/5.99.0/ReactiveUI.6.0.Preview.1.zip

答案 4 :(得分:1)

您可以使用以下地址:

  • $ {Organization} 作为GitHub用户或组织
  • $ {Repository} 是存储库名称

curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball > ${Repository}.tar.gz

.tar.gz文件中的顶级目录在目录名称中具有提交的sha哈希,如果您需要以自动方式更改为生成的目录并执行某些操作,则可能会出现问题。

以下方法将其删除,并将文件保留在具有可预测名称的文件夹中。

mkdir ${Repository} curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball | tar -zxv -C ${Repository} --strip-components=1

答案 5 :(得分:1)

由于我没有在这里看到答案,但是在运行持续集成测试时对我来说非常有帮助,这个仅需要你卷曲的单行将允许搜索Github repo&#39; s发布以下载最新版本

https://gist.github.com/steinwaywhw/a4cd19cda655b8249d908261a62687f8

我使用它在我们的存储库中使用以下脚本运行PHPSTan

https://gist.github.com/rvanlaak/7491f2c4f0c456a93f90e31774300b62

答案 6 :(得分:0)

如果您使用PHP,请尝试按照代码:

function getLatestTagUrl($repository, $default = 'master') {
    $file = @json_decode(@file_get_contents("https://api.github.com/repos/$repository/tags", false,
        stream_context_create(['http' => ['header' => "User-Agent: Vestibulum\r\n"]])
    ));

    return sprintf("https://github.com/$repository/archive/%s.zip", $file ? reset($file)->name : $default);
}

功能用法示例

echo '<a href="' .getLatestTagUrl('OzzyCzech/vestibulum') .'">Download</a>';

答案 7 :(得分:0)

正如@Dan Dascalescu在对已接受答案的评论中所指出的那样,有些项目(大约30%)不会理会正式发布,因此“最新发布”按钮或/ releases / latest API调用均不会返回有用的数据。

可靠地获取GitHub项目的最新版本,可以使用lastversion