diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
new file mode 100644
index 0000000..8f1b964
--- /dev/null
+++ b/.gitea/workflows/deploy.yml
@@ -0,0 +1,49 @@
+# deployed by gitea act_runner (push to main triggers this)
+name: Build and Deploy (admin.xpcool.com)
+
+on:
+ push:
+ branches: [main]
+ workflow_dispatch:
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Install git & docker CLI
+ run: |
+ sed -i 's|deb.debian.org|mirrors.cloud.tencent.com|g; s|security.debian.org|mirrors.cloud.tencent.com|g' /etc/apt/sources.list 2>/dev/null || true
+ sed -i 's|deb.debian.org|mirrors.cloud.tencent.com|g; s|security.debian.org|mirrors.cloud.tencent.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true
+ apt-get update
+ apt-get install -y git docker.io
+
+ - name: Checkout (local Gitea)
+ run: |
+ git clone --depth 1 --branch "${{ github.ref_name }}" https://oauth2:${{ github.token }}@git.xpcool.com/${{ github.repository }}.git .
+ git checkout ${{ github.sha }}
+
+ - name: Docker build & deploy
+ run: |
+ # .npmrc 里的 store-dir 是 Windows 路径,Linux 容器里会导致 pnpm 异常,临时移除
+ sed -i '/store-dir=/d' .npmrc
+ docker build -f scripts/deploy/Dockerfile -t admin.xpcool.com:latest .
+ docker rm -f admin.xpcool.com 2>/dev/null || true
+ docker run -d \
+ --name admin.xpcool.com \
+ --restart unless-stopped \
+ -p 127.0.0.1:8010:8080 \
+ admin.xpcool.com:latest
+
+ - name: Notify success (PushPlus)
+ if: success()
+ run: |
+ curl -s -X POST "https://www.pushplus.plus/send" \
+ -H "Content-Type: application/json" \
+ -d '{"token":"${{ secrets.PUSHPLUS_TOKEN }}","title":"✅ 部署成功 admin.xpcool.com","content":"仓库: ${{ github.repository }}
分支: ${{ github.ref_name }}
提交: ${{ github.sha }}
触发人: ${{ github.actor }}
状态: 编译打包部署成功
访问: https://admin.xpcool.com","template":"html"}'
+
+ - name: Notify failure (PushPlus)
+ if: failure()
+ run: |
+ curl -s -X POST "https://www.pushplus.plus/send" \
+ -H "Content-Type: application/json" \
+ -d '{"token":"${{ secrets.PUSHPLUS_TOKEN }}","title":"❌ 部署失败 admin.xpcool.com","content":"仓库: ${{ github.repository }}
分支: ${{ github.ref_name }}
提交: ${{ github.sha }}
触发人: ${{ github.actor }}
状态: 构建或部署失败
日志: https://git.xpcool.com/${{ github.repository }}/actions","template":"html"}'