Files
clawd/tools/update-clawd.sh
2026-04-30 18:18:30 +08:00

65 lines
1.4 KiB
Bash

#!/bin/bash
set -euo pipefail
REPO_DIR="/opt/clawd"
REMOTE="origin"
BRANCH="main"
SERVICE="clawd.service"
NO_RESTART=false
for arg in "$@"; do
case "$arg" in
--no-restart) NO_RESTART=true ;;
esac
done
echo "==> clawd update start"
date
if [ ! -d "$REPO_DIR/.git" ]; then
echo "ERROR: $REPO_DIR is not a git repository"
exit 1
fi
cd "$REPO_DIR"
echo "==> Fetching latest from $REMOTE/$BRANCH ..."
git fetch "$REMOTE"
LOCAL_COMMIT="$(git rev-parse HEAD)"
REMOTE_COMMIT="$(git rev-parse "$REMOTE/$BRANCH")"
echo "==> Local : $LOCAL_COMMIT"
echo "==> Remote: $REMOTE_COMMIT"
if [ "$LOCAL_COMMIT" = "$REMOTE_COMMIT" ]; then
echo "==> Already up to date. Skip upgrade."
exit 0
fi
echo "==> Updating working tree to $REMOTE/$BRANCH ..."
git reset --hard "$REMOTE/$BRANCH"
git clean -fd
if git diff --name-only "$LOCAL_COMMIT" "$REMOTE_COMMIT" | grep -Eq '(^|/)(package.json|package-lock.json)$'; then
echo "==> Dependency files changed, running npm install ..."
npm install --prefix "$REPO_DIR"
else
echo "==> No dependency changes, skip npm install"
fi
echo "==> Current commit:"
git log --oneline -1
if [ "$NO_RESTART" = true ]; then
echo "==> --no-restart: skip systemctl restart (caller handles restart)"
exit 0
fi
echo "==> Restarting service: $SERVICE"
systemctl restart "$SERVICE"
echo "==> Service status:"
systemctl status "$SERVICE" --no-pager -l || true
echo "==> clawd update done"