Some checks are pending
CI / lint-and-test (pull_request) Waiting to run
Per Ganymede review of PR #6: scripts/ was in neither deploy script, so 25 root-level Python scripts (metadao-scrape.py, embed-claims.py, tier0-gate.py, etc.) lived in repo but never reached VPS. Changes (identical pattern in both files): - Add scripts/*.py to pre-deploy syntax check glob - Add scripts/ rsync to $PIPELINE_DIR/scripts/ Restart trigger NOT updated — scripts/ are cron-invoked (not daemon-imported), same pattern as fetch_coins.py. All 25 scripts/*.py pre-flight syntax check passed locally.
111 lines
3.1 KiB
Bash
Executable file
111 lines
3.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# deploy.sh — Deploy pipeline and diagnostics to VPS from repo
|
|
# Usage: ./deploy.sh [--dry-run] [--restart]
|
|
#
|
|
# Requires: committed, clean working tree. Enforces repo-first workflow.
|
|
set -euo pipefail
|
|
|
|
VPS_HOST="teleo@77.42.65.182"
|
|
VPS_PIPELINE="/opt/teleo-eval/pipeline"
|
|
VPS_DIAGNOSTICS="/opt/teleo-eval/diagnostics"
|
|
VPS_AGENT_STATE="/opt/teleo-eval/ops/agent-state"
|
|
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
DRY_RUN=false
|
|
RESTART=false
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--dry-run) DRY_RUN=true ;;
|
|
--restart) RESTART=true ;;
|
|
--help|-h)
|
|
echo "Usage: $0 [--dry-run] [--restart]"
|
|
echo " --dry-run Show what would be deployed without doing it"
|
|
echo " --restart Restart services after deploy"
|
|
exit 0
|
|
;;
|
|
*) echo "Unknown arg: $arg"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
# Gate: working tree must be clean
|
|
if [ -n "$(git -C "$REPO_ROOT" status --porcelain)" ]; then
|
|
echo "ERROR: Uncommitted changes. Commit first, deploy second."
|
|
git -C "$REPO_ROOT" status --short
|
|
exit 1
|
|
fi
|
|
|
|
echo "Deploying from commit: $(git -C "$REPO_ROOT" log --oneline -1)"
|
|
echo ""
|
|
|
|
# Syntax check all Python files before deploying
|
|
echo "=== Pre-deploy syntax check ==="
|
|
ERRORS=0
|
|
for f in "$REPO_ROOT/lib/"*.py "$REPO_ROOT/"*.py "$REPO_ROOT/diagnostics/"*.py "$REPO_ROOT/telegram/"*.py "$REPO_ROOT/scripts/"*.py; do
|
|
[ -f "$f" ] || continue
|
|
if ! python3 -c "import ast, sys; ast.parse(open(sys.argv[1]).read())" "$f" 2>/dev/null; then
|
|
echo "SYNTAX ERROR: $f"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
done
|
|
if [ "$ERRORS" -gt 0 ]; then
|
|
echo "ERROR: $ERRORS files have syntax errors. Fix before deploying."
|
|
exit 1
|
|
fi
|
|
echo "All files pass syntax check."
|
|
echo ""
|
|
|
|
RSYNC_OPTS=(-avz --exclude __pycache__ --exclude '*.pyc' --exclude '*.bak*')
|
|
if $DRY_RUN; then
|
|
RSYNC_OPTS+=(--dry-run)
|
|
echo "=== DRY RUN ==="
|
|
fi
|
|
|
|
echo "=== Pipeline lib/ ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/lib/" "$VPS_HOST:$VPS_PIPELINE/lib/"
|
|
echo ""
|
|
|
|
echo "=== Pipeline top-level ==="
|
|
for f in teleo-pipeline.py reweave.py fetch_coins.py; do
|
|
[ -f "$REPO_ROOT/$f" ] || continue
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/$f" "$VPS_HOST:$VPS_PIPELINE/$f"
|
|
done
|
|
echo ""
|
|
|
|
echo "=== Telegram bot ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/telegram/" "$VPS_HOST:$VPS_PIPELINE/telegram/"
|
|
echo ""
|
|
|
|
echo "=== Tests ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/tests/" "$VPS_HOST:$VPS_PIPELINE/tests/"
|
|
echo ""
|
|
|
|
echo "=== Scripts ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/scripts/" "$VPS_HOST:$VPS_PIPELINE/scripts/"
|
|
echo ""
|
|
|
|
echo "=== Diagnostics ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/diagnostics/" "$VPS_HOST:$VPS_DIAGNOSTICS/"
|
|
echo ""
|
|
|
|
echo "=== Agent state ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/agent-state/" "$VPS_HOST:$VPS_AGENT_STATE/"
|
|
echo ""
|
|
|
|
echo "=== Research session ==="
|
|
rsync "${RSYNC_OPTS[@]}" "$REPO_ROOT/research/research-session.sh" "$VPS_HOST:/opt/teleo-eval/research-session.sh"
|
|
echo ""
|
|
|
|
if $DRY_RUN; then
|
|
echo "Dry run complete. No changes made."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Deploy complete."
|
|
|
|
if $RESTART; then
|
|
echo ""
|
|
echo "=== Restarting services ==="
|
|
ssh "$VPS_HOST" "sudo systemctl restart teleo-pipeline teleo-diagnostics"
|
|
echo "Services restarted."
|
|
fi
|