# ═══════════════════════════════════════════════════════════════ # FLUX SRL — GitHub Actions Deploy Pipeline # ═══════════════════════════════════════════════════════════════ # Triggers on push to main branch. # Requires GitHub Secrets: # VPS_HOST — Your VPS IP or hostname # SSH_PRIVATE_KEY — ED25519 private key for flux-deploy user # ═══════════════════════════════════════════════════════════════ name: Deploy to VPS on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.VPS_HOST }} username: flux-deploy key: ${{ secrets.SSH_PRIVATE_KEY }} script_stop: true script: | cd /opt/flux-srl echo "⏳ Pulling latest code..." git pull origin main echo "⏳ Building app container..." docker compose build --no-cache app echo "⏳ Restarting app..." docker compose up -d app echo "⏳ Running migrations..." docker compose exec -T app npx prisma migrate deploy echo "⏳ Cleaning up old images..." docker image prune -f echo "⏳ Health check..." sleep 5 curl -sf http://localhost/api/health || echo "⚠ Health check failed" echo "✅ Deploy complete."