name: Deploy to Infomaniak on: push: branches: - main workflow_dispatch: # Manueller Trigger mΓΆglich env: APP_DIR: /opt/ollama-webapp SERVICE_NAME: ollama-webapp jobs: deploy: runs-on: ubuntu-latest steps: # 1. Code auschecken - name: Checkout code uses: actions/checkout@v4 # 2. SSH Setup - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts # 3. Dateien zum Server kopieren - name: Deploy files to server run: | rsync -avz --delete \ -e "ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no" \ --exclude '.git' \ --exclude '.github' \ --exclude '__pycache__' \ --exclude '*.pyc' \ --exclude 'venv' \ --exclude '.env' \ --exclude 'logs' \ ./ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:${{ env.APP_DIR }}/app/ # 4. Dependencies installieren und Service neu starten - name: Install dependencies and restart service run: | ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'ENDSSH' echo "πŸ“¦ Installing dependencies..." cd /opt/ollama-webapp ./venv/bin/pip install -r app/requirements.txt --quiet --upgrade echo "πŸ”„ Restarting service..." sudo systemctl restart ollama-webapp echo "⏳ Waiting for service to start..." sleep 5 echo "πŸ“Š Service status:" sudo systemctl status ollama-webapp --no-pager -l echo "βœ… Deployment complete!" ENDSSH # 5. Health Check - name: Health Check run: | echo "πŸ₯ Running health check..." sleep 3 HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ http://${{ secrets.SERVER_HOST }}:5000/api/health || echo "000") if [ "$HTTP_STATUS" = "200" ]; then echo "βœ… Health check passed! (HTTP $HTTP_STATUS)" else echo "❌ Health check failed! (HTTP $HTTP_STATUS)" exit 1 fi # 6. Deployment Summary - name: Deployment Summary if: success() run: | echo "πŸŽ‰ Deployment successful!" echo "" echo "πŸ“ App URL: http://${{ secrets.SERVER_HOST }}:5000" echo "πŸ“ Health: http://${{ secrets.SERVER_HOST }}:5000/api/health" echo "πŸ“ Ollama: http://${{ secrets.SERVER_HOST }}:5000/api/ollama/status"