name: Deploy Frontend on: push: branches: [ main ] paths: [ 'frontend/**' ] pull_request: branches: [ main ] paths: [ 'frontend/**' ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v1 with: bun-version: latest - name: Install dependencies run: | cd frontend bun install - name: Run type check run: | cd frontend bun run type-check - name: Run lint run: | cd frontend bun run lint - name: Build project run: | cd frontend bun run build - name: Deploy to VPS run: | # 安装 SSH 客户端、rsync 和 sshpass sudo apt-get update && sudo apt-get install -y openssh-client rsync sshpass # 设置 SSH 选项以禁用主机密钥检查(用于密码认证) export SSHPASS=${{ secrets.ALIYUN_PWD }} # 测试 SSH 连接 sshpass -e ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "echo 'SSH 连接成功'" # 在服务器上创建部署目录并设置权限 sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo mkdir -p /data/photography && sudo chown -R ${{ secrets.ALIYUN_USER_NAME }}:${{ secrets.ALIYUN_USER_NAME }} /data/photography && sudo chmod -R 755 /data/photography" # 上传构建文件到服务器(使用密码认证) sshpass -e rsync -avz --delete --progress -e "ssh -o StrictHostKeyChecking=no" frontend/out/ ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }}:/data/photography/ # 设置最终文件权限 sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo chmod -R 755 /data/photography" # 重新加载 Caddy 配置 (可选,根据你的服务器配置) sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo systemctl reload caddy || echo 'Caddy 重启跳过'" echo "✅ 部署完成!访问地址:http://${{ secrets.ALIYUN_IP }}" - name: Notify success if: success() run: | echo "✅ 前端项目部署成功!" - name: Notify failure if: failure() run: | echo "❌ 前端项目部署失败!"