GitHubURL用于最新版本的_Download文件_?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (5)
  • 关注 (0)
  • 查看 (147)

GitHub提供了一个重定向到信息页最新版本。例如:https://github.com/reactiveui/ReactiveUI/Relations/最新将重定向到https://github.com/reactiveui/ReactiveUI/Relations/tag/5.99.6

但我需要一个指向下载文件本身.在本例中,与绿色下载按钮相关联的zip文件,https://github.com/reactiveui/ReactiveUI/Relations/下载/5.99.6/ReactiveUI-5.99.6.zip

为什么?作为Travis CI脚本的一部分,我想将URL提供给curl,以下载最新版本。

我猜到了一些URL,比如/Releases/Download/latest/file.zip(用“最新”代替版本部分)和/Releases/Download/file.zip,但它们是404。

在shell脚本和curl的上下文中,有什么方法可以这样做吗(注意:在浏览器页面中使用JS)?

提问于
用户回答回答于

应该使用git...

最初,我的.travis.yml是这样的:

before_install:
- curl -L https://raw.githubusercontent.com/greghendershott/travis-racket/master/install-racket.sh | bash

这将从repo自动获得任何最新版本。

但有人向我指出,GitHub不希望人们使用raw.github.com下载。相反,人们应该使用“释放”。所以我是个好人,每次都会手动发布。那么我的.travis.yml是这样的:

before_install:
- curl -L https://github.com/greghendershott/travis-racket/releases/download/v0.6/install-racket.sh | bash

但每次都要放一次。更糟糕的是,需要更新所有.travis.yml文件以指向该文件的更新版本。

只需使用git克隆回购,并使用其中的文件:

before_install:
- git clone https://github.com/greghendershott/travis-racket.git
- cat travis-racket/install-racket.sh | bash # pipe to bash not sh!
用户回答回答于

在Windows上,只使用Powershell,这对我来说是有效的。它可能可以写得短得多。

#Downloads latest paket.bootstrapper.exe from github
$urlbase = "https://github.com"
$latestPage="$urlbase/fsprojects/Paket/releases/latest"
Write-Host "Parsing latest release page: $latestPage"
$page=Invoke-Webrequest -uri $latestPage
$latestBootStrapper=($page.Links | Where-Object { $_.href -match "bootstrapper" }).href

$dlurl="$urlbase$latestBootStrapper"
Write-Host "Downloading paket.bootstrapper.exe from $dlurl"

$wc=new-object net.webclient
$wc.UseDefaultCredentials=$true
$wc.Proxy.Credentials=$wc.Credentials
$wc.DownloadFile($dlurl, (join-path (resolve-path ".\") "paket.bootstrapper.exe"))
用户回答回答于

我使用它来获取PowerShell 5+(替换帐户&repo)中的下载URL。

Invoke-RestMethod -uri  https://api.github.com/repos/ACCOUNT/REPO/releases/latest | select -ExpandProperty assets | select -expand browser_download_url 

注意,如果他们有多个包,这将是一个列表。如果想要选择一个特定的名称,请找到名称的唯一部分,即Win for Windows并使用:(替换帐户、repo和选择器)

Invoke-RestMethod -uri  https://api.github.com/repos/ACCOUNT/REPO/releases/latest | select -ExpandProperty assets | ? { $_.name.Contains("SELECTOR")} | select -expand browser_download_url

另外,如果将上面的内容分配给一个变量,那么可以抓取该文件并使用以下内容解压缩它(假设将该文件分配给$uri):

Invoke-WebRequest $uri -OutFile "release.zip"
Expand-Archive .\release.zip

在PowerShell 6+中,这应该适用于Windows以外的其他平台。

用户回答回答于

非常有趣的是,我还没有注意到GitHub发行版中的“最新”标签。正如我现在所理解的,如果你使用“预发布”--GitHubs发布系统的功能--它们就会被分发出去。但我不知道如何通过最新的路径访问二进制文件。

我建议使用git(在Travis-VM中可以找到)下载最新的标记。

就像Julien Renault在他的博客中所描述的这个,将能够签出存储库中的最新标记,如下所示:

# this step should be optional
git fetch --tags

latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag

此解决方案基于以下假设:最新标记也是最新版本。

用户回答回答于

如果发布版中有一个下载,下面有一种方法可以做到这一点:

wget $(curl -s https://api.github.com/repos/USERNAME/REPONAME/releases/latest | grep 'browser_' | cut -d\" -f4)

这很容易,当然,如果想要将wget换为另一个curl调用,则可以将其转换到某个位置。

基本上,curl调用的是JSON结构,我只是使用基本的shell实用程序来提取下载的URL。

扫码关注云+社区

领取腾讯云代金券