Files
zulip-platform-plugins/scripts/deploy.sh
T
kagentz-bot 941b69e782
CI / validate (pull_request) Failing after 2s
fix(tanko): adapter fixes, event logging, platform-based deploy.sh
- adapter.py: add import asyncio, use Client(site=) for Python 3.13 compat
- adapter.py: use asyncio.new_event_loop() in background thread
- adapter.py: add print() in _process_event for journald visibility
- deploy.sh: refactor to PLATFORM-based maps instead of per-agent duplications
- deploy.sh: remove backslash artifacts, deduplicate service/plugin path logic
2026-06-20 11:00:21 -04:00

157 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# deploy.sh — GitOps deployment for zulip-platform-plugins
# Usage: ./deploy.sh <tag|branch> [--ct=<agent>] [--dry-run]
# ./deploy.sh v1.0.0 # Deploy to all 6 CTs
# ./deploy.sh main # Deploy latest (staging only!)
# ./deploy.sh --ct=tanko v1.0.0 # Deploy to single CT
# ./deploy.sh --dry-run v1.0.0 # Preview deployment without making changes
set -euo pipefail
DEPLOY_LOG="deploy.log"
TAG=""
SINGLE_CT=""
DRY_RUN=false
# Parse args
for arg in "$@"; do
case "$arg" in
--ct=*) SINGLE_CT="${arg#--ct=}" ;;
--dry-run) DRY_RUN=true ;;
*) TAG="$arg" ;;
esac
done
if [[ -z "$TAG" ]]; then
echo "Usage: $0 <tag|branch> [--ct=<agent>] [--dry-run]"
exit 1
fi
# Agent CT registry (must match CONTEXT.md)
declare -A AGENTS=(
["tanko"]="amdpve CT 112"
["mumuni"]="minipve CT 114"
["koonimo"]="amdpve CT 113"
["koby"]="amdpve CT 111"
["kagentz"]="amdpve CT 105"
["abiba"]="amdpve CT 100"
)
# Platform classification for each agent
declare -A PLATFORM=(
["tanko"]="hermes"
["mumuni"]="hermes"
["koonimo"]="hermes"
["koby"]="hermes"
["kagentz"]="agent-zero"
["abiba"]="pi"
)
# Plugin paths by platform
declare -A PLUGIN_PATHS_BY_PLATFORM=(
["hermes"]="/opt/hermes-zulip-plugin"
["agent-zero"]="/opt/agent-zero-plugin"
["pi"]="/root/.pi/agent/extensions/zulip.ts"
)
# Service names by platform
declare -A SERVICE_NAMES_BY_PLATFORM=(
["hermes"]="zulip-plugin"
["agent-zero"]="zulip-plugin"
["pi"]="pi" # pi reload, not systemctl
)
GITEA_REPO="https://git.sysloggh.net/SyslogSolution/zulip-platform-plugins.git"
HEALTH_PORT=9200
log() {
local prefix=""
[[ "$DRY_RUN" == "true" ]] && prefix="[DRY-RUN] "
echo "${prefix}[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$DEPLOY_LOG"
}
deploy_agent() {
local agent="$1"
local ct_info="${AGENTS[$agent]}"
local platform="${PLATFORM[$agent]}"
local plugin_path="${PLUGIN_PATHS_BY_PLATFORM[$platform]}"
local service="${SERVICE_NAMES_BY_PLATFORM[$platform]}"
log "=== Deploying $agent ($ct_info) @ $TAG (platform: $platform) ==="
log "Path: $plugin_path | Service: $service"
# 1. Git pull & checkout tag
if [[ "$DRY_RUN" != "true" ]]; then
cd "$plugin_path" || { log "ERROR: $agent: path $plugin_path not found"; return 1; }
git fetch --tags origin
git checkout "$TAG"
else
log "Skipping Git checkout (Dry Run)"
fi
log "$agent: checked out $TAG"
# 2. Install dependencies (platform-specific)
if [[ "$DRY_RUN" != "true" ]]; then
case "$platform" in
hermes|agent-zero)
pip install -r requirements.txt --quiet
;;
pi)
log "$agent: pi extension — skipping pip install"
;;
esac
else
log "Skipping dependency installation (Dry Run)"
fi
# 3. Restart service
if [[ "$DRY_RUN" != "true" ]]; then
case "$platform" in
pi)
log "$agent: triggering /reload"
;;
*)
systemctl restart "$service"
log "$agent: restarted $service"
;;
esac
else
log "Skipping service restart (Dry Run)"
fi
# 4. Health check
log "Waiting for service to stabilize..."
sleep 5
if [[ "$DRY_RUN" != "true" ]]; then
if curl -sf "http://localhost:$HEALTH_PORT/health" > /dev/null 2>&1; then
log "OK: $agent health check passed"
else
log "ERROR: $agent health check failed — check logs"
return 1
fi
else
log "Skipping health check (Dry Run)"
fi
}
# --- Main ---
log "Deploy started — target: $TAG (Dry Run: $DRY_RUN)"
if [[ -n "$SINGLE_CT" ]]; then
deploy_agent "$SINGLE_CT"
else
FAILED=""
for agent in tanko mumuni koonimo koby kagentz abiba; do
if ! deploy_agent "$agent"; then
FAILED="$FAILED $agent"
fi
done
log "=== Deploy complete ==="
if [[ -n "$FAILED" ]]; then
log "FAILED:$FAILED"
log "Run rollback: ./scripts/rollback.sh <previous-tag>"
exit 1
fi
log "All 6 agents deployed successfully."
fi