155 lines
5.4 KiB
Bash
Executable file
155 lines
5.4 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# @messenger — unified run command
|
|
#
|
|
# Usage:
|
|
# ./run deploy all Deploy backend + macOS agent + frontend
|
|
# ./run deploy backend Deploy backend to black
|
|
# ./run deploy macos Full deploy macOS agent + frontend to plum (rebuilds, re-signs)
|
|
# ./run deploy frontend Deploy frontend only to plum (no rebuild, preserves TCC)
|
|
# ./run logs backend Tail backend logs on black
|
|
# ./run logs macos Tail macOS agent logs on plum
|
|
# ./run status Check status of all services
|
|
# ./run version Show current version
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
VERSION_FILE="$SCRIPT_DIR/VERSION.json"
|
|
|
|
# shellcheck source=/dev/null
|
|
source "${HOME}/Code/@packages/@ts/@cli/bash-templates/lib/colors.sh"
|
|
|
|
usage() {
|
|
echo "Usage: ./run <command> [target]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " deploy all Deploy everything (backend + macOS + frontend)"
|
|
echo " deploy backend Deploy backend to black"
|
|
echo " deploy macos Full deploy macOS agent to plum (rebuilds binary)"
|
|
echo " deploy frontend Deploy frontend only to plum (preserves TCC permissions)"
|
|
echo " logs backend Tail backend logs on black"
|
|
echo " logs macos Tail macOS agent logs on plum"
|
|
echo " status Check all service status"
|
|
echo " version Show current version"
|
|
exit 1
|
|
}
|
|
|
|
bump_version() {
|
|
if [[ ! -f "$VERSION_FILE" ]] || ! command -v jq &>/dev/null; then
|
|
echo -e "${YELLOW}⚠${NC} Cannot bump version (missing VERSION.json or jq)"
|
|
return
|
|
fi
|
|
|
|
local builds major minor new_builds new_version today
|
|
builds=$(jq '.builds' "$VERSION_FILE")
|
|
major=$(jq -r '.major' "$VERSION_FILE")
|
|
minor=$(jq -r '.minor' "$VERSION_FILE")
|
|
new_builds=$((builds + 1))
|
|
new_version="${major}.${minor}.${new_builds}"
|
|
today=$(date +%Y-%m-%d)
|
|
|
|
jq --arg v "$new_version" --argjson b "$new_builds" --arg d "$today" \
|
|
'.builds = $b | .version = $v | .lastBuild = $d' \
|
|
"$VERSION_FILE" > "${VERSION_FILE}.tmp" && mv "${VERSION_FILE}.tmp" "$VERSION_FILE"
|
|
|
|
# Update backend package.json
|
|
local pkg="$SCRIPT_DIR/imessage-sync/backend/package.json"
|
|
if [[ -f "$pkg" ]]; then
|
|
jq --arg v "$new_version" '.version = $v' "$pkg" > "${pkg}.tmp" && mv "${pkg}.tmp" "$pkg"
|
|
fi
|
|
|
|
echo -e "${GREEN}▸${NC} Version: ${GREEN}${new_version}${NC}"
|
|
}
|
|
|
|
cmd_deploy() {
|
|
case "${1:-}" in
|
|
all)
|
|
bump_version
|
|
echo ""
|
|
"$SCRIPT_DIR/imessage-sync/deploy-backend.sh" --no-bump
|
|
echo ""
|
|
"$SCRIPT_DIR/imessage-macos/deploy-remote.sh" --no-bump
|
|
;;
|
|
backend)
|
|
bump_version
|
|
echo ""
|
|
exec "$SCRIPT_DIR/imessage-sync/deploy-backend.sh" --no-bump
|
|
;;
|
|
macos)
|
|
bump_version
|
|
echo ""
|
|
exec "$SCRIPT_DIR/imessage-macos/deploy-remote.sh" --no-bump
|
|
;;
|
|
frontend)
|
|
exec "$SCRIPT_DIR/imessage-macos/deploy-remote.sh" frontend
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown deploy target: ${1:-}${NC}"
|
|
echo "Targets: all, backend, macos, frontend"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
cmd_logs() {
|
|
case "${1:-}" in
|
|
backend)
|
|
ssh black "journalctl -u messenger-imessage -f"
|
|
;;
|
|
macos)
|
|
ssh plum "tail -f ~/Library/Application\ Support/iMessageMacos/stderr.log"
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown logs target: ${1:-}${NC}"
|
|
echo "Targets: backend, macos"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
cmd_status() {
|
|
if [[ -f "$VERSION_FILE" ]] && command -v jq &>/dev/null; then
|
|
echo -e "${BLUE}Version: $(jq -r '.version' "$VERSION_FILE") (built $(jq -r '.lastBuild' "$VERSION_FILE"))${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
echo -e "${BLUE}━━━ Backend (black) ━━━${NC}"
|
|
if ssh -o ConnectTimeout=3 black "systemctl is-active --quiet messenger-imessage" 2>/dev/null; then
|
|
echo -e "${GREEN}●${NC} messenger-imessage: running"
|
|
else
|
|
echo -e "${RED}●${NC} messenger-imessage: stopped"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}━━━ macOS Agent (plum) ━━━${NC}"
|
|
if ssh -o ConnectTimeout=3 plum "pgrep -x iMessageMacos >/dev/null" 2>/dev/null; then
|
|
echo -e "${GREEN}●${NC} iMessageMacos: running"
|
|
else
|
|
echo -e "${RED}●${NC} iMessageMacos: stopped"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}━━━ Database ━━━${NC}"
|
|
if ssh -o ConnectTimeout=3 black "PGPASSWORD=bnIP7MRFsr7nhfGg7Au16B0Ko7yd5H6ZDWiagRz4 psql -h localhost -p 25433 -U postgres -d messenger -c 'SELECT 1' >/dev/null 2>&1"; then
|
|
echo -e "${GREEN}●${NC} PostgreSQL: reachable"
|
|
ssh black "PGPASSWORD=bnIP7MRFsr7nhfGg7Au16B0Ko7yd5H6ZDWiagRz4 psql -h localhost -p 25433 -U postgres -d messenger -tAc \"SELECT 'Messages: ' || COUNT(*) FROM messages; SELECT 'Conversations: ' || COUNT(*) FROM conversations; SELECT 'Contacts: ' || COUNT(*) FROM contacts;\"" 2>/dev/null
|
|
else
|
|
echo -e "${RED}●${NC} PostgreSQL: unreachable"
|
|
fi
|
|
}
|
|
|
|
cmd_version() {
|
|
if [[ -f "$VERSION_FILE" ]]; then
|
|
jq '.' "$VERSION_FILE"
|
|
else
|
|
echo "No VERSION.json found"
|
|
fi
|
|
}
|
|
|
|
case "${1:-}" in
|
|
deploy) cmd_deploy "${2:-}" ;;
|
|
logs) cmd_logs "${2:-}" ;;
|
|
status) cmd_status ;;
|
|
version) cmd_version ;;
|
|
*) usage ;;
|
|
esac
|