Files
BYW-VoiceHub/patches/0005-fix-Gitea-Runner-404-v3-gitea-runner-assets.patch
T

187 lines
8.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From a027816831e667cf5df65d3b62f92d8188d7173b Mon Sep 17 00:00:00 2001
From: HenryDu8133 <813367384@qq.com>
Date: Sun, 6 Sep 2026 09:13:06 +0800
Subject: [PATCH 05/58] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Gitea=20Runne?=
=?UTF-8?q?r=20=E4=B8=8B=E8=BD=BD=20404=EF=BC=88v3+=20=E6=94=B9=E5=90=8D?=
=?UTF-8?q?=20gitea-runner=EF=BC=8C=E6=94=B9=E4=B8=BA=20assets=20=E5=8C=B9?=
=?UTF-8?q?=E9=85=8D=20+=20=E5=A4=9A=E6=BA=90=E5=9B=9E=E9=80=80=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scripts/setup-runner.sh | 136 ++++++++++++++++++++++++++++++++++------
1 file changed, 118 insertions(+), 18 deletions(-)
diff --git a/scripts/setup-runner.sh b/scripts/setup-runner.sh
index 2929fee..5ee9b05 100644
--- a/scripts/setup-runner.sh
+++ b/scripts/setup-runner.sh
@@ -40,6 +40,7 @@
# --name "my-runner-01" 自定义 Runner 名字(默认是 runner-主机名)
# --user gitrunner 运行用户(默认 gitrunner)
# --dir /opt/act_runner 安装目录(默认 /opt/act_runner)
+# --version 3.3.2 【可选】固定安装某版本,不写默认用 Gitea 官方 latest
# ============================================================================
set -euo pipefail
@@ -57,15 +58,16 @@ SCOPE="repo" # repo | org | global(默认 repo,绝大多数人的场景)
RUNNER_NAME="runner-$(hostname | tr '[:upper:]' '[:lower:]')"
RUNNER_USER="gitrunner"
INSTALL_DIR="/opt/act_runner"
-
+PINNED_VERSION="" # 空 = latest,否则比如 "3.3.2" 固定版本
while [[ $# -gt 0 ]]; do
case "$1" in
- --gitea) GITEA_URL="${2}"; shift 2 ;;
- --token) REG_TOKEN="${2}"; shift 2 ;;
- --scope) SCOPE="${2}"; shift 2 ;;
- --name) RUNNER_NAME="${2}"; shift 2 ;;
- --user) RUNNER_USER="${2}"; shift 2 ;;
- --dir) INSTALL_DIR="${2}"; shift 2 ;;
+ --gitea) GITEA_URL="${2}"; shift 2 ;;
+ --token) REG_TOKEN="${2}"; shift 2 ;;
+ --scope) SCOPE="${2}"; shift 2 ;;
+ --name) RUNNER_NAME="${2}"; shift 2 ;;
+ --user) RUNNER_USER="${2}"; shift 2 ;;
+ --dir) INSTALL_DIR="${2}"; shift 2 ;;
+ --version) PINNED_VERSION="${2#v}"; shift 2 ;;
-h|--help)
sed -n '2,60p' "$0" | sed 's/^# \{0,1\}//'
exit 0
@@ -159,22 +161,120 @@ info "✅ 把 ${RUNNER_USER} 加入 docker 组(允许操作 Docker daemon)"
mkdir -p "${INSTALL_DIR}"
chown -R "${RUNNER_USER}:${RUNNER_USER}" "${INSTALL_DIR}"
-# ---------- 3. 下载最新 act_runner ----------
-info "⬇️ 正在拉取 act_runner 最新 release 元数据..."
-LATEST_JSON="$(curl -fsSL https://gitea.com/api/v1/repos/gitea/act_runner/releases/latest || true)"
+# ---------- 3. 下载最新 Gitea Runner(act_runner 0.x → 3.x 改名 gitea-runner)
+# 注意:官方从 v3 起,仓库从 gitea/act_runner 改到了 gitea/runner,且文件名前缀从 act_runner-* → gitea-runner-*。
+# 为避免后续版本再改命名导致 404,这里**直接用 API 返回的 assets[].browser_download_url**,不再硬编码拼文件名。
+# ----------
+# 3.1 决定 release URL(固定版本 or latest)
+if [[ -n "${PINNED_VERSION}" ]]; then
+ REL_URL="https://gitea.com/api/v1/repos/gitea/runner/releases/tags/v${PINNED_VERSION}"
+ info "⬇️ 你指定了固定版本:v${PINNED_VERSION}"
+else
+ REL_URL="https://gitea.com/api/v1/repos/gitea/runner/releases/latest"
+ info "⬇️ 正在获取 Gitea Runner 最新 release 元数据..."
+fi
+LATEST_JSON="$(curl -fsSL "${REL_URL}" 2>/dev/null || true)"
+
+# 3.2 如果 gitea.com 不通(纯内网),直接回退到一个我们已知可用的版本
if [[ -z "${LATEST_JSON}" ]]; then
- warn "gitea.com 不通,改用硬编码版本 0.2.10(你之后可手动升级)"
- VERSION="0.2.10"
+ if [[ -z "${PINNED_VERSION}" ]]; then
+ warn "gitea.com 访问不到(可能是内网环境),自动回退到已知稳定版本:v3.3.2"
+ PINNED_VERSION="3.3.2"
+ fi
+ TAG="v${PINNED_VERSION}"
+ FALLBACK_MODE=1
else
- VERSION="$(echo "${LATEST_JSON}" | grep -oE '"tag_name":\s*"[^"]+"' | head -1 | cut -d'"' -f4 | sed 's/^v//')"
- [[ -n "${VERSION}" ]] || VERSION="0.2.10"
+ TAG="$(echo "${LATEST_JSON}" | grep -oE '"tag_name":\s*"[^"]+"' | head -1 | cut -d'"' -f4)"
+ FALLBACK_MODE=0
+fi
+[[ -n "${TAG}" ]] || TAG="v3.3.2"
+VERSION="${TAG#v}"
+
+# 3.3 优先从 assets 匹配正确 platform 的 browser_download_url
+BIN_URL=""
+ASSET_NAME=""
+if [[ "${FALLBACK_MODE}" -eq 0 && -n "${LATEST_JSON}" ]]; then
+ # 用 awk 过滤:
+ # - 匹配 PLATFORM(例如 linux-amd64)
+ # - 排除 .xz / .sha256 / .exe 等校验和/压缩包
+ # - 两种前缀都兼容:gitea-runner-X.X.X- (新版) 或 act_runner-X.X.X- (旧版)
+ while IFS='|' read -r name url; do
+ [[ -z "${name}" ]] && continue
+ case "${name}" in
+ *"${PLATFORM}"* | *"${PLATFORM//-/_}"*) ;;
+ *) continue ;;
+ esac
+ case "${name}" in
+ *.xz|*.sha256|*.exe|*.tar.gz|*.zip|*checksums*) continue ;;
+ esac
+ ASSET_NAME="${name}"
+ BIN_URL="${url}"
+ break
+ done < <(echo "${LATEST_JSON}" | awk '
+ /"assets": *\[/ {inA=1; next}
+ inA && /"browser_download_url"/ { gsub(/[",]/,"",$2); url=$2 }
+ inA && /"name"/ {
+ gsub(/[",]/,"",$2)
+ if (url!="") { print $2 "|" url; url="" }
+ }
+ inA && /^\]/ {inA=0}
+ ')
+fi
+
+# 3.4 如果 assets 匹配失败(老版本 JSON 格式特殊),手动拼 4 个候选 URL 顺序尝试
+if [[ -z "${BIN_URL}" ]]; then
+ info "assets 自动匹配为空,改用手动候选列表(兼容新旧命名)..."
+ CANDIDATES=(
+ # 新版(v3+)gitea-runner
+ "https://gitea.com/gitea/runner/releases/download/v${VERSION}/gitea-runner-${VERSION}-${PLATFORM}"
+ # github 镜像(有时 gitea.com 慢或挂)
+ "https://github.com/go-gitea/runner/releases/download/v${VERSION}/gitea-runner-${VERSION}-${PLATFORM}"
+ # 旧版 act_runner(v0.2.x 遗留命名)
+ "https://dl.gitea.com/act_runner/${VERSION}/act_runner-${VERSION}-${PLATFORM}"
+ # 旧版 gitea.com
+ "https://gitea.com/gitea/act_runner/releases/download/v${VERSION}/act_runner-${VERSION}-${PLATFORM}"
+ )
+ for C in "${CANDIDATES[@]}"; do
+ info " → 尝试:${C}"
+ if curl -fsSI "${C}" >/dev/null 2>&1; then
+ BIN_URL="${C}"
+ ASSET_NAME="$(basename "${C}")"
+ break
+ fi
+ done
fi
-BIN_URL="https://dl.gitea.com/act_runner/${VERSION}/act_runner-${VERSION}-${PLATFORM}"
-info "⬇️ 下载 act_runner v${VERSION}:${BIN_URL}"
+
+# 3.5 还没拿到 URL → 打印手动下载指引(一定让用户能救回来)
+if [[ -z "${BIN_URL}" ]]; then
+ {
+ echo ""
+ echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
+ echo -e "${RED} ❌ 自动下载 Gitea Runner 失败${NC}"
+ echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
+ echo " 你的架构:${PLATFORM} , 目标版本:${TAG}"
+ echo ""
+ echo " 请在能出网的机器上,手动打开下面 2 个 URL 之一,下载对应的二进制:"
+ echo " • https://gitea.com/gitea/runner/releases/tag/${TAG}"
+ echo " • https://github.com/go-gitea/runner/releases/tag/${TAG}"
+ echo " 找文件名类似:gitea-runner-${VERSION}-${PLATFORM}(不要下 .xz / .sha256)"
+ echo ""
+ echo " 下载完成后 scp 到本服务器并执行:"
+ echo " sudo cp ./gitea-runner-* /usr/local/bin/act_runner"
+ echo " sudo chmod +x /usr/local/bin/act_runner"
+ echo " # 然后重新跑本脚本(已有的用户/组/config 不会重复生成)"
+ echo ""
+ } >&2
+ exit 1
+fi
+
+# 3.6 真正下载
+info "⬇️ 下载 Gitea Runner ${TAG}:${ASSET_NAME}"
+info " URL:${BIN_URL}"
curl -fsSL "${BIN_URL}" -o /usr/local/bin/act_runner \
- || err "下载失败。请手动打开 ${BIN_URL} 看是否 404,然后换个版本"
+ || err "下载失败!可能是 DNS/网络/证书问题。可以手动把上面 URL 的文件下载下来 scp 到服务器放到 /usr/local/bin/act_runner,再重新跑本脚本。"
chmod +x /usr/local/bin/act_runner
-info "✅ act_runner 已安装到 /usr/local/bin,版本:$(act_runner --version 2>&1 || true)"
+INSTALLED_VER="$(act_runner --version 2>&1 || echo "${TAG}")"
+ok "✅ 已安装到 /usr/local/bin/act_runner,版本:${INSTALLED_VER}"
# ---------- 4. 注册 Runner ----------
cd "${INSTALL_DIR}"
--
2.45.1.windows.1