Как отсортировать результаты поиска пакетов Artifactory по номеру версии с помощью JFrog CLI? - PullRequest
1 голос
/ 07 мая 2019

Мне нужно получить последнюю версию определенного пакета NuGet в Artifactory .Я использую следующую команду CLI JFrog, чтобы получить список всех версий (позже с --limit=1), включая анализ JSON с jq:

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

Моя цель - получить вывод , отсортированный по версии :

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 как может отличаться от сортировки версий.Даже если я не использую опцию --sort-by, она не работает.Кроме того, номера версий могут содержать буквы типа «-бета».

В Artifactory TreeView это правильно, но не в CLI.

Как получить результат, отсортированный по номеру версии?

1 Ответ

1 голос
/ 07 мая 2019

Вы можете использовать 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

В вашем случае, результат может быть достигнут без повторного вызова jq, изменив вашу программу на использование parse в соответствии с приведенными выше линиями. Основная часть программы jq, вероятно, будет выглядеть примерно так:

map(.props["nuget.version"]) | sort_by(parse)[]

(Конечно, опция -n необходима только при использовании inputs для чтения.)

Самый высокий номер версии

Если (как указано в комментарии относится к делу) вы просто хотите получить наибольший номер версии, вы можете просто изменить окончательный [] на [-1]:

... | sort_by(parse)[-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...