使用GitHub的发布功能,可以提供下载特定版本的已发布软件的链接.但是,每次发布时,都需要更新gh页面.
有没有办法获得任何最新版软件的特定文件的链接?
例如,这将是一个静态链接:
https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip
我想要的是:
https://github.com/USER/PROJECT/releases/download/latest/package.zip
注意:此问题与GitHub最新版本之间的区别在于此问题 专门要求访问该文件,而不是GitHub最新版本页面
Putna.. 58
获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)
curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
管道中的另一个grep将找到适合您的分发和体系结构的文件.对于64位Ubuntu上的[atom](https://github.com/atom/atom)文本编辑器:`curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64 [.] deb'| 头-n 1 | 切-d'"' - f 4` (7认同)
@maikel grepping for browser_download_url仍然适合我. (4认同)
没有browser_download_url了.你现在可以使用tarball_url.`curl -s https://api.github.com/repos/git-ftp/git-ftp/releases | grep tarball_url | 头-n 1 | 切-d'"' - f 4` (3认同)
Jaex.. 29
您可以使用GitHub Releases API执行ajax请求以获取最新版本下载URL .它还显示它何时发布以及下载次数:
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();
Download
为您设置默认按钮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
您可以使用GitHub Releases API执行ajax请求以获取最新版本下载URL .它还显示它何时发布以及下载次数:
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();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="download" href="https://github.com/ShareX/ShareX/releases/latest">Download</a>
<p class="release-info"></p>
获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)
curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
迟了几年,但我只是实现了一个简单的重定向来支持https://github.com/USER/PROJECT/releases/latest/download/package.zip
。那应该重定向到最新的标记package.zip
发布资产。希望它很方便!
从命令行使用curl
和jq
,检索最新版本的第一个文件:
curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \ jq --raw-output '.assets[0] | .browser_download_url'
如前所述,jq对于此API和其他REST API非常有用.
假设你想要macOS发布:
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可以有不同的方式来提供所需的工件,所以我将演示一个表现良好的原子.
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
...
在atom-mac下面是我通过jq获得的资产select(.name=="atom-mac.zip")
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
curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
jq语法可能很难.这是一个试验jq
上述内容的游乐场:https:
//jqplay.org/s/h6_LfoEHLZ
如果可能的话,您应该采取措施通过sha256sum和gpg确保下载的工件的有效性.
另一个使用curl和wget从最新版本页面下载单个二进制文件的Linux解决方案
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
说明:
curl -s -L
是静默下载最新版本的HTML(在重定向之后)
egrep -o '...'
使用正则表达式查找所需的文件
wget --base=http://github.com/ -i -
将管道的相对路径转换为绝对URL
并-O scollector
设置所需的文件名.
-N
如果文件较新但S3发出403 Forbidden错误,则可能只能添加下载.
使用(内部)wget获取HTML内容的解决方案,为zip文件(使用egrep)过滤它,然后下载zip文件(使用外部wget).
wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*zip' -o)
只需使用以下网址之一即可下载最新版本:(例如,从boxbilling项目中获取网址):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
截至2018年5月23日,根据GitHub支持,这是不可能的
2018年6月23日联系support@github.com,并显示以下消息:
您能确定目前除了弄乱API之外没有其他方法吗?
他们回答:
感谢您与我们联系。我们建议使用API来获取最新版本,因为该方法稳定,有据可查,并且不会在短期内发生变化:
https://developer.github.com/v3/repos/releases/#get-the-latest-release
我还将在以下位置进行跟踪:https : //github.com/isaacs/github/issues/658
没有任何依赖关系的Python解决方案
坚固耐用:
#!/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 GET方法是什么?
基本的HTTP文件下载并保存到python中的磁盘上?
还考虑预发行
/latest
没有看到预发布版本,但是由于首先/releases
显示了最新版本,因此很容易做到:
#!/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'])