使用jq获取每个主要节点版本的最新版本

法案

是否有任何聪明的方法可以从每个主要节点版本中获取最新版本jq还是我必须编写另一个包装外壳脚本来处理其输出?

我想要得到的(有三个主要版本:v8,v9和v10)最新版本:

v10.1.0
v9.11.1
v8.11.2

发布列表:

$ export repo='nodejs/node'
$ curl -s https://api.github.com/repos/${repo}/tags |jq -r ".[].name"
v10.1.0
v10.0.0
v9.11.1
v9.11.0
v9.10.1
v9.10.0
v9.9.0
v9.8.0
v9.7.1
v9.7.0
v9.6.1
v9.6.0
v9.5.0
v9.4.0
v9.3.0
v9.2.1
v9.2.0
v9.1.0
v9.0.0
v8.11.2
v8.11.1
v8.11.0
v8.10.0
v8.9.4
v8.9.3
v8.9.2
v8.9.1
v8.9.0
v8.8.1
v8.8.0

如果jq -r使用以下过滤器将curl的输出传递到管道中,则无论curl结果中的版本号如何排序,都应该获取主要版本:

map(.name)
| map(split(".") | map(tonumber? // .) )
| group_by(.[0])
| map(sort)
| map( .[-1] | map(tostring) | join("."))
| .[]

变异

如果您还希望对输出进行排序,只需先删除“ v”,然后再粘贴即可。为了通用起见,让我们定义一个函数,该函数将为每个主要版本输出最新的版本标签:

# Input: an array of "x.y.z..." strings, 
# some or all components of which may be integers
# Output: a stream of the latest "major" releases
def majors:
  map( split(".") | map(tonumber? // .))
  | group_by(.[0])
  | map(sort[-1])[]
  | map(tostring)
  | join(".") ;

map( .name[1:] ) | "v" + majors

打字稿

$ jq -rf major-version.jq input.json
v8.11.2
v9.11.1
v10.1.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章