使用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最新发布的页面


当前回答

这种解决方案的好处是您不必指定任何版本或标记号—它只会抓取LATEST。

测试:

我使用以下Github用户和repo进行了测试:

“f1linux” = Github用户 “pi-ap” = 存储库

repo保存到的任意目录名称设置为:

--one-top-level="pi-ap"

直接:

使用Firefox的“Web Developer”工具(右上角的3条),在“Network”部分,我发现https://api.github.com重定向到https://codeload.github.com,所以通过管道curl到tar,我能够获取最新版本的repo并将其保存为可预测的名称,以便对其进行操作:

curl https://codeload.github.com/f1linux/pi-ap/legacy.tar.gz/master | tar xzvf - --one-top-level="pi-ap" --strip-components 1

间接:

在我使用DIRECT URL实现了最新版本的全自动下载后,我将注意力转向了用Github的重定向实现同样的功能:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

首选的方法:

然而,请注意,根据冯的评论,间接是首选的方法

进一步验证:

为了确保我的结果可复制到其他版本的Github reppos,我们成功地为Digital Ocean的doctl api工具包执行了相同的测试(这实际上是整个练习的开始!):

DIRECT和INDIRECT都使用与上面相同的表单,只需更改用户名和repo:

直接:

curl https://codeload.github.com/digitalocean/doctl/legacy.tar.gz/master | tar xzvf - --one-top-level="doctl" --strip-components 1 

间接:

curl -L https://api.github.com/repos/digitalocean/doctl/tarball | tar xzvf - --one-top-level="doctl" --strip-components 1

其他回答

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

使用curl和jq从命令行检索最新版本的第一个文件:

curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \
  jq --raw-output '.assets[0] | .browser_download_url'

我想从README下载版本。Md文件在存储库描述中。在那里,我无法执行JavaScript。

我可以为我所有的存储库在README文件或github页面中添加这样的链接:

https://niccokunzmann.github.io/download_latest/ <用户名> / <库> / <文件> 从存储库下载最新的发布文件。 https://niccokunzmann.github.io/download_latest/ <文件> 这是因为JavaScript引用器已经设置好,要下载的存储库是通过document.referrer确定的。因此,该链接也适用于分叉。

你可以在这里找到源代码,fork或使用我的repo。

如果你想在alpine中使用,请遵循以下步骤:

 apk add curl ca-certificates wget
wget -q $(curl -s https://api.github.com/repos/<USER>/<REPOSITORY>/releases/latest | grep browser_download_url | grep "$ARCH" | cut -d '"' -f 4)

wget中的-q标志是安静模式。如果您想查看输出,那么使用不带-q的参数。

这种解决方案的好处是您不必指定任何版本或标记号—它只会抓取LATEST。

测试:

我使用以下Github用户和repo进行了测试:

“f1linux” = Github用户 “pi-ap” = 存储库

repo保存到的任意目录名称设置为:

--one-top-level="pi-ap"

直接:

使用Firefox的“Web Developer”工具(右上角的3条),在“Network”部分,我发现https://api.github.com重定向到https://codeload.github.com,所以通过管道curl到tar,我能够获取最新版本的repo并将其保存为可预测的名称,以便对其进行操作:

curl https://codeload.github.com/f1linux/pi-ap/legacy.tar.gz/master | tar xzvf - --one-top-level="pi-ap" --strip-components 1

间接:

在我使用DIRECT URL实现了最新版本的全自动下载后,我将注意力转向了用Github的重定向实现同样的功能:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

首选的方法:

然而,请注意,根据冯的评论,间接是首选的方法

进一步验证:

为了确保我的结果可复制到其他版本的Github reppos,我们成功地为Digital Ocean的doctl api工具包执行了相同的测试(这实际上是整个练习的开始!):

DIRECT和INDIRECT都使用与上面相同的表单,只需更改用户名和repo:

直接:

curl https://codeload.github.com/digitalocean/doctl/legacy.tar.gz/master | tar xzvf - --one-top-level="doctl" --strip-components 1 

间接:

curl -L https://api.github.com/repos/digitalocean/doctl/tarball | tar xzvf - --one-top-level="doctl" --strip-components 1