mnemo_cards/.forgejo/workflows/deploy_bot.yaml

141 lines
5.5 KiB
YAML
Raw Normal View History

2025-11-27 20:04:32 +00:00
name: Deploy Telegram Bot
on:
workflow_dispatch:
push:
branches:
- master
paths:
- 'mnemo_cards_telegram_bot/**'
- 'mnemo_cards_common/**'
- 'mnemo_cards_common_backend/**'
jobs:
deploy-bot:
name: Deploy Telegram Bot
runs-on: ubuntu-latest
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Checkout code
uses: actions/checkout@v3
- name: Install Dependencies
run: |
apt-get update && apt-get install -y rsync openssh-client
- name: Setup SSH
run: |
echo "🔍 Debugging SSH connection..."
echo "Target host: ${{ secrets.SSH_HOST }}"
ping -c 3 ${{ secrets.SSH_HOST }} || echo "⚠️ Ping failed"
nslookup ${{ secrets.SSH_HOST }} || echo "⚠️ DNS lookup failed"
nc -zv ${{ secrets.SSH_HOST }} 22 || echo "⚠️ Port 22 not reachable"
mkdir -p ~/.ssh
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || echo "⚠️ SSH keyscan failed"
- name: Sync Source Code
run: |
# Sync common packages
rsync -avz --delete --exclude '.*' --exclude 'build' --exclude 'doc' \
mnemo_cards_common \
mnemo_cards_common_backend \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
# Sync telegram bot project
rsync -avz --delete --exclude '.*' --exclude 'build' --exclude 'bot.exe' --exclude 'bot_build.exe' \
mnemo_cards_telegram_bot \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
- name: Get Dependencies
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
cd ~/mnemo_cards_common
echo "📦 Getting common dependencies..."
dart pub get
cd ~/mnemo_cards_common_backend
echo "📦 Getting common backend dependencies..."
dart pub get
cd ~/mnemo_cards_telegram_bot
echo "📦 Getting telegram bot dependencies..."
dart pub get
ENDSSH
- name: Compile Bot
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
cd ~/mnemo_cards_telegram_bot
echo "🔨 Compiling telegram bot..."
dart compile exe --verbose bin/main.dart -o bot_build.exe
ENDSSH
- name: Stop Service
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
echo "🛑 Stopping telegram bot service..."
sudo systemctl stop mnemo_cards_telegram_bot || true
echo "✅ Telegram bot service stopped"
ENDSSH
- name: Update Service Configuration
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
cd ~/mnemo_cards_telegram_bot
echo "⚙️ Updating service configuration..."
sudo chmod 777 mnemo_cards_telegram_bot.service
sudo cp mnemo_cards_telegram_bot.service /etc/systemd/system/
ENDSSH
- name: Update Executable
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
cd ~/mnemo_cards_telegram_bot
echo "🔄 Replacing executable..."
sudo cp bot_build.exe bot.exe
rm bot_build.exe
ENDSSH
- name: Restart Service
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
echo "🚀 Restarting telegram bot service..."
sudo systemctl daemon-reload
sudo systemctl start mnemo_cards_telegram_bot
sleep 2
sudo systemctl status mnemo_cards_telegram_bot --no-pager --lines=5 || echo "Could not get status"
ENDSSH
- name: Final Verification
run: |
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
set -e
echo "🔍 Final verification..."
# Check telegram bot service status
if sudo systemctl is-active --quiet mnemo_cards_telegram_bot; then
echo "✅ Telegram bot service is running"
echo "📋 Recent logs:"
journalctl -u mnemo_cards_telegram_bot --since "2min ago" --no-pager -n 10 || true
else
echo "❌ Telegram bot service is not running!"
sudo systemctl status mnemo_cards_telegram_bot --no-pager || true
exit 1
fi
echo "✅ Telegram bot deployment completed successfully!"
ENDSSH