name: Integration Tests on: push: branches: [main, develop] paths: - 'apps/**' - 'packages/**' - '.gitea/workflows/integration-tests.yml' pull_request: branches: [main, develop] workflow_dispatch: concurrency: group: integration-tests-${{ github.ref }} cancel-in-progress: true jobs: test-service-integration: runs-on: debian timeout-minutes: 15 steps: - name: Clone repository run: | WORKSPACE="/var/lib/aitbc-workspaces/integration-tests" rm -rf "$WORKSPACE" mkdir -p "$WORKSPACE" cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo - name: Sync systemd files if: github.event_name != 'pull_request' run: | cd /var/lib/aitbc-workspaces/integration-tests/repo if [[ -d "systemd" ]]; then echo "Linking systemd service files..." if [[ -x /opt/aitbc/scripts/utils/link-systemd.sh ]]; then if [[ $EUID -eq 0 ]]; then /opt/aitbc/scripts/utils/link-systemd.sh else sudo /opt/aitbc/scripts/utils/link-systemd.sh fi echo "✅ Systemd files linked" else echo "❌ /opt/aitbc/scripts/utils/link-systemd.sh not found" exit 1 fi fi - name: Start services if: github.event_name != 'pull_request' run: | echo "Starting AITBC services..." for svc in aitbc-coordinator-api aitbc-exchange-api aitbc-wallet aitbc-blockchain-rpc aitbc-blockchain-node; do if systemctl is-active --quiet "$svc" 2>/dev/null; then echo "✅ $svc already running" else systemctl start "$svc" 2>/dev/null && echo "✅ $svc started" || echo "⚠️ $svc not available" fi sleep 1 done - name: Wait for services ready run: | echo "Waiting for services..." for port in 8000 8001 8003 8006; do port_ready=0 for i in $(seq 1 15); do code=$(curl -so /dev/null -w '%{http_code}' "http://localhost:$port/health" 2>/dev/null) || code=0 if [ "$code" -gt 0 ] && [ "$code" -lt 600 ]; then echo "✅ Port $port ready (HTTP $code)" port_ready=1 break fi # Try alternate paths code=$(curl -so /dev/null -w '%{http_code}' "http://localhost:$port/api/health" 2>/dev/null) || code=0 if [ "$code" -gt 0 ] && [ "$code" -lt 600 ]; then echo "✅ Port $port ready (HTTP $code)" port_ready=1 break fi code=$(curl -so /dev/null -w '%{http_code}' "http://localhost:$port/" 2>/dev/null) || code=0 if [ "$code" -gt 0 ] && [ "$code" -lt 600 ]; then echo "✅ Port $port ready (HTTP $code)" port_ready=1 break fi [ "$i" -eq 15 ] && echo "❌ Port $port not ready" sleep 2 done if [[ $port_ready -ne 1 ]]; then exit 1 fi done - name: Setup test environment run: | cd /var/lib/aitbc-workspaces/integration-tests/repo python3 -m venv venv venv/bin/pip install -q requests pytest httpx pytest-asyncio pytest-timeout click locust # Ensure standard directories exist mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc - name: Run integration tests run: | cd /var/lib/aitbc-workspaces/integration-tests/repo source venv/bin/activate export PYTHONPATH="apps/coordinator-api/src:apps/wallet/src:apps/exchange/src:$PYTHONPATH" # Run existing test suites if [[ -d "tests" ]]; then pytest tests/ -x --timeout=30 -q fi # Service health check integration python3 scripts/ci/test_api_endpoints.py echo "✅ Integration tests completed" - name: Service status report if: always() run: | echo "=== Service Status ===" for svc in aitbc-coordinator-api aitbc-exchange-api aitbc-wallet aitbc-blockchain-rpc aitbc-blockchain-node; do status=$(systemctl is-active "$svc" 2>/dev/null) || status="inactive" echo " $svc: $status" done - name: Cleanup if: always() run: rm -rf /var/lib/aitbc-workspaces/integration-tests