Chr*_*eau 122 release github download github-pages
使用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最新版本页面
Put*_*tna 58
获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)
curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
Run Code Online (Sandbox Code Playgroud)
Jae*_*aex 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();Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
为您设置默认按钮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
Ian*_*anB 15
从命令行使用curl和jq,检索最新版本的第一个文件:
curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \
jq --raw-output '.assets[0] | .browser_download_url'
Run Code Online (Sandbox Code Playgroud)
小智 14
迟了几年,但我只是实现了一个简单的重定向来支持https://github.com/USER/PROJECT/releases/latest/download/package.zip。那应该重定向到最新的标记package.zip发布资产。希望它很方便!
小智 9
Github 现在支持从最新版本下载单个文件的静态链接:https://help.github.com/en/articles/linking-to-releases
https://github.com/USER/PROJECT/releases/latest/download/package.zip
Run Code Online (Sandbox Code Playgroud)
这可以通过一行代码完成,如下所示:
$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest \
| grep -wo "https.*Linux.*gz" | wget -qi -
Run Code Online (Sandbox Code Playgroud)
我们在这里:
latest。https.*Linux.*gz。wget -qi -以便下载为了进一步揭示这里发生的事情,我们使用更广泛grep的 API 端点:
$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest | grep -wo "https.*" | grep gz
https://github.com/slmingol/gorelease_ex/releases/download/0.0.78/gorelease_ex_0.0.78_Darwin_x86_64.tar.gz"
https://github.com/slmingol/gorelease_ex/releases/download/0.0.78/gorelease_ex_0.0.78_Linux_x86_64.tar.gz"
Run Code Online (Sandbox Code Playgroud)
在上面您可以看到匹配的 URL。
您还可以参数化该grep参数,以便它“动态”确定它在哪个平台上运行,并根据该平台替换为适当的字符串。
$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest \
| grep -wo "https.*$(uname).*gz" | wget -qi -
Run Code Online (Sandbox Code Playgroud)
这里$(uname)将返回 Darwin、Linux 等。
另一个使用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
Run Code Online (Sandbox Code Playgroud)
说明:
curl -s -L 是静默下载最新版本的HTML(在重定向之后)
egrep -o '...' 使用正则表达式查找所需的文件
wget --base=http://github.com/ -i - 将管道的相对路径转换为绝对URL
并-O scollector设置所需的文件名.
-N如果文件较新但S3发出403 Forbidden错误,则可能只能添加下载.
假设你想要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"
Run Code Online (Sandbox Code Playgroud)
注意每个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
...
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
Run Code Online (Sandbox Code Playgroud)
jq语法可能很难.这是一个试验jq上述内容的游乐场:https:
//jqplay.org/s/h6_LfoEHLZ
如果可能的话,您应该采取措施通过sha256sum和gpg确保下载的工件的有效性.
使用(内部)wget获取HTML内容的解决方案,为zip文件(使用egrep)过滤它,然后下载zip文件(使用外部wget).
wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*zip' -o)
Run Code Online (Sandbox Code Playgroud)
该链接到发布帮助页确实提到了“最新版本”按钮,但是,这并不让你一个下载链接。
https://github.com/reactiveui/ReactiveUI/releases/latest
为此,您需要先获取最新的标签(如“下载文件最新版本的 GitHub URL ? ”中所述):
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.zip
Run Code Online (Sandbox Code Playgroud)
只需使用以下网址之一即可下载最新版本:(例如,从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'])
Run Code Online (Sandbox Code Playgroud)
也可以看看:
还考虑预发行
/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'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47135 次 |
| 最近记录: |