尽管这个问题类似于GitHub latest release,但它实际上是不同的--它是关于一个链接,它意味着“下载文件本身的最新版本”。
GitHub提供了一个“最新”的网址,可以重定向到最新版本的信息页面。例如:https://github.com/reactiveui/ReactiveUI/releases/latest将重定向到https://github.com/reactiveui/ReactiveUI/releases/tag/5.99.6 (在我输入的时候;或者将来某一天会重定向到更新版本的页面)。
这很好,但我需要下载文件本身的URL。在本例中,与绿色download按钮https://github.com/reactiveui/ReactiveUI/releases/download/5.99.6/ReactiveUI-5.99.6.zip关联的.zip文件(在我输入的时候;或者将来某一天将其转换为一个更新的压缩文件)。
为什么?我想将URL提供给curl,作为Travis CI脚本的一部分,以下载最新版本。
我猜有几个URL,比如/releases/download/latest/file.zip (用"latest“代替版本部分)和/release/download/file.zip,但那404。
有没有办法做到这一点--在shell脚本和curl的上下文中(注意:不是在使用JS的浏览器页面中)?
发布于 2014-06-07 07:52:56
正如@florianb指出的那样,我应该使用git。
最初我的.travis.yml是这样的:
before_install:
- curl -L https://raw.githubusercontent.com/greghendershott/travis-racket/master/install-racket.sh | bash
这将自动从repo中获取任何最新版本。
但有人向我指出,GitHub不希望人们使用raw.github.com
进行下载。相反,人们应该使用"releases“。因此,我是一个很好的doob,并且每次都手动发布。然后我的.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!
发布于 2015-04-08 08:09:19
如果你在发行版中只有一次下载,这里有一种方法可以在没有Github的情况下完成:
wget $(curl -s https://api.github.com/repos/USERNAME/REPONAME/releases/latest | grep 'browser_' | cut -d\" -f4)
这非常简单(尽管不是很好),当然,如果您想通过管道将wget传递给某个对象,可以将其替换为另一个curl调用。
基本上,curl调用为您提供了一个JSON结构,我只是使用基本的shell实用程序来提取下载的URL。
发布于 2014-06-07 00:25:03
非常有趣,我还没有注意到GitHub中的“最新”标签--发布。正如我现在所了解的,如果你使用的是GitHubs release-system的“预发布”-capabilities,它们是免费的。但是我不知道任何通过最新路径访问二进制文件的方法。
我建议您使用git (在您的travis-vm中提供)来下载最新的标签。
就像Julien Renault在他的博客post中描述的那样,你可以像这样签出存储库中的最新标签:
# this step should be optional
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
该解决方案基于最新标签也是最新版本的假设。
https://stackoverflow.com/questions/24085978
复制相似问题