使用GitHub的发布功能,可以提供一个链接来下载已发布软件的特定版本。然而,每次发布时,gh-page也需要更新。

有没有一种方法可以获取到软件最新版本的特定文件的链接?

例如,这将是一个静态链接:

https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip

我想要的是:

https://github.com/USER/PROJECT/releases/download/latest/package.zip

注意:这个问题和 GitHub最新发布 这个问题特别要求访问文件, 而不是GitHub最新发布的页面


当前回答

只需使用下面的网址下载最新版本: (以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

点击其中一个网址立即下载最新版本。当我写这一行时,它目前是:boxbilling-boxbilling-4.20-30-g452ad1c[.zip/.tar.gz]

更新:在我的日志文件中发现了另一个url(参考上面的例子) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master

其他回答

你可以使用GitHub发布API做一个ajax请求来获得最新版本的下载URL。它还显示了它的发布时间和下载计数:

function GetLatestReleaseInfo() { $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) { UpdateDownloadButton(release, ".exe", $(".setup")); UpdateDownloadButton(release, "portable.zip", $(".portable")); }); } function UpdateDownloadButton(release, assetExtension, element) { let asset = release.assets.find(asset => asset.name.endsWith(assetExtension)); let releaseInfo = "Version: " + release.tag_name.substring(1) + "\nFile size: " + (asset.size / 1024 / 1024).toFixed(2) + " MB" + "\nRelease date: " + new Date(asset.updated_at).toLocaleDateString("en-CA") + "\nDownload count: " + asset.download_count.toLocaleString(); element.attr("href", asset.browser_download_url); element.attr("title", releaseInfo); } GetLatestReleaseInfo(); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a class="setup" href="https://github.com/ShareX/ShareX/releases/latest">Setup</a> <a class="portable" href="https://github.com/ShareX/ShareX/releases/latest">Portable</a>

当请求完成时,按钮的URL将自动更改为直接下载URL。

如前所述,jq对于这个和其他REST api很有用。

Tl;dr -详情如下

假设你想要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都可以有不同的方式提供所需的工件,因此我将演示一个表现良好的工件,比如atom。

发布资产的名称

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

下面原子-mac是我想要的资产通过jq的选择(.name=="原子-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下载的工件的有效性。

Github现在支持从最新版本下载单个文件的静态链接:https://help.github.com/en/articles/linking-to-releases

https://github.com/USER/PROJECT/releases/latest/download/package.zip

简单的命令,工作和下载最新的包可用的github发行版

curl -ks https://api.github.com/repos/<reponame>/releases/latest | grep "browser_download_url.*linux-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs wget --no-check-certificate

Reponame -替换它与github repo与可用的包 释放 可以根据需要替换包的.tar.gz类型。除 . zip等

晚了几年,但我只是实现了一个简单的重定向到支持https://github.com/USER/PROJECT/releases/latest/download/package.zip。这应该重定向到最新的带标签的package.zip发行资产。希望它很方便!