Skip to content

Commit f401c7c

Browse files
committed
Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes
1 parent a3ea467 commit f401c7c

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

misc/tools.func

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,7 @@ function fetch_and_deploy_gh_release() {
819819

820820
msg_info "Fetching GitHub release: $app ($version)"
821821

822+
### Tarball Mode ###
822823
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
823824
url=$(echo "$json" | jq -r '.tarball_url // empty')
824825
[[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz"
@@ -839,6 +840,7 @@ function fetch_and_deploy_gh_release() {
839840
cp -r "$unpack_dir"/* "$target/"
840841
shopt -u dotglob nullglob
841842

843+
### Binary Mode ###
842844
elif [[ "$mode" == "binary" ]]; then
843845
local arch
844846
arch=$(dpkg --print-architecture 2>/dev/null || uname -m)
@@ -848,12 +850,14 @@ function fetch_and_deploy_gh_release() {
848850
local assets url_match=""
849851
assets=$(echo "$json" | jq -r '.assets[].browser_download_url')
850852

853+
# If explicit filename pattern is provided (param $6), match that first
851854
if [[ -n "$6" ]]; then
852855
for u in $assets; do
853856
[[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break
854857
done
855858
fi
856859

860+
# If no match via explicit pattern, fall back to architecture heuristic
857861
if [[ -z "$url_match" ]]; then
858862
for u in $assets; do
859863
if [[ "$u" =~ ($arch|amd64|x86_64|aarch64|arm64).*\.deb$ ]]; then
@@ -863,6 +867,7 @@ function fetch_and_deploy_gh_release() {
863867
done
864868
fi
865869

870+
# Fallback: any .deb file
866871
if [[ -z "$url_match" ]]; then
867872
for u in $assets; do
868873
[[ "$u" =~ \.deb$ ]] && url_match="$u" && break
@@ -891,8 +896,10 @@ function fetch_and_deploy_gh_release() {
891896
}
892897
}
893898

899+
### Prebuild Mode ###
894900
elif [[ "$mode" == "prebuild" ]]; then
895-
local pattern="$6"
901+
local pattern="${6%\"}"
902+
pattern="${pattern#\"}"
896903
[[ -z "$pattern" ]] && {
897904
msg_error "Mode 'prebuild' requires 6th parameter (asset filename pattern)"
898905
rm -rf "$tmpdir"
@@ -901,7 +908,14 @@ function fetch_and_deploy_gh_release() {
901908

902909
local asset_url=""
903910
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
904-
[[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break
911+
filename_candidate="${u##*/}"
912+
case "$filename_candidate" in
913+
$pattern)
914+
asset_url="$u"
915+
break
916+
;;
917+
esac
918+
905919
done
906920

907921
[[ -z "$asset_url" ]] && {
@@ -923,16 +937,18 @@ function fetch_and_deploy_gh_release() {
923937
$STD apt-get install -y unzip
924938
fi
925939
$STD unzip "$tmpdir/$filename" -d "$target"
926-
elif [[ "$filename" == *.tar.gz ]]; then
927-
tar -xzf "$tmpdir/$filename" -C "$target"
940+
elif [[ "$filename" == *.tar.* ]]; then
941+
tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
928942
else
929943
msg_error "Unsupported archive format: $filename"
930944
rm -rf "$tmpdir"
931945
return 1
932946
fi
933947

948+
### Singlefile Mode ###
934949
elif [[ "$mode" == "singlefile" ]]; then
935-
local pattern="$6"
950+
local pattern="${6%\"}"
951+
pattern="${pattern#\"}"
936952
[[ -z "$pattern" ]] && {
937953
msg_error "Mode 'singlefile' requires 6th parameter (asset filename pattern)"
938954
rm -rf "$tmpdir"
@@ -941,7 +957,13 @@ function fetch_and_deploy_gh_release() {
941957

942958
local asset_url=""
943959
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
944-
[[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break
960+
filename_candidate="${u##*/}"
961+
case "$filename_candidate" in
962+
$pattern)
963+
asset_url="$u"
964+
break
965+
;;
966+
esac
945967
done
946968

947969
[[ -z "$asset_url" ]] && {

0 commit comments

Comments
 (0)