Is there a link to GitHub for downloading a file in the latest release of a repository?
使用Github的发布特性,可以提供一个链接来下载发布软件的特定版本。但是,每次发布时,GH页面也需要更新。
有没有一种方法可以链接到某个软件的最新版本的特定文件?
例如,这是一个静态链接:
我想要的是:
江户十一〔一〕号
NOTE: The difference between this question and
GitHub latest release is
that this question specifically asks for getting access to the file,
not the GitHub latest release page
号
获取最新版本资产下载链接的Linux解决方案(仅当版本只有一个资产时才有效)
1 | curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4 |
。
您可以使用GitHub版本API执行Ajax请求以获取最新版本的下载URL。它还显示发布时间和下载计数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function GetLatestReleaseInfo() { $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) { var asset = release.assets[0]; var downloadCount = 0; for (var i = 0; i < release.assets.length; i++) { downloadCount += release.assets[i].download_count; } var oneHour = 60 * 60 * 1000; var oneDay = 24 * oneHour; var dateDiff = new Date() - new Date(asset.updated_at); var timeAgo; if (dateDiff < oneDay) { timeAgo = (dateDiff / oneHour).toFixed(1) +" hours ago"; } else { timeAgo = (dateDiff / oneDay).toFixed(1) +" days ago"; } var releaseInfo = release.name +" was updated" + timeAgo +" and downloaded" + downloadCount.toLocaleString() +" times."; $(".download").attr("href", asset.browser_download_url); $(".release-info").text(releaseInfo); $(".release-info").fadeIn("slow"); }); } GetLatestReleaseInfo(); |
号
1 2 3 4 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> Download <p class="release-info"> </p> |
重要的是要将默认按钮URL设置为"发布"页面(如https://github.com/sharex/sharex/releases/latest),因此,如果浏览器不支持Ajax(或javascript),或者获取URL的速度太慢,则"下载"按钮仍将工作。
当Ajax请求完成时,此按钮的URL将自动更改为直接下载URL。
编辑:
我还做了一个下载页面,显示了多个版本,您可以在这里找到:https://getsharex.com/downloads/
它的源代码:https://github.com/sharex/sharex.github.io/blob/master/js/downloads.js
从使用
1 2 | curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \ jq --raw-output '.assets[0] | .browser_download_url' |
。
另一个Linux解决方案使用curl和wget从最新发布的页面下载单个二进制文件
1 | curl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[0-9]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollector |
说明:
和
可能只能在文件较新但S3给出403禁止错误的情况下添加
如前所述,JQ对于这个和其他RESTAPI很有用。
tl;dr-更多详细信息如下假设您想要MacOS版本:
1 2 3 | URL=$( curl -s"https://api.github.com/repos/atom/atom/releases/latest" \ | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url' ) curl -LO"$URL" |
。原子释放解决方案
注意,每个repo可以有不同的方法来提供所需的工件,所以我将演示一个像atom这样的行为良好的工件。
获取已发布资产的名称1 2 3 4 5 6 7 | curl -s"https://api.github.com/repos/atom/atom/releases/latest" \ | jq -r '.assets[] | .name' atom-1.15.0-delta.nupkg atom-1.15.0-full.nupkg atom-amd64.deb ... |
获取所需资产的下载URL
下面的Atom Mac是我通过JQ的
1 2 3 4 | curl -s"https://api.github.com/repos/atom/atom/releases/latest" \ | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url' https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip |
。下载工件
1 | curl -LO"https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip" |
JQ操场
JQ语法可能很困难。这里有一个试验上述
如果可能的话,您应该采取措施确保通过sha256sum和gpg下载的工件的有效性。
使用(内部)wget获取HTML内容的解决方案,将其过滤为zip文件(使用egrep),然后下载zip文件(使用外部wget)。
1 | wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*zip' -o) |
号
几年后,我刚刚实现了一个简单的重定向来支持
只需使用以下URL之一下载最新版本:(以boxbilling项目的URL为例):https://api.github.com/repos/boxbilling/boxbilling/releases
以zip格式下载最新版本:https://api.github.com/repos/boxbilling/boxbilling/zipball
以tarball的形式下载最新版本:https://api.github.com/repos/boxbilling/boxbilling/tarball
单击其中一个URL立即下载最新版本。我写这行的时候,它现在是:boxbilling-boxbilling-4.20-30-g452ad1c[.zip/.tar.gz]
更新:在我的日志文件中找到另一个URL(参考上面的示例)https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master
根据Github支持,从2018-05-23起是不可能的
2018-05-23联系[email protected],消息:
Can you just confirm that there is no way besides messing with API currently?
号
他们回答说:
Thanks for reaching out. We recommend using the API to fetch the latest release because that approach is stable, documented, and not subject to change any time soon:
https://developer.github.com/v3/repos/releases/#get-the-latest-release
号
我还将在以下网址进行跟踪:https://github.com/isaacs/github/issues/658
没有任何依赖关系的python解决方案
坚固轻便:
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env python3 import json import urllib.request _json = json.loads(urllib.request.urlopen(urllib.request.Request( 'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest', headers={'Accept': 'application/vnd.github.v3+json'}, )).read()) asset = _json['assets'][0] urllib.request.urlretrieve(asset['browser_download_url'], asset['name']) |
。
另请参见:
- 在python中,HTTP获取的最快方法是什么?
- 基本的HTTP文件下载和保存到python中的磁盘?
同时考虑预发布
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env python3 import json import urllib.request _json = json.loads(urllib.request.urlopen(urllib.request.Request( 'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases', headers={'Accept': 'application/vnd.github.v3+json'}, )).read()) asset = _json[0]['assets'][0] urllib.request.urlretrieve(asset['browser_download_url'], asset['name']) |
链接到Releases帮助页面确实提到了"最新版本"按钮,但这并不能为您提供下载链接。
https://github.com/reactiveui/reactiveui/releases/latest/最新版本
为此,您需要首先获取最新的标签(如"下载文件的最新版本的github url?"中所述)。:
1 2 3 | latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.zip |
如果您只想使用
1 | curl -sLo /dev/null -w '%{url_effective}' https://github.com/github-tools/github/releases/latest |
输出
在php中-重定向到最新版本的下载。只需放在你的网站上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php /** * Download latest release from github release articats * License: Public Domain */ define('REPO', 'imi-digital/iRobo'); $opts = [ 'http' => [ 'method' => 'GET', 'header' => [ 'User-Agent: PHP' ] ] ]; $context = stream_context_create($opts); $releases = file_get_contents('https://api.github.com/repos/' . REPO . '/releases', false, $context); $releases = json_decode($releases); $url = $releases[0]->assets[0]->browser_download_url; header('Location: ' . $url); |
我想从存储库描述中的
我可以向所有存储库的自述文件或Github页面添加如下链接:
- 埃多克斯1〔8〕从存储库中下载最新的版本文件。
- 埃多克斯1〔9〕这是因为设置了javascript引用,并且要下载的存储库是通过
document.referrer 确定的。因此,链接也适用于叉。
您可以在这里找到源代码,fork或只是使用我的repo。
如果repo只是使用标签而不是发布(参见jquery),那么基于一个URL的解决方案将不起作用。
相反,您必须查询所有标记,对它们进行排序并构造下载URL。我为语言go和jquery repo实现了这样一个解决方案:链接到github。
也许,这对某人有帮助。