name: Deploy to Production # Server deployment only. Release creation and agent signing live in release.yml (SPEC-001) — # this workflow no longer creates releases, so there is exactly one release producer in the repo. # # Triggers on a pushed vX.Y.Z tag (which release.yml creates) or manual dispatch. The previous # GitHub-only `actions/create-release@v1` + GITHUB_TOKEN job has been removed; it does not work on # Gitea. Gitea releases are produced by release.yml via the Gitea REST API. on: push: tags: - 'v*.*.*' workflow_dispatch: inputs: environment: description: 'Deployment environment' required: true default: 'production' type: choice options: - production - staging jobs: deploy-server: name: Deploy Server runs-on: ubuntu-latest environment: ${{ github.event.inputs.environment || 'production' }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable target: x86_64-unknown-linux-gnu - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y pkg-config libssl-dev protobuf-compiler - name: Build server run: | cd server cargo build --release --target x86_64-unknown-linux-gnu - name: Create deployment package run: | set -euo pipefail mkdir -p deploy cp server/target/x86_64-unknown-linux-gnu/release/guruconnect-server deploy/ cp -r server/static deploy/ cp -r server/migrations deploy/ # Ship generated changelogs so the server's /api/changelog endpoint can serve them # (CHANGELOG_DIR points at this directory in production). if [ -d changelogs ]; then cp -r changelogs deploy/; fi cp server/.env.example deploy/.env.example tar -czf guruconnect-server-${{ github.ref_name }}.tar.gz -C deploy . echo "[OK] Packaged guruconnect-server-${{ github.ref_name }}.tar.gz" - name: Upload deployment package uses: actions/upload-artifact@v3 with: name: deployment-package path: guruconnect-server-${{ github.ref_name }}.tar.gz retention-days: 90 - name: Deploy to server (production) if: github.event.inputs.environment == 'production' || startsWith(github.ref, 'refs/tags/') run: | echo "[INFO] Deployment command would run here" echo "[INFO] SSH to 172.16.3.30 and deploy" # Actual deployment would use SSH keys and run: # scp guruconnect-server-*.tar.gz guru@172.16.3.30:/tmp/ # ssh guru@172.16.3.30 'bash /home/guru/guru-connect/scripts/deploy.sh'