虽然这个问题是相似于GitHub的最新版本,它实际上是不同的-它是关于一个链接,意思是"最新版本的下载文件本身".
GitHub提供了一个"最新"URL,可以重定向到最新版本的信息页面.例如:https://github.com/reactiveui/ReactiveUI/releases/latest将重定向到https://github.com/reactiveui/ReactiveUI/releases/tag/5.99.6(因为我输入此内容;或者到页面对于更新的版本,总有一天).
这很好,但我需要一个下载文件本身的URL .在此示例中,与绿色下载按钮关联的.zip文件, https://github.com/reactiveui/ReactiveUI/releases/download/5.99.6/ReactiveUI-5.99.6.zip(因为我输入此内容;或者有一天,一个较新的zip文件.
为什么?作为Travis CI脚本的一部分,我想提供curl的URL来下载最新版本.
我猜到了几个URL,比如/ releases/download/latest /file.zip(用"latest"代替版本部分)和/releases/download/file.zip但是那些404.
有没有办法做到这一点 - 在shell脚本和curl的上下文中(注意:不是在带JS的浏览器页面中)?
The*_*ill 15
如果您在发行版中只有一个下载,这是一种不使用Github的方法:
wget $(curl -s https://api.github.com/repos/USERNAME/REPONAME/releases/latest | grep 'browser_' | cut -d\" -f4)
Run Code Online (Sandbox Code Playgroud)
这很容易(虽然不是很漂亮),当然如果你想把它换成什么东西,你可以换掉wget用于另一个curl调用.
基本上,curl调用会给你一个JSON结构,我只是使用基本的shell实用程序来提取下载的URL.
Gre*_*ott -1
正如@florianb 指出的,我应该使用 git。
最初我的 .travis.yml 是这样的:
before_install:
- curl -L https://raw.githubusercontent.com/greghendershott/travis-racket/master/install-racket.sh | bash
Run Code Online (Sandbox Code Playgroud)
这将自动从存储库中获取最新版本。
但有人向我指出,GitHub 不希望人们用于raw.github.com
下载。相反,人们应该使用“发布”。所以我是一个好人,每次都手动发布。然后我的 .travis.yml 是这样的:
before_install:
- curl -L https://github.com/greghendershott/travis-racket/releases/download/v0.6/install-racket.sh | bash
Run Code Online (Sandbox Code Playgroud)
但每次发布都是 PITA。更糟糕的是,所有 .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!
Run Code Online (Sandbox Code Playgroud)