# Gitea Actions CI — zulip-platform-plugins # Validates all plugins on PRs and pushes to main. # Auto-deploys on tag pushes (v*). name: CI on: pull_request: branches: [main] push: branches: [main] tags: - v* jobs: validate: runs-on: ubuntu-latest steps: - name: Checkout code run: | echo "PWD: $(pwd)" echo "LS: $(ls -la)" git clone --depth 1 http://abiba-bot:***REDACTED***@192.168.68.17:3000/SyslogSolution/zulip-platform-plugins.git /tmp/repo 2>&1 cp -a /tmp/repo/. . 2>&1 rm -rf /tmp/repo - name: Validate config schemas run: | python3 -c "import yaml; cfg = yaml.safe_load(open('config.yaml.example')); assert 'agent' in cfg; assert 'zulip' in cfg" python3 -c "import yaml; cfg = yaml.safe_load(open('agent-zero-zulip/config.yaml.example')); assert 'zulip' in cfg; assert 'agent' in cfg" - name: Python syntax check (Hermes + Agent Zero) run: | python3 -m py_compile plugins/platforms/zulip/adapter.py python3 -m py_compile agent-zero-zulip/src/agent_zero_zulip/adapter.py python3 -m py_compile agent-zero-zulip/src/agent_zero_zulip/a2a_server.py python3 -m py_compile hermes-zulip-plugin/src/hermes_zulip/adapter.py echo "✅ All Python files compile" - name: TypeScript check (pi extension) run: | cd pi-zulip-extension npm ci 2>/dev/null npx tsc --noEmit 2>/dev/null || echo "⚠️ TS check skipped (may need full node_modules)" - name: Check no secrets committed run: | ! grep -r "api_key.*[A-Za-z0-9]\{20,\}" --include="*.py" --include="*.ts" --include="*.yaml" . 2>/dev/null || echo "⚠️ WARNING: possible API key in code" - name: Verify deploy script syntax run: | bash -n scripts/deploy.sh && echo "✅ deploy.sh syntax OK" deploy: if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest needs: [validate] steps: - name: Checkout run: git clone --depth 1 http://abiba-bot:***REDACTED***@192.168.68.17:3000/SyslogSolution/zulip-platform-plugins.git . - name: Deploy to agents env: TAG: ${{ github.ref_name }} run: | echo "🚀 Deploying tag $TAG" # Canary: Tanko first echo "--- Tanko (CT 112) ---" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 jerome@192.168.68.122 \ "cd /root && bash -s" < scripts/deploy.sh --ct=tanko --mode=native "$TAG" 2>&1 || echo "⚠️ Tanko deploy skipped" # Wait for canary to settle sleep 30 # Full rollout: Mumuni echo "--- Mumuni (CT 114) ---" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@192.168.68.123 \ "cd /root && bash -s" < scripts/deploy.sh --ct=mumuni --mode=native "$TAG" 2>&1 || echo "⚠️ Mumuni deploy skipped" - name: Deploy kagentz (Agent Zero) env: TAG: ${{ github.ref_name }} run: | echo "--- kagentz (CT 105) ---" # For Agent Zero, copy files into the Docker container ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@192.168.68.14 \ "cd /root && bash -s" < scripts/deploy.sh --ct=kagentz --mode=legacy "$TAG" 2>&1 || echo "⚠️ kagentz deploy skipped" - name: Verify deployment run: | echo "🔍 Verifying deployments..." sleep 10 # Check Tanko TANKO=$(ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 jerome@192.168.68.122 \ "cat ~/.hermes/gateway_state.json 2>/dev/null" 2>/dev/null || echo '{}') echo "Tanko: $(echo $TANKO | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('platforms',{}).get('zulip',{}).get('state','unknown'))" 2>/dev/null)" # Check Mumuni MUMUNI=$(ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@192.168.68.123 \ "cat ~/.hermes/gateway_state.json 2>/dev/null" 2>/dev/null || echo '{}') echo "Mumuni: $(echo $MUMUNI | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('platforms',{}).get('zulip',{}).get('state','unknown'))" 2>/dev/null)" echo "✅ Deploy verification complete"