Fix latest release selection on OpenWrt jq

This commit is contained in:
ushan0v
2026-05-20 12:22:55 +03:00
parent f7ec2a9f8e
commit 7148c7778f
2 changed files with 43 additions and 49 deletions
+25 -25
View File
@@ -869,32 +869,32 @@ fetch_github_releases_json() {
select_latest_podkop_plus_release_json() {
asset_ext="$1"
releases_file=""
best_tag=""
tag=""
jq -c --arg ext "$asset_ext" '
def normalized_tag:
(.tag_name // "")
| sub("^v"; "")
| sub("-r(?<n>[0-9]+)$"; "-\(.n)");
def version_key:
normalized_tag as $tag
| if ($tag | test("^[0-9]+(\\.[0-9]+)*-[0-9]+$")) then
(($tag | split("-")[0] | split(".") | map(tonumber)) + [($tag | split("-")[1] | tonumber)])
elif ($tag | test("^[0-9]+(\\.[0-9]+){3}$")) then
($tag | split(".") | map(tonumber))
else
empty
end;
def has_asset($prefix):
any(.assets[]?; ((.name | startswith($prefix + "_")) or (.name | startswith($prefix + "-"))) and (.name | endswith("." + $ext)));
[
.[]
| select(((.draft // false) | not) and ((.prerelease // false) | not))
| select(has_asset("podkop-plus") and has_asset("luci-app-podkop-plus"))
| . + {podkop_plus_version_key: version_key}
]
| sort_by(.podkop_plus_version_key)
| last // empty
'
releases_file="$(mktemp)"
cat > "$releases_file"
for tag in $(jq -r --arg ext "$asset_ext" '
.[]
| select(((.draft // false) | not) and ((.prerelease // false) | not))
| select(any(.assets[]?; ((.name | startswith("podkop-plus_")) or (.name | startswith("podkop-plus-"))) and (.name | endswith("." + $ext))))
| select(any(.assets[]?; ((.name | startswith("luci-app-podkop-plus_")) or (.name | startswith("luci-app-podkop-plus-"))) and (.name | endswith("." + $ext))))
| .tag_name // empty
' "$releases_file"); do
podkop_plus_release_version_parts "$tag" >/dev/null 2>&1 || continue
if [ -z "$best_tag" ] || podkop_plus_release_version_lt "$best_tag" "$tag"; then
best_tag="$tag"
fi
done
if [ -n "$best_tag" ]; then
jq -c --arg tag "$best_tag" '.[] | select(.tag_name == $tag)' "$releases_file" | sed -n '1p'
fi
rm -f "$releases_file"
}
resolve_podkop_plus_release() {
+18 -24
View File
@@ -7267,33 +7267,27 @@ show_system_info() {
}
fetch_latest_podkop_version() {
local releases_file tag best_tag
command -v curl >/dev/null 2>&1 || return 1
if command -v jq >/dev/null 2>&1; then
curl --connect-timeout 2 -m 5 -fsSL "https://api.github.com/repos/$PODKOP_RELEASE_REPO/releases?per_page=50" 2>/dev/null |
jq -r '
def normalized_tag:
(.tag_name // "")
| sub("^v"; "")
| sub("-r(?<n>[0-9]+)$"; "-\(.n)");
def version_key:
normalized_tag as $tag
| if ($tag | test("^[0-9]+(\\.[0-9]+)*-[0-9]+$")) then
(($tag | split("-")[0] | split(".") | map(tonumber)) + [($tag | split("-")[1] | tonumber)])
elif ($tag | test("^[0-9]+(\\.[0-9]+){3}$")) then
($tag | split(".") | map(tonumber))
else
empty
end;
[
.[]
| select(((.draft // false) | not) and ((.prerelease // false) | not))
| . + {podkop_plus_version_key: version_key}
]
| sort_by(.podkop_plus_version_key)
| last
| .tag_name // empty
' 2>/dev/null
releases_file="$(mktemp)"
if curl --connect-timeout 2 -m 5 -fsSL "https://api.github.com/repos/$PODKOP_RELEASE_REPO/releases?per_page=50" > "$releases_file" 2>/dev/null; then
best_tag=""
for tag in $(jq -r '.[] | select(((.draft // false) | not) and ((.prerelease // false) | not)) | .tag_name // empty' "$releases_file" 2>/dev/null); do
is_podkop_release_version "$tag" || continue
if [ -z "$best_tag" ] || [ "$(podkop_release_version_compare "$best_tag" "$tag" 2>/dev/null)" -lt 0 ]; then
best_tag="$tag"
fi
done
rm -f "$releases_file"
[ -n "$best_tag" ] && echo "$best_tag"
else
rm -f "$releases_file"
fi
return 0
fi