name: Deploy to Production 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: Build server run: | cd server cargo build --release --target x86_64-unknown-linux-gnu - name: Create deployment package run: | 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/ cp server/.env.example deploy/.env.example tar -czf guruconnect-server-${{ github.ref_name }}.tar.gz -C deploy . - 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 "Deployment command would run here" echo "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' create-release: name: Create GitHub Release runs-on: ubuntu-latest needs: deploy-server if: startsWith(github.ref, 'refs/tags/') steps: - name: Checkout code uses: actions/checkout@v4 - name: Download artifacts uses: actions/download-artifact@v3 - name: Create Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref_name }} release_name: Release ${{ github.ref_name }} draft: false prerelease: false - name: Upload Release Assets run: | echo "Upload server and agent binaries to release" # Would attach artifacts to the release here