@@ -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