From 71eab8e07e4e5aaf066a0cee49b7e2beb5e1c952 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 31 Jan 2026 05:00:11 +0000 Subject: [PATCH] chore: resolve latest release in install scripts Install scripts now derive the release tag dynamically (with a CN mirror fallback) instead of being pinned to a single version. --- install.sh | 93 ++++++++++++++++++++++++++++++++++++++++++------ panel_install.sh | 82 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 157 insertions(+), 18 deletions(-) diff --git a/install.sh b/install.sh index 60605b7..20f368c 100644 --- a/install.sh +++ b/install.sh @@ -1,5 +1,8 @@ #!/bin/bash +# GitHub repo used for release downloads +REPO="Sagit-chu/flux-panel" + # 获取系统架构 get_architecture() { ARCH=$(uname -m) @@ -16,20 +19,90 @@ get_architecture() { esac } +# 安装目录 +INSTALL_DIR="/etc/flux_agent" + +# 识别国家(用于镜像加速) +COUNTRY=$(curl -s https://ipinfo.io/country) + +maybe_proxy_url() { + local url="$1" + if [ "$COUNTRY" = "CN" ]; then + echo "https://ghfast.top/${url}" + else + echo "$url" + fi +} + +resolve_latest_release_tag() { + local effective_url tag api_tag latest_url api_url + + latest_url="https://github.com/${REPO}/releases/latest" + api_url="https://api.github.com/repos/${REPO}/releases/latest" + + # 方式1:跟随重定向,取最终 URL 的最后一段作为 tag + effective_url=$(curl -fsSL -o /dev/null -w '%{url_effective}' -L "$latest_url" 2>/dev/null || true) + tag="${effective_url##*/}" + if [[ -n "$tag" && "$tag" != "latest" ]]; then + echo "$tag" + return 0 + fi + + # CN 环境下可尝试通过镜像访问(不影响非 CN) + if [ "$COUNTRY" = "CN" ]; then + effective_url=$(curl -fsSL -o /dev/null -w '%{url_effective}' -L "$(maybe_proxy_url "$latest_url")" 2>/dev/null || true) + tag="${effective_url##*/}" + if [[ -n "$tag" && "$tag" != "latest" ]]; then + echo "$tag" + return 0 + fi + fi + + # 方式2:GitHub API(无需 jq) + api_tag=$(curl -fsSL "$api_url" 2>/dev/null | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/' || true) + if [[ -n "$api_tag" ]]; then + echo "$api_tag" + return 0 + fi + + if [ "$COUNTRY" = "CN" ]; then + api_tag=$(curl -fsSL "$(maybe_proxy_url "$api_url")" 2>/dev/null | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/' || true) + if [[ -n "$api_tag" ]]; then + echo "$api_tag" + return 0 + fi + fi + + return 1 +} + +resolve_version() { + if [[ -n "${VERSION:-}" ]]; then + echo "$VERSION" + return 0 + fi + if [[ -n "${FLUX_VERSION:-}" ]]; then + echo "$FLUX_VERSION" + return 0 + fi + + if resolve_latest_release_tag; then + return 0 + fi + + echo "❌ 无法获取最新版本号。你可以手动指定版本,例如:VERSION=<版本号> ./install.sh" >&2 + return 1 +} + # 构建下载地址 build_download_url() { local ARCH=$(get_architecture) - echo "https://github.com/Sagit-chu/flux-panel/releases/download/2.0.8/gost-${ARCH}" + echo "https://github.com/${REPO}/releases/download/${RESOLVED_VERSION}/gost-${ARCH}" } -# 下载地址 -DOWNLOAD_URL=$(build_download_url) -INSTALL_DIR="/etc/flux_agent" -COUNTRY=$(curl -s https://ipinfo.io/country) -if [ "$COUNTRY" = "CN" ]; then - # 拼接 URL - DOWNLOAD_URL="https://ghfast.top/${DOWNLOAD_URL}" -fi +# 解析版本并构建下载地址 +RESOLVED_VERSION=$(resolve_version) || exit 1 +DOWNLOAD_URL=$(maybe_proxy_url "$(build_download_url)") @@ -365,4 +438,4 @@ main() { } # 执行主函数 -main \ No newline at end of file +main diff --git a/panel_install.sh b/panel_install.sh index b803503..21f8ade 100755 --- a/panel_install.sh +++ b/panel_install.sh @@ -7,16 +7,82 @@ export LC_ALL=C -# 全局下载地址配置 -DOCKER_COMPOSEV4_URL="https://github.com/Sagit-chu/flux-panel/releases/download/2.0.8/docker-compose-v4.yml" -DOCKER_COMPOSEV6_URL="https://github.com/Sagit-chu/flux-panel/releases/download/2.0.8/docker-compose-v6.yml" +# GitHub repo used for release downloads +REPO="Sagit-chu/flux-panel" COUNTRY=$(curl -s https://ipinfo.io/country) -if [ "$COUNTRY" = "CN" ]; then - # 拼接 URL - DOCKER_COMPOSEV4_URL="https://ghfast.top/${DOCKER_COMPOSEV4_URL}" - DOCKER_COMPOSEV6_URL="https://ghfast.top/${DOCKER_COMPOSEV6_URL}" -fi + +maybe_proxy_url() { + local url="$1" + if [ "$COUNTRY" = "CN" ]; then + echo "https://ghfast.top/${url}" + else + echo "$url" + fi +} + +resolve_latest_release_tag() { + local effective_url tag api_tag latest_url api_url + + latest_url="https://github.com/${REPO}/releases/latest" + api_url="https://api.github.com/repos/${REPO}/releases/latest" + + effective_url=$(curl -fsSL -o /dev/null -w '%{url_effective}' -L "$latest_url" 2>/dev/null || true) + tag="${effective_url##*/}" + if [[ -n "$tag" && "$tag" != "latest" ]]; then + echo "$tag" + return 0 + fi + + if [ "$COUNTRY" = "CN" ]; then + effective_url=$(curl -fsSL -o /dev/null -w '%{url_effective}' -L "$(maybe_proxy_url "$latest_url")" 2>/dev/null || true) + tag="${effective_url##*/}" + if [[ -n "$tag" && "$tag" != "latest" ]]; then + echo "$tag" + return 0 + fi + fi + + api_tag=$(curl -fsSL "$api_url" 2>/dev/null | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/' || true) + if [[ -n "$api_tag" ]]; then + echo "$api_tag" + return 0 + fi + + if [ "$COUNTRY" = "CN" ]; then + api_tag=$(curl -fsSL "$(maybe_proxy_url "$api_url")" 2>/dev/null | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/' || true) + if [[ -n "$api_tag" ]]; then + echo "$api_tag" + return 0 + fi + fi + + return 1 +} + +resolve_version() { + if [[ -n "${VERSION:-}" ]]; then + echo "$VERSION" + return 0 + fi + if [[ -n "${FLUX_VERSION:-}" ]]; then + echo "$FLUX_VERSION" + return 0 + fi + + if resolve_latest_release_tag; then + return 0 + fi + + echo "❌ 无法获取最新版本号。你可以手动指定版本,例如:VERSION=<版本号> ./panel_install.sh" >&2 + return 1 +} + +# 全局下载地址配置(默认获取最新版本;也可用 VERSION=... 覆盖) +RESOLVED_VERSION=$(resolve_version) || exit 1 + +DOCKER_COMPOSEV4_URL=$(maybe_proxy_url "https://github.com/${REPO}/releases/download/${RESOLVED_VERSION}/docker-compose-v4.yml") +DOCKER_COMPOSEV6_URL=$(maybe_proxy_url "https://github.com/${REPO}/releases/download/${RESOLVED_VERSION}/docker-compose-v6.yml")