From 09b870476965203dc7203ff7b4e81d982e6a8418 Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Sun, 24 May 2026 02:00:32 +0200 Subject: [PATCH] Migrate deploy from Azure to Infomaniak: add Forgejo workflow, fix Gateway WS URLs Co-authored-by: Cursor --- .forgejo/workflows/deploy.yml | 94 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 2 +- env-teamsbot-dev.env | 2 +- env-teamsbot-main.env | 2 +- 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 .forgejo/workflows/deploy.yml diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml new file mode 100644 index 0000000..008b1da --- /dev/null +++ b/.forgejo/workflows/deploy.yml @@ -0,0 +1,94 @@ +name: Deploy Teams-Browser-Bot + +on: + push: + branches: + - main + +env: + APP_DIR: /opt/teamsbot + SERVER_HOST: 179.237.73.4 + SERVER_USER: ubuntu + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set environment + run: | + cp env-teamsbot-main.env .env + rm -f env-teamsbot-*.env + + - name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -H ${{ env.SERVER_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy files to server + run: | + rsync -avz --delete \ + -e "ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no" \ + --exclude '.git' \ + --exclude '.github' \ + --exclude '.forgejo' \ + --exclude 'node_modules' \ + --exclude 'dist' \ + --exclude 'output' \ + --exclude '__pycache__' \ + --exclude 'env-teamsbot-*.env' \ + ./ ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }}:${{ env.APP_DIR }}/ + + - name: Build and start container + run: | + ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ + ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }} << 'ENDSSH' + + set -e + cd /opt/teamsbot + + echo "Building Docker image..." + docker compose build + + echo "Starting container..." + docker compose up -d + + echo "Waiting for container to start..." + sleep 10 + + echo "Container status:" + docker compose ps + + ENDSSH + + - name: Health Check + run: | + echo "Running health check..." + sleep 5 + + HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ + http://${{ env.SERVER_HOST }}:4100/health || echo "000") + + if [ "$HTTP_STATUS" = "200" ]; then + echo "Health check passed! (HTTP $HTTP_STATUS)" + else + echo "Health check failed! (HTTP $HTTP_STATUS)" + echo "Checking container logs..." + ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ + ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }} \ + "cd /opt/teamsbot && docker compose logs --tail=50" + exit 1 + fi + + - name: Deployment Summary + if: success() + run: | + echo "### Deployed successfully!" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Host: \`${{ env.SERVER_HOST }}:4100\`" >> $GITHUB_STEP_SUMMARY + echo "Health: \`http://${{ env.SERVER_HOST }}:4100/health\`" >> $GITHUB_STEP_SUMMARY diff --git a/docker-compose.yml b/docker-compose.yml index 6257a82..7a56026 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: environment: - NODE_ENV=production - PORT=4100 - - GATEWAY_WS_URL=${GATEWAY_WS_URL:-wss://gateway-int.poweron-center.net/api/teamsbot/ws} + - GATEWAY_WS_URL=${GATEWAY_WS_URL:-wss://api.poweron.swiss/api/teamsbot/ws} - BOT_NAME=${BOT_NAME:-PowerOn AI} - BOT_HEADLESS=false - DISPLAY=:99 diff --git a/env-teamsbot-dev.env b/env-teamsbot-dev.env index ef8defb..7c35737 100644 --- a/env-teamsbot-dev.env +++ b/env-teamsbot-dev.env @@ -3,7 +3,7 @@ PORT=4100 NODE_ENV=development # Gateway WebSocket Connection -GATEWAY_WS_URL=wss://gateway-int.poweron-center.net/api/teamsbot/ws +GATEWAY_WS_URL=wss://api-int.poweron.swiss/api/teamsbot/ws # Bot Configuration BOT_NAME=PowerOn AI diff --git a/env-teamsbot-main.env b/env-teamsbot-main.env index ef8defb..139a98f 100644 --- a/env-teamsbot-main.env +++ b/env-teamsbot-main.env @@ -3,7 +3,7 @@ PORT=4100 NODE_ENV=development # Gateway WebSocket Connection -GATEWAY_WS_URL=wss://gateway-int.poweron-center.net/api/teamsbot/ws +GATEWAY_WS_URL=wss://api.poweron.swiss/api/teamsbot/ws # Bot Configuration BOT_NAME=PowerOn AI