9cf48d493d
CI Build & Deploy Pipeline / Production Browser E2E (push) Failing after 1442h24m30s
CI Build & Deploy Pipeline / Build Production Worker Image (push) Failing after 1442h24m31s
CI Build & Deploy Pipeline / Build Production Web Image (push) Failing after 1442h24m31s
CI Build & Deploy Pipeline / Build Production API Image (push) Failing after 1442h24m32s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1442h24m54s
CI Build & Deploy Pipeline / Build Staging API Image (push) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (push) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (push) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (push) Failing after 1m14s
CI Build & Deploy Pipeline / Staging API Integration Tests (push) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (push) Failing after 1442h56m31s
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
118 lines
4.0 KiB
YAML
118 lines
4.0 KiB
YAML
name: Preview Cleanup
|
|
on:
|
|
pull_request:
|
|
types:
|
|
- closed
|
|
branches:
|
|
- main
|
|
- develop
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
jobs:
|
|
cleanup-preview:
|
|
name: Cleanup Preview Environment
|
|
runs-on: runtime-builder
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Extract PR number
|
|
shell: sh
|
|
run: |
|
|
set -eu
|
|
PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||')
|
|
echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV
|
|
echo "PR number: $PR_NUMBER"
|
|
echo "Preview dir: /var/www/preview/pr-${PR_NUMBER}"
|
|
|
|
- name: Install SSH client
|
|
shell: sh
|
|
run: |
|
|
set -eu
|
|
if command -v apk >/dev/null 2>&1; then
|
|
apk add --no-cache openssh-client >/dev/null 2>&1
|
|
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
|
|
else
|
|
echo "ERROR: No package manager found"
|
|
exit 1
|
|
fi
|
|
echo "openssh-client installed"
|
|
|
|
- name: Remove preview directory from server
|
|
shell: sh
|
|
env:
|
|
PREVIEW_SSH_HOST: ${{ secrets.PREVIEW_SSH_HOST }}
|
|
PREVIEW_SSH_USER: ${{ secrets.PREVIEW_SSH_USER }}
|
|
PREVIEW_SSH_PORT: ${{ secrets.PREVIEW_SSH_PORT }}
|
|
PREVIEW_SSH_KEY: ${{ secrets.PREVIEW_SSH_KEY }}
|
|
run: |
|
|
set -eux
|
|
preview_host="${PREVIEW_SSH_HOST:-172.30.18.197}"
|
|
preview_user="${PREVIEW_SSH_USER:-deploy}"
|
|
preview_port="${PREVIEW_SSH_PORT:-22222}"
|
|
preview_dir="/var/www/preview/pr-${PR_NUMBER}"
|
|
|
|
mkdir -p ~/.ssh
|
|
|
|
# 查找可用的SSH密钥
|
|
key_path=""
|
|
if [ -f /root/.ssh/xiaoxia_runtime_builder ]; then
|
|
key_path="/root/.ssh/xiaoxia_runtime_builder"
|
|
echo "Using key: $key_path (builder key)"
|
|
elif [ -f "$HOME/.ssh/xiaoxia_runtime_builder" ]; then
|
|
key_path="$HOME/.ssh/xiaoxia_runtime_builder"
|
|
echo "Using key: $key_path (home key)"
|
|
elif [ -n "${PREVIEW_SSH_KEY:-}" ]; then
|
|
key_path="$HOME/.ssh/id_ed25519"
|
|
printf '%s\n' "$PREVIEW_SSH_KEY" > "$key_path"
|
|
chmod 600 "$key_path"
|
|
echo "Using key from PREVIEW_SSH_KEY secret"
|
|
else
|
|
echo "ERROR: No SSH key available"
|
|
ls -la ~/.ssh/ 2>/dev/null || true
|
|
ls -la /root/.ssh/ 2>/dev/null || true
|
|
exit 1
|
|
fi
|
|
|
|
ssh-keyscan -p "$preview_port" -H "$preview_host" >> ~/.ssh/known_hosts 2>/dev/null
|
|
echo "SSH keyscan done"
|
|
|
|
# 测试SSH连接
|
|
ssh -p "$preview_port" -i "$key_path" -o StrictHostKeyChecking=no "${preview_user}@${preview_host}" "echo SSH_CONNECTION_OK && hostname"
|
|
echo "SSH connection verified"
|
|
|
|
# 检查目录是否存在
|
|
DIR_EXISTS=$(ssh -p "$preview_port" -i "$key_path" -o StrictHostKeyChecking=no "${preview_user}@${preview_host}" \
|
|
"if [ -d '${preview_dir}' ]; then echo 'yes'; else echo 'no'; fi")
|
|
|
|
if [ "$DIR_EXISTS" = "yes" ]; then
|
|
echo "Removing preview directory: ${preview_dir}"
|
|
ssh -p "$preview_port" -i "$key_path" -o StrictHostKeyChecking=no "${preview_user}@${preview_host}" \
|
|
"rm -rf ${preview_dir} && echo 'Preview directory removed successfully'"
|
|
echo "Cleanup completed: ${preview_dir}"
|
|
else
|
|
echo "Preview directory does not exist: ${preview_dir}, nothing to clean up"
|
|
fi
|
|
|
|
- name: Comment cleanup notice on PR
|
|
if: success()
|
|
shell: sh
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: |
|
|
set -eu
|
|
PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||')
|
|
export PR_NUMBER
|
|
|
|
COMMENT_BODY=$(python3 scripts/ci/preview_comment.py cleanup)
|
|
|
|
API_URL="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments"
|
|
curl -s -X POST \
|
|
-H "Authorization: token ${GITHUB_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$COMMENT_BODY" \
|
|
"$API_URL" \
|
|
> /dev/null
|
|
echo "Cleanup comment posted"
|
|
|