name: Systemd Sync on: push: branches: [main, develop] paths: - 'systemd/**' - '.gitea/workflows/systemd-sync.yml' pull_request: branches: [main, develop] workflow_dispatch: concurrency: group: systemd-sync-${{ github.ref }} cancel-in-progress: true jobs: sync-systemd: runs-on: debian timeout-minutes: 5 steps: - name: Clone repository run: | WORKSPACE="/var/lib/aitbc-workspaces/systemd-sync" rm -rf "$WORKSPACE" mkdir -p "$WORKSPACE" cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo - name: Validate service files run: | cd /var/lib/aitbc-workspaces/systemd-sync/repo echo "=== Validating systemd service files ===" # Ensure standard directories exist mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc if [[ ! -d "systemd" ]]; then echo "⚠️ No systemd directory found" exit 0 fi errors=0 for f in systemd/*.service; do fname=$(basename "$f") echo -n " $fname: " # Check required fields if grep -q "ExecStart=" "$f" && grep -q "Description=" "$f"; then echo "✅ valid" else echo "❌ missing ExecStart or Description" errors=$((errors + 1)) fi done echo "=== Found $(ls systemd/*.service 2>/dev/null | wc -l) service files, $errors errors ===" - name: Sync service files run: | cd /var/lib/aitbc-workspaces/systemd-sync/repo if [[ ! -d "systemd" ]]; then exit 0 fi echo "=== Syncing systemd files ===" for f in systemd/*.service; do fname=$(basename "$f") cp "$f" "/etc/systemd/system/$fname" echo " ✅ $fname synced" done systemctl daemon-reload echo "✅ Systemd daemon reloaded" # Enable services echo "=== Enabling services ===" for svc in aitbc-coordinator-api aitbc-exchange-api aitbc-wallet aitbc-blockchain-node aitbc-blockchain-rpc aitbc-adaptive-learning; do if systemctl list-unit-files | grep -q "$svc.service"; then systemctl enable "$svc" 2>/dev/null || echo " ⚠️ $svc enable failed" echo " ✅ $svc enabled" else echo " ⚠️ $svc service file not found" fi done # Start core services that should be running echo "=== Starting core services ===" for svc in aitbc-blockchain-node aitbc-blockchain-rpc aitbc-exchange-api; do if systemctl list-unit-files | grep -q "$svc.service"; then systemctl start "$svc" 2>/dev/null || echo " ⚠️ $svc start failed" echo " ✅ $svc start attempted" else echo " ⚠️ $svc service file not found" fi done - name: Service status check run: | echo "=== AITBC Service Status ===" for svc in aitbc-coordinator-api aitbc-exchange-api aitbc-wallet aitbc-blockchain-node aitbc-blockchain-rpc aitbc-adaptive-learning; do status=$(systemctl is-active "$svc" 2>/dev/null) || status="not-found" enabled=$(systemctl is-enabled "$svc" 2>/dev/null) || enabled="not-found" printf " %-35s active=%-10s enabled=%s\n" "$svc" "$status" "$enabled" done - name: Cleanup if: always() run: rm -rf /var/lib/aitbc-workspaces/systemd-sync