name: Build and Deploy Server on: push: branches: - main paths: - "server/**" - ".gitea/workflows/server-deploy.yml" jobs: build: # 专属运行器:docker://golang:1.22-bookworm(注册于 doc79) runs-on: lunar-ci steps: - uses: https://gitea.neatcn.com/gouki/action-checkout@v4 with: fetch-depth: 20 - name: Verify Go runtime run: go version - name: Install dependencies working-directory: server run: go mod download - name: Run tests working-directory: server run: go test ./... - name: Build application working-directory: server run: | mkdir -p bin go build -o bin/server cmd/main.go - name: Build frontend (if exists) working-directory: server run: | if [ -d "web" ]; then echo "Building frontend..." cd web if [ -f "package.json" ]; then npm ci npm run build fi else echo "No frontend directory found, skipping frontend build" fi - name: Create deployment package working-directory: server run: | mkdir -p deploy cp -r bin/ deploy/ cp -r migrations/ deploy/ cp -r scripts/ deploy/ if [ -d "web/dist" ]; then cp -r web/dist/ deploy/public/ fi tar -czf deploy.tar.gz deploy/ - name: Persist deployment package on runner host run: | test -f server/deploy.tar.gz test -d /ci-artifacts cp server/deploy.tar.gz "/ci-artifacts/server-deploy-${{ gitea.sha }}.tar.gz" cp server/deploy.tar.gz /ci-artifacts/server-deploy-latest.tar.gz ls -la /ci-artifacts/server-deploy-latest.tar.gz echo "Deployment package saved on runner host: /opt/lunar/ci-artifacts/server-deploy-latest.tar.gz" - name: Send success notification if: success() env: TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} run: | bash .gitea/scripts/notify.sh success \ "后端服务部署成功" \ "部署包已保存到: /opt/lunar/ci-artifacts/server-deploy-latest.tar.gz" - name: Send failure notification if: failure() env: TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} run: | bash .gitea/scripts/notify.sh failure \ "后端服务部署失败" \ "请检查 Actions 日志了解失败原因" - name: Cleanup if: always() run: | rm -rf server/deploy/ rm -f server/deploy.tar.gz