Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes
This commit is contained in:
parent
a3ea46701c
commit
f401c7cc4c
@ -819,6 +819,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
|
|
||||||
msg_info "Fetching GitHub release: $app ($version)"
|
msg_info "Fetching GitHub release: $app ($version)"
|
||||||
|
|
||||||
|
### Tarball Mode ###
|
||||||
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
|
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
|
||||||
url=$(echo "$json" | jq -r '.tarball_url // empty')
|
url=$(echo "$json" | jq -r '.tarball_url // empty')
|
||||||
[[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz"
|
[[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz"
|
||||||
@ -839,6 +840,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
cp -r "$unpack_dir"/* "$target/"
|
cp -r "$unpack_dir"/* "$target/"
|
||||||
shopt -u dotglob nullglob
|
shopt -u dotglob nullglob
|
||||||
|
|
||||||
|
### Binary Mode ###
|
||||||
elif [[ "$mode" == "binary" ]]; then
|
elif [[ "$mode" == "binary" ]]; then
|
||||||
local arch
|
local arch
|
||||||
arch=$(dpkg --print-architecture 2>/dev/null || uname -m)
|
arch=$(dpkg --print-architecture 2>/dev/null || uname -m)
|
||||||
@ -848,12 +850,14 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local assets url_match=""
|
local assets url_match=""
|
||||||
assets=$(echo "$json" | jq -r '.assets[].browser_download_url')
|
assets=$(echo "$json" | jq -r '.assets[].browser_download_url')
|
||||||
|
|
||||||
|
# If explicit filename pattern is provided (param $6), match that first
|
||||||
if [[ -n "$6" ]]; then
|
if [[ -n "$6" ]]; then
|
||||||
for u in $assets; do
|
for u in $assets; do
|
||||||
[[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break
|
[[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If no match via explicit pattern, fall back to architecture heuristic
|
||||||
if [[ -z "$url_match" ]]; then
|
if [[ -z "$url_match" ]]; then
|
||||||
for u in $assets; do
|
for u in $assets; do
|
||||||
if [[ "$u" =~ ($arch|amd64|x86_64|aarch64|arm64).*\.deb$ ]]; then
|
if [[ "$u" =~ ($arch|amd64|x86_64|aarch64|arm64).*\.deb$ ]]; then
|
||||||
@ -863,6 +867,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Fallback: any .deb file
|
||||||
if [[ -z "$url_match" ]]; then
|
if [[ -z "$url_match" ]]; then
|
||||||
for u in $assets; do
|
for u in $assets; do
|
||||||
[[ "$u" =~ \.deb$ ]] && url_match="$u" && break
|
[[ "$u" =~ \.deb$ ]] && url_match="$u" && break
|
||||||
@ -891,8 +896,10 @@ function fetch_and_deploy_gh_release() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
### Prebuild Mode ###
|
||||||
elif [[ "$mode" == "prebuild" ]]; then
|
elif [[ "$mode" == "prebuild" ]]; then
|
||||||
local pattern="$6"
|
local pattern="${6%\"}"
|
||||||
|
pattern="${pattern#\"}"
|
||||||
[[ -z "$pattern" ]] && {
|
[[ -z "$pattern" ]] && {
|
||||||
msg_error "Mode 'prebuild' requires 6th parameter (asset filename pattern)"
|
msg_error "Mode 'prebuild' requires 6th parameter (asset filename pattern)"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
@ -901,7 +908,14 @@ function fetch_and_deploy_gh_release() {
|
|||||||
|
|
||||||
local asset_url=""
|
local asset_url=""
|
||||||
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
||||||
[[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break
|
filename_candidate="${u##*/}"
|
||||||
|
case "$filename_candidate" in
|
||||||
|
$pattern)
|
||||||
|
asset_url="$u"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
[[ -z "$asset_url" ]] && {
|
[[ -z "$asset_url" ]] && {
|
||||||
@ -923,16 +937,18 @@ function fetch_and_deploy_gh_release() {
|
|||||||
$STD apt-get install -y unzip
|
$STD apt-get install -y unzip
|
||||||
fi
|
fi
|
||||||
$STD unzip "$tmpdir/$filename" -d "$target"
|
$STD unzip "$tmpdir/$filename" -d "$target"
|
||||||
elif [[ "$filename" == *.tar.gz ]]; then
|
elif [[ "$filename" == *.tar.* ]]; then
|
||||||
tar -xzf "$tmpdir/$filename" -C "$target"
|
tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
|
||||||
else
|
else
|
||||||
msg_error "Unsupported archive format: $filename"
|
msg_error "Unsupported archive format: $filename"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
### Singlefile Mode ###
|
||||||
elif [[ "$mode" == "singlefile" ]]; then
|
elif [[ "$mode" == "singlefile" ]]; then
|
||||||
local pattern="$6"
|
local pattern="${6%\"}"
|
||||||
|
pattern="${pattern#\"}"
|
||||||
[[ -z "$pattern" ]] && {
|
[[ -z "$pattern" ]] && {
|
||||||
msg_error "Mode 'singlefile' requires 6th parameter (asset filename pattern)"
|
msg_error "Mode 'singlefile' requires 6th parameter (asset filename pattern)"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
@ -941,7 +957,13 @@ function fetch_and_deploy_gh_release() {
|
|||||||
|
|
||||||
local asset_url=""
|
local asset_url=""
|
||||||
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
||||||
[[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break
|
filename_candidate="${u##*/}"
|
||||||
|
case "$filename_candidate" in
|
||||||
|
$pattern)
|
||||||
|
asset_url="$u"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
[[ -z "$asset_url" ]] && {
|
[[ -z "$asset_url" ]] && {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user