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)