优雅地从 GitHub 下载 latest releases

2017-01-07 16:05:10 +08:00
 Contextualist

不知道大家写 bash 脚本或者 Dockerfile 的时候有没有需要从 GitHub 下载 latest releases 来安装的情况?我之前遇到这个问题, google 后发现,比较好的处理思路是从 GitHub API 得到 releases 信息,然后用 jq 来处理 json ,得到目标 latest release 的下载链接。 jq 免去了用 sed 处理 json 的繁琐。

但我总觉得不够纯粹,为了方便地下载 latest release ,我得从 GitHub 先下载 jq (不知道为什么, Alpine apk 的安装包是不带正则处理的版本)。而且,虽然比用 sed 要好,下载的命令还是不那么直观。

于是我做了个小小的工具用来快捷地重定向至下载链接。 demo 搭在 arukas 上
用法:

curl -fLO https://glare.arukascloud.io/{owner}/{repo}/{file_name_regrex}

比如

curl -fLO https://glare.arukascloud.io/xtaci/kcptun/linux-amd64

源码: https://github.com/Contextualist/glare

13324 次点击
所在节点    分享创造
19 条回复
JhZ7z587cYROBgVQ
2017-01-07 16:11:47 +08:00
如果是 python 的话还有另外一个思路,类似 pip install git+https://github.com/dabeaz/curio.git 这样的操作
skydiver
2017-01-07 16:28:08 +08:00
Contextualist
2017-01-07 16:28:46 +08:00
@jason0916 嗯,假如不介意版本的稳定性的话。这样是从源码直接安装吧
Contextualist
2017-01-07 16:29:50 +08:00
@skydiver 是的, jq 那套就是从这里学来的
skydiver
2017-01-07 16:31:49 +08:00
其实直接访问 https://github.com/stedolan/jq/releases/latest 就会收到一个 302 响应,里面就有最新的版本号
JhZ7z587cYROBgVQ
2017-01-07 16:41:42 +08:00
@Contextualist 嗯对的,是这样子的,有些仓库里面没设 release 的时候可以考虑这么做,确实有可能不稳定
Warder
2017-01-07 16:56:47 +08:00
npm 上有个包叫做 github-release , 你能想到的功能估计 npm 上早有实现了,可以去搜搜。
Contextualist
2017-01-07 22:34:32 +08:00
@skydiver 主要目的是要直接重定向至目标文件

@Warder 搜了一下,是有几个。我对 npm 不熟, npm 安装包后可以像 pip 那样生成一个命令行工具吗?不过这些包倒是可以用来建 node 服务。其实我这轮子实在太简单,应该满大街都是
skydiver
2017-01-07 22:42:26 +08:00
@Contextualist 都拿到版本号了,想下载就很轻松的事情
Contextualist
2017-01-07 22:56:31 +08:00
@skydiver 哈哈,我人懒啊(摊手
为了每次少思考几分钟,先花了几十分钟写轮子
Warder
2017-01-08 13:25:36 +08:00
@Contextualist 大部分应该提供了 cli 工具, npm i -g xxx 就能够用了
livc
2017-01-08 20:20:28 +08:00
有用一些开源软件,直接 RSS 了 release 页面。。有更新就手动去下载
Remember
2017-03-08 23:31:20 +08:00
curl 了之后 grep tag_name 然后 cut 就好了哇,并不需要 sed 处理
crystone
2018-04-18 15:53:26 +08:00
now 服务最近不能使用了?
Contextualist
2018-04-18 16:00:42 +08:00
@crystone 刚刚看了下,应该没问题。因为 now.sh 对于一段时间(好像是大约一天)内没访问的实例会冻结,再次访问时第一次解冻会比较慢。
CharlieYu4994
2021-07-09 23:18:10 +08:00
CharlieYu4994
2021-07-09 23:18:55 +08:00
@skydiver 更进一步,其实 lstest 会被文本替换
learningman
2021-09-28 11:24:18 +08:00
@CharlieYu4994 #16 现在不行了
Contextualist
2021-10-08 10:37:42 +08:00
@CharlieYu4994 @learningman
就目前来说,如果你需要的文件名在不同的 release 中都是一个固定的字符串,那推荐使用 GitHub 官方的直链。但有些仓库(比如 kcptun, frp )的作者会在文件名中包含版本号这种每个 release 都会变化的部分,那我这个的正则匹配还是有用武之地的。

顺带一提,开始写这个东西时,GitHub 还没有针对 latest release 的文件直链。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332891

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX