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'
