# Staggered Deployment Pipeline # # Release flow: # v*.*.*-rc.* → Tanko only (canary) e.g. v1.1.0-rc.1 # az-v*.*.* → kagentz only (A2A track) e.g. az-v1.0.0 # v*.*.* → all Hermes agents e.g. v1.1.0 # # Pi agents (Abiba) use a separate update mechanism. name: Deploy on: push: tags: - v*.*.* # Stable Hermes release → all agents - v*.*.*-rc.* # Release candidate → Tanko only - az-v*.*.* # Agent Zero release → kagentz only jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Python syntax run: | python3 -m py_compile plugins/platforms/zulip/adapter.py 2>/dev/null python3 -m py_compile agent-zero-zulip/src/agent_zero_zulip/adapter.py 2>/dev/null || true - name: Deploy script run: bash -n scripts/deploy.sh 2>/dev/null || true # ── Track 1: Tanko (Hermes canary) ───────────────────── deploy-tanko: if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest needs: [validate] environment: canary steps: - uses: actions/checkout@v4 - name: Deploy to Tanko run: | TAG=$(echo $GITHUB_REF | sed 's|refs/tags/||') echo "🧪 Canary deploy $TAG → Tanko (CT 112)" echo "Run: ssh root@192.168.68.122 'cd /root && ./deploy.sh --ct=tanko --mode=native $TAG'" echo "Wait 60s for health check..." # ── Track 2: Hermes agents (after canary passes) ────── deploy-hermes: if: startsWith(github.ref, 'refs/tags/v') && !startsWith(github.ref, 'refs/tags/v*.*.*-rc') && !startsWith(github.ref, 'refs/tags/az-') runs-on: ubuntu-latest needs: [deploy-tanko] environment: production steps: - uses: actions/checkout@v4 - name: Deploy to all Hermes agents run: | TAG=$(echo $GITHUB_REF | sed 's|refs/tags/||') echo "🚀 Promoting $TAG to Hermes agents" echo " → Mumuni (CT 114): ssh root@192.168.68.123 ..." echo " → Tanko already on $TAG (canary passed)" # ── Track 3: Agent Zero (kagentz) ───────────────────── deploy-agent-zero: if: startsWith(github.ref, 'refs/tags/az-') runs-on: ubuntu-latest needs: [validate] environment: agent-zero steps: - uses: actions/checkout@v4 - name: Deploy to kagentz run: | TAG=$(echo $GITHUB_REF | sed 's|refs/tags/az-||') echo "🤖 Deploying Agent Zero $TAG → kagentz (CT 105)" echo "Steps:" echo " 1. Copy adapter.py → docker cp agent-zero:/a0/usr/kagentz-zulip/" echo " 2. Copy a2a_server.py → docker cp agent-zero:/a0/usr/a2a_agent.py" echo " 3. Restart adapter + A2A server"