diff --git a/install.sh b/install.sh index 82af099..9c5af61 100755 --- a/install.sh +++ b/install.sh @@ -700,14 +700,6 @@ download_binary_from_releases() { echo -e "${BLUE} 发布日期: ${latest_created_at}${NC}" fi - # 构建文件名(根据系统类型) - local file_name="agent-${OS_TYPE}-${ARCH}-${latest_tag}" - local file_ext="tar.gz" - if [ "$OS_TYPE" = "windows" ]; then - file_ext="zip" - fi - local full_file_name="${file_name}.${file_ext}" - # 获取 release 的详细信息(包含 commit hash) local release_detail=$(curl -s -X GET "${repo_api}/releases/${latest_release_id}" 2>/dev/null) @@ -728,14 +720,56 @@ download_binary_from_releases() { fi fi - # 如果还是无法获取 commit hash,使用 assets_response 继续(不强制要求 commit) - local assets_response="$release_detail" + # 构建文件名(根据系统类型) + # 处理 tag 可能带 v 前缀的情况(如 v1.0.0) + local version_in_filename="${latest_tag}" - # 查找匹配的二进制文件 - local download_url=$(echo "$assets_response" | grep -o "\"browser_download_url\":\"[^\"]*${full_file_name}[^\"]*\"" | head -1 | cut -d'"' -f4) + # 如果 tag 以 v 开头,同时尝试带 v 和不带 v 的文件名 + local file_ext="tar.gz" + if [ "$OS_TYPE" = "windows" ]; then + file_ext="zip" + fi - if [ -z "$download_url" ]; then - echo -e "${YELLOW}⚠ 未找到匹配的二进制文件: ${full_file_name}${NC}" + # 先尝试使用 tag 的原始格式(可能带 v) + local file_name_with_v="agent-${OS_TYPE}-${ARCH}-${latest_tag}" + local full_file_name_with_v="${file_name_with_v}.${file_ext}" + + # 如果 tag 以 v 开头,也尝试不带 v 的版本 + local file_name_without_v="" + local full_file_name_without_v="" + if [ "${latest_tag#v}" != "${latest_tag}" ]; then + # tag 以 v 开头,去掉 v 前缀 + version_in_filename="${latest_tag#v}" + file_name_without_v="agent-${OS_TYPE}-${ARCH}-${version_in_filename}" + full_file_name_without_v="${file_name_without_v}.${file_ext}" + fi + + # 查找匹配的二进制文件(优先尝试带 v 的,如果找不到再尝试不带 v 的) + local download_url="" + local full_file_name="" + + # 先尝试带 v 的文件名 + download_url=$(echo "$release_detail" | grep -o "\"browser_download_url\":\"[^\"]*${full_file_name_with_v}[^\"]*\"" | head -1 | cut -d'"' -f4) + + if [ -n "$download_url" ]; then + full_file_name="$full_file_name_with_v" + echo -e "${BLUE}找到文件: ${full_file_name}${NC}" + elif [ -n "$full_file_name_without_v" ]; then + # 如果带 v 的找不到,尝试不带 v 的 + download_url=$(echo "$release_detail" | grep -o "\"browser_download_url\":\"[^\"]*${full_file_name_without_v}[^\"]*\"" | head -1 | cut -d'"' -f4) + if [ -n "$download_url" ]; then + full_file_name="$full_file_name_without_v" + echo -e "${BLUE}找到文件: ${full_file_name} (tag: ${latest_tag})${NC}" + fi + fi + + if [ -z "$download_url" ] || [ -z "$full_file_name" ]; then + echo -e "${YELLOW}⚠ 未找到匹配的二进制文件${NC}" + echo -e "${YELLOW} 尝试的文件名:${NC}" + echo -e "${YELLOW} - ${full_file_name_with_v}${NC}" + if [ -n "$full_file_name_without_v" ]; then + echo -e "${YELLOW} - ${full_file_name_without_v}${NC}" + fi echo -e "${YELLOW} 将使用源码编译${NC}" return 1 fi