|
@@ -10,26 +10,59 @@ DEFAULT_VERSION="v1.2"
|
|
|
|
|
|
|
|
# 国内使用 GitHub 代理加速
|
|
# 国内使用 GitHub 代理加速
|
|
|
# 支持通过环境变量 GITHUB_PROXY 覆盖默认代理
|
|
# 支持通过环境变量 GITHUB_PROXY 覆盖默认代理
|
|
|
-GITHUB_PROXY="${GITHUB_PROXY:-https://ghfast.top}"
|
|
|
|
|
-GITHUB_API_URL="${GITHUB_PROXY}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
|
|
|
|
|
-GITHUB_DOWNLOAD_BASE="${GITHUB_PROXY}/https://github.com/aiprodcoder/MIXAPI/releases/download"
|
|
|
|
|
|
|
+# 备用代理列表(按优先级排序)
|
|
|
|
|
+GITHUB_PROXY_LIST="${GITHUB_PROXY:-https://mirror.ghproxy.com https://gh.ddlc.top https://ghfast.top https://github.moeyy.xyz}"
|
|
|
|
|
|
|
|
-# 获取最新版本号
|
|
|
|
|
|
|
+# 测试代理是否可用
|
|
|
|
|
+test_proxy() {
|
|
|
|
|
+ local proxy=$1
|
|
|
|
|
+ local test_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
|
|
|
|
|
+ wget -qO- --timeout=10 "$test_url" >/dev/null 2>&1
|
|
|
|
|
+ return $?
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 获取可用的代理
|
|
|
|
|
+get_working_proxy() {
|
|
|
|
|
+ for proxy in $GITHUB_PROXY_LIST; do
|
|
|
|
|
+ echo "测试代理: $proxy" >&2
|
|
|
|
|
+ if test_proxy "$proxy"; then
|
|
|
|
|
+ echo "代理可用: $proxy" >&2
|
|
|
|
|
+ echo "$proxy"
|
|
|
|
|
+ return 0
|
|
|
|
|
+ fi
|
|
|
|
|
+ echo "代理不可用: $proxy" >&2
|
|
|
|
|
+ done
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ return 1
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 获取最新版本号(带重试机制)
|
|
|
get_latest_version() {
|
|
get_latest_version() {
|
|
|
- wget -qO- "$GITHUB_API_URL" | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p'
|
|
|
|
|
|
|
+ local proxy
|
|
|
|
|
+ for proxy in $GITHUB_PROXY_LIST; do
|
|
|
|
|
+ local api_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest"
|
|
|
|
|
+ local version=$(wget -qO- --timeout=15 "$api_url" 2>/dev/null | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p')
|
|
|
|
|
+ if [ -n "$version" ]; then
|
|
|
|
|
+ # 保存可用的代理供后续使用
|
|
|
|
|
+ WORKING_PROXY="$proxy"
|
|
|
|
|
+ echo "$version"
|
|
|
|
|
+ return 0
|
|
|
|
|
+ fi
|
|
|
|
|
+ done
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ return 1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# 获取下载URL
|
|
|
|
|
-get_download_url() {
|
|
|
|
|
- local version=$1
|
|
|
|
|
|
|
+# 获取架构对应的文件名后缀
|
|
|
|
|
+get_arch_suffix() {
|
|
|
local arch="$(uname -m)"
|
|
local arch="$(uname -m)"
|
|
|
|
|
|
|
|
case "$arch" in
|
|
case "$arch" in
|
|
|
'x86_64')
|
|
'x86_64')
|
|
|
- echo "${GITHUB_DOWNLOAD_BASE}/${version}/mixapi-${version}-linux-amd64"
|
|
|
|
|
|
|
+ echo "linux-amd64"
|
|
|
;;
|
|
;;
|
|
|
'aarch64')
|
|
'aarch64')
|
|
|
- echo "${GITHUB_DOWNLOAD_BASE}/${version}/mixapi-${version}-linux-arm64"
|
|
|
|
|
|
|
+ echo "linux-arm64"
|
|
|
;;
|
|
;;
|
|
|
*)
|
|
*)
|
|
|
echo ""
|
|
echo ""
|
|
@@ -37,28 +70,50 @@ get_download_url() {
|
|
|
esac
|
|
esac
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# 下载指定版本
|
|
|
|
|
|
|
+# 下载指定版本(带多代理重试机制)
|
|
|
# 参数: $1=版本号, $2=目标文件路径
|
|
# 参数: $1=版本号, $2=目标文件路径
|
|
|
download_version() {
|
|
download_version() {
|
|
|
local version=$1
|
|
local version=$1
|
|
|
local target=$2
|
|
local target=$2
|
|
|
- local url=$(get_download_url "$version")
|
|
|
|
|
|
|
+ local arch_suffix=$(get_arch_suffix)
|
|
|
|
|
|
|
|
- if [ -z "$url" ]; then
|
|
|
|
|
|
|
+ if [ -z "$arch_suffix" ]; then
|
|
|
echo "不支持的架构: $(uname -m)"
|
|
echo "不支持的架构: $(uname -m)"
|
|
|
return 1
|
|
return 1
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
- echo "下载地址: ${url}"
|
|
|
|
|
- wget -qO "$target" "$url"
|
|
|
|
|
|
|
+ local filename="mixapi-${version}-${arch_suffix}"
|
|
|
|
|
+ local github_path="https://github.com/aiprodcoder/MIXAPI/releases/download/${version}/${filename}"
|
|
|
|
|
|
|
|
- if [ $? -eq 0 ] && [ -s "$target" ]; then
|
|
|
|
|
- chmod +x "$target"
|
|
|
|
|
- return 0
|
|
|
|
|
- else
|
|
|
|
|
- rm -f "$target"
|
|
|
|
|
- return 1
|
|
|
|
|
|
|
+ # 如果之前已经找到可用代理,优先使用
|
|
|
|
|
+ if [ -n "$WORKING_PROXY" ]; then
|
|
|
|
|
+ local url="${WORKING_PROXY}/${github_path}"
|
|
|
|
|
+ echo "下载地址: ${url}"
|
|
|
|
|
+ wget -qO "$target" --timeout=60 "$url" 2>/dev/null
|
|
|
|
|
+ if [ $? -eq 0 ] && [ -s "$target" ]; then
|
|
|
|
|
+ chmod +x "$target"
|
|
|
|
|
+ return 0
|
|
|
|
|
+ fi
|
|
|
fi
|
|
fi
|
|
|
|
|
+
|
|
|
|
|
+ # 遍历所有代理尝试下载
|
|
|
|
|
+ for proxy in $GITHUB_PROXY_LIST; do
|
|
|
|
|
+ local url="${proxy}/${github_path}"
|
|
|
|
|
+ echo "尝试下载: ${url}"
|
|
|
|
|
+ wget -qO "$target" --timeout=60 "$url" 2>/dev/null
|
|
|
|
|
+
|
|
|
|
|
+ if [ $? -eq 0 ] && [ -s "$target" ]; then
|
|
|
|
|
+ chmod +x "$target"
|
|
|
|
|
+ WORKING_PROXY="$proxy"
|
|
|
|
|
+ echo "下载成功 (代理: $proxy)"
|
|
|
|
|
+ return 0
|
|
|
|
|
+ fi
|
|
|
|
|
+ echo "下载失败,尝试下一个代理..."
|
|
|
|
|
+ rm -f "$target"
|
|
|
|
|
+ done
|
|
|
|
|
+
|
|
|
|
|
+ echo "所有代理均下载失败"
|
|
|
|
|
+ return 1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
# 获取当前版本
|
|
# 获取当前版本
|