Nuget 如何使用JFrog CLI按版本号对Artifactory包搜索结果排序?

Nuget 如何使用JFrog CLI按版本号对Artifactory包搜索结果排序?,nuget,version,artifactory,jq,jfrog-cli,Nuget,Version,Artifactory,Jq,Jfrog Cli,我需要在Artifactory中获取特定NuGet包的最新版本。 我使用以下JFrog CLI命令接收所有版本的列表(稍后使用--limit=1),包括使用jq进行JSON解析: jfrog rt s myRepo/Path/ --props "nuget.id=MyLib" --sort-by=name --sort-order=desc | jq -M -r ".[] | .props.\"nuget.version\" | .[]" 上面的示例产生如下原始字符串输出: 1.2.3.10

我需要在Artifactory中获取特定NuGet包的最新版本。 我使用以下JFrog CLI命令接收所有版本的列表(稍后使用
--limit=1
),包括使用jq进行JSON解析:

jfrog rt s myRepo/Path/ --props "nuget.id=MyLib" --sort-by=name --sort-order=desc  | jq -M -r ".[] | .props.\"nuget.version\" | .[]"
上面的示例产生如下原始字符串输出:

1.2.3.101
1.2.3.103
1.2.3.95
1.2.3.99
1.2.3.99-beta10
1.2.3.99-beta9
map(.props["nuget.version"]) | sort_by(parse)[]
我的目标是获得按版本排序的输出:

1.2.3.95
1.2.3.99
1.2.3.99-beta9
1.2.3.99-beta10
1.2.3.101
1.2.3.103
不幸的是,我不能使用
--sort by=created
,因为它可能不同于版本排序。即使我不使用
--排序方式
选项,它也不起作用。版本号也可以包含“-beta”等字母

在artifactorytreeview中是正确的,但在CLI中不是


如何获得按版本号排序的结果?

您可以使用jq对版本号字符串进行排序

如果字符串是“原始”字符串,每行一个,那么您可以使用以下jq程序:

def parse:
 sub("alpha"; "alpha.")
 | sub("beta"; "beta.") 
 | sub("gamma"; "gamma.")
 | sub("prerelease"; "prerelease.")
 | sub("debug"); "debug.")
 | [splits("[-.]")]
 | map(tonumber? // .) ;

[inputs]
| sort_by(parse)[]
这个jq程序可以这样运行:

jq -nrR -f program.jq versions.txt
对于示例版本号,这将产生:

1.2.3.95
1.2.3.99
1.2.3.99-beta9
1.2.3.99-beta10
1.2.3.101
1.2.3.103
在您的情况下,通过按照上面所示的方式修改程序以使用
parse
,无需再次调用jq即可获得结果。jq计划的主要部分可能如下所示:

1.2.3.101
1.2.3.103
1.2.3.95
1.2.3.99
1.2.3.99-beta10
1.2.3.99-beta9
map(.props["nuget.version"]) | sort_by(parse)[]
(当然,只有在使用
输入读取时才需要-n选项。)

最高版本号 如果(如注释中所示)您只需要最高的版本号,只需将最终的
[]
更改为
[-1]

... | sort_by(parse)[-1]

谢谢你的回复。split(在您的第二个代码段)是否有输入错误?我尝试了几个命令,但始终得到:
jq:error(at:150):拆分输入和分隔符必须是字符串
。您的书写程序显示“类似于此”,但可能是
。props[“nuget.version”]
并不总是字符串。这就是为什么遵循指导原则通常是个好主意。我更新了我的问题/示例。添加第一个命令片段后,我得到了以下(线性化的)结果:
[[“1”、“2”、“3”、“95”]、[“1”、“2”、“3”、“99”]、[“1”、“2”、“3”、“101”]、[“1”、“2”、“3”、“103”]、[“1”、“2”、“3”、“99-beta10”]、[“1”、“2”、“3”、“99-beta9”]
,它们至少对纯数字进行排序,但不使用“-beta”标记。哇,这已经非常有效了!)但奇怪的是,缺少一个输出元素(第一个?)。Artifactory说要找到全部,但输出少了一个。(如何)在没有外部程序的情况下制作一行程序。jq?我试着把它放在引号(')中,同时也转义了双引号(\”)。我的坏-我忘记了-n选项。