V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Contextualist
V2EX  ›  分享创造

优雅地从 GitHub 下载 latest releases

  •  1
     
  •   Contextualist ·
    Contextualist · 2017-01-07 16:05:10 +08:00 via iPad · 12979 次点击
    这是一个创建于 2663 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道大家写 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

    第 1 条附言  ·  2017-01-07 22:50:46 +08:00
    给 repo 加了 readme

    Docker 镜像: contextualist/glare
    第 2 条附言  ·  2017-08-08 14:41:27 +08:00

    Arukas beta 结束了,demo 我给换到 now.sh 上了:

    用法

    curl -fLO https://glare.now.sh/{owner}/{repo}/{file_name_regrex}
    

    比如

    curl -fLO https://glare.now.sh/xtaci/kcptun/linux-amd64
    
    第 3 条附言  ·  2019-01-09 13:02:15 +08:00
    Now.sh 最近搞 serverless,我就把原来的 docker 版本迁过去了。Demo 地址、API 不变,服务仍然可用,还优化掉了以前几秒钟的冷启动时间。感叹一下对于这种小 API,serverless 太爽了,迁移就加个配置,代码一行不用改。
    19 条回复    2021-10-08 10:37:42 +08:00
    jason0916
        1
    jason0916  
       2017-01-07 16:11:47 +08:00
    如果是 python 的话还有另外一个思路,类似 pip install git+https://github.com/dabeaz/curio.git 这样的操作
    skydiver
        2
    skydiver  
       2017-01-07 16:28:08 +08:00
    Contextualist
        3
    Contextualist  
    OP
       2017-01-07 16:28:46 +08:00 via iPad
    @jason0916 嗯,假如不介意版本的稳定性的话。这样是从源码直接安装吧
    Contextualist
        4
    Contextualist  
    OP
       2017-01-07 16:29:50 +08:00 via iPad
    @skydiver 是的, jq 那套就是从这里学来的
    skydiver
        5
    skydiver  
       2017-01-07 16:31:49 +08:00
    其实直接访问 https://github.com/stedolan/jq/releases/latest 就会收到一个 302 响应,里面就有最新的版本号
    jason0916
        6
    jason0916  
       2017-01-07 16:41:42 +08:00
    @Contextualist 嗯对的,是这样子的,有些仓库里面没设 release 的时候可以考虑这么做,确实有可能不稳定
    Warder
        7
    Warder  
       2017-01-07 16:56:47 +08:00
    npm 上有个包叫做 github-release , 你能想到的功能估计 npm 上早有实现了,可以去搜搜。
    Contextualist
        8
    Contextualist  
    OP
       2017-01-07 22:34:32 +08:00 via iPad
    @skydiver 主要目的是要直接重定向至目标文件

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

    顺带一提,开始写这个东西时,GitHub 还没有针对 latest release 的文件直链。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   980 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:23 · PVG 04:23 · LAX 13:23 · JFK 16:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.