From 01f58fbbe2ba5ad64d6cc2cd1ef77f614e057a4b Mon Sep 17 00:00:00 2001 From: CI Bot Date: Sat, 18 Jul 2026 13:56:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=E4=BF=AE=E5=A4=8Dpreview=20cleanup?= =?UTF-8?q?=E7=9A=84PR=E5=8F=B7=E6=8F=90=E5=8F=96=E5=92=8CSSH=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PR号提取改用GITHUB_EVENT_PATH优先,兼容closed事件 - SSH安装增加预检测,支持更多包管理器(apk/apt/yum/dnf) - 修复comment步骤同样的PR号提取问题 --- .gitea/workflows/preview-cleanup.yml | 40 +++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/preview-cleanup.yml b/.gitea/workflows/preview-cleanup.yml index 41f1900ef..44cbe4ed2 100644 --- a/.gitea/workflows/preview-cleanup.yml +++ b/.gitea/workflows/preview-cleanup.yml @@ -19,7 +19,19 @@ jobs: shell: sh run: | set -eu - PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||') + # 优先从event payload中读取(兼容所有PR事件类型) + if [ -n "${GITHUB_EVENT_PATH:-}" ] && [ -f "$GITHUB_EVENT_PATH" ]; then + PR_NUMBER=$(python3 -c "import json,sys; print(json.load(sys.stdin).get('number',''))" < "$GITHUB_EVENT_PATH") + fi + # fallback: 从GITHUB_REF中提取 + if [ -z "${PR_NUMBER:-}" ]; then + PR_NUMBER=$(echo "$GITHUB_REF" | sed -n 's|refs/pull/\([0-9]*\)/.*|\1|p') + fi + # 再fallback: 兼容纯数字ref + if [ -z "${PR_NUMBER:-}" ] || ! echo "$PR_NUMBER" | grep -qE '^[0-9]+$'; then + echo "WARNING: Could not extract PR number cleanly, using raw ref suffix" + PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||') + fi echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV echo "PR number: $PR_NUMBER" echo "Preview dir: /var/www/preview/pr-${PR_NUMBER}" @@ -28,15 +40,30 @@ jobs: shell: sh run: | set -eu + # 先检查是否已存在ssh + if command -v ssh >/dev/null 2>&1 && command -v ssh-keyscan >/dev/null 2>&1; then + echo "SSH client already available: $(ssh -V 2>&1)" + exit 0 + fi + # 尝试多种包管理器安装 if command -v apk >/dev/null 2>&1; then apk add --no-cache openssh-client >/dev/null 2>&1 + echo "openssh-client installed via apk" elif command -v apt-get >/dev/null 2>&1; then apt-get update -qq && apt-get install -y -qq openssh-client >/dev/null 2>&1 + echo "openssh-client installed via apt-get" + elif command -v yum >/dev/null 2>&1; then + yum install -y openssh-clients >/dev/null 2>&1 + echo "openssh-client installed via yum" + elif command -v dnf >/dev/null 2>&1; then + dnf install -y openssh-clients >/dev/null 2>&1 + echo "openssh-client installed via dnf" else - echo "ERROR: No package manager found" + echo "ERROR: No package manager found and ssh not pre-installed" + which ssh 2>/dev/null || echo " ssh: not found" + which ssh-keyscan 2>/dev/null || echo " ssh-keyscan: not found" exit 1 fi - echo "openssh-client installed" - name: Remove preview directory from server shell: sh @@ -101,7 +128,12 @@ jobs: GITHUB_TOKEN: ${{ github.token }} run: | set -eu - PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||') + # 从event payload读取PR号(最可靠) + if [ -n "${GITHUB_EVENT_PATH:-}" ] && [ -f "$GITHUB_EVENT_PATH" ]; then + PR_NUMBER=$(python3 -c "import json,sys; print(json.load(sys.stdin).get('number',''))" < "$GITHUB_EVENT_PATH") + else + PR_NUMBER=$(echo "$GITHUB_REF" | sed -n 's|refs/pull/\([0-9]*\)/.*|\1|p') + fi export PR_NUMBER COMMENT_BODY=$(python3 scripts/ci/preview_comment.py cleanup) -- 2.54.0