Skip to content

Commit 7f2aabf

Browse files
aaajiaoclaude
andcommitted
feat: skip rebuild when already on latest version in openclaw-update
openclaw-update now checks HEAD against the latest tag before stopping the gateway. If already current, it exits early instead of running the full stop → build → restart cycle. Adds --force flag to override. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 09748cd commit 7f2aabf

7 files changed

Lines changed: 48 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ openclaw doctor
110110
| `openclaw-stop/start` | Stop/start service |
111111
| `openclaw-shell` | Enter VM terminal |
112112
| `openclaw-doctor` | Run diagnostics |
113-
| `openclaw-update` | Update app (`--sandbox` to rebuild images) |
113+
| `openclaw-update` | Update app (`--sandbox` rebuild images, `--force` force rebuild) |
114114
| `openclaw-sandbox-rebuild` | Rebuild sandbox Docker images |
115115

116116
Full command reference: [docs/commands.md](docs/commands.md)

docs/README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ openclaw doctor
110110
| `openclaw-stop/start` | 停止/启动服务 |
111111
| `openclaw-shell` | 进入 VM |
112112
| `openclaw-doctor` | 运行诊断 |
113-
| `openclaw-update` | 更新版本 (仅应用,`--sandbox` 重建镜像) |
113+
| `openclaw-update` | 更新版本 (`--sandbox` 重建镜像`--force` 强制重建) |
114114
| `openclaw-sandbox-rebuild` | 重建沙箱镜像 |
115115

116116
完整命令参考见 [commands.md](commands.md)

docs/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ Gateway 还支持以下扩展能力:
189189
├── openclaw-start # systemctl start
190190
├── openclaw-shell # 进入 VM
191191
├── openclaw-doctor # 运行诊断
192-
├── openclaw-update # 更新版本 (仅应用,--sandbox 重建镜像)
192+
├── openclaw-update # 更新版本 (--sandbox 重建镜像,--force 强制重建)
193193
└── openclaw-sandbox-rebuild # 重建沙箱镜像
194194
```
195195

docs/commands.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,29 @@ openclaw-whatsapp # 扫码登录
6161
| `openclaw-start` | 启动服务 |
6262
| `openclaw-shell` | 进入 VM 终端 |
6363
| `openclaw-doctor` | 运行诊断 (openclaw doctor) |
64-
| `openclaw-update` | 更新版本 (仅应用,`--sandbox` 重建镜像) |
64+
| `openclaw-update` | 更新版本 (`--sandbox` 重建镜像`--force` 强制重建) |
6565
| `openclaw-sandbox-rebuild` | 重建沙箱 Docker 镜像 |
6666

6767
### 更新命令详情
6868

69-
`openclaw-update` 默认只更新应用(不重建沙箱镜像):
70-
1. 停止 Gateway 服务
71-
2. 获取最新 release tag 并切换
72-
3. 安装依赖 (`npm install`)
73-
4. 编译项目 (`npm run build`)
74-
5. 构建 Control UI (`pnpm ui:build`)
75-
6. 重新安装 CLI (`npm install -g .`)
76-
7. 启动服务
69+
`openclaw-update` 会先检查是否有新版本。如果已是最新,直接跳过构建流程:
7770

78-
使用 `--sandbox` 标志同时重建沙箱镜像:
7971
```bash
80-
openclaw-update --sandbox
72+
openclaw-update # 有新版本才更新,已是最新则跳过
73+
openclaw-update --force # 强制重新构建(即使已是最新版本)
74+
openclaw-update --sandbox # 同时重建沙箱 Docker 镜像
8175
```
8276

77+
有新版本时的更新流程:
78+
1. 获取最新 release tag
79+
2. 停止 Gateway 服务
80+
3. 切换到新版本
81+
4. 安装依赖 (`pnpm install`)
82+
5. 编译项目 (`pnpm build`)
83+
6. 构建 Control UI (`pnpm ui:build`)
84+
7. 重新安装 CLI (`npm install -g .`)
85+
8. 启动服务
86+
8387
或单独重建沙箱镜像:
8488
```bash
8589
openclaw-sandbox-rebuild

lang/en.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,12 @@ MSG_CMD_CONFIG_BACKED_UP="Backed up to: %s"
9494
MSG_CMD_CONFIG_USAGE="Usage: openclaw-config [edit|show|backup]"
9595

9696
# openclaw-update
97-
MSG_CMD_UPDATE_USAGE="Usage: openclaw-update [--sandbox]"
97+
MSG_CMD_UPDATE_USAGE="Usage: openclaw-update [--sandbox] [--force]"
9898
MSG_CMD_UPDATE_DESC="Update OpenClaw to the latest version."
9999
MSG_CMD_UPDATE_OPTIONS="Options:"
100100
MSG_CMD_UPDATE_SANDBOX_OPT=" --sandbox Also rebuild sandbox Docker images"
101+
MSG_CMD_UPDATE_FORCE_OPT=" --force Force rebuild even if already on latest version"
102+
MSG_CMD_UPDATE_ALREADY_CURRENT="✅ Already on the latest version. No update needed.\n💡 Use --force to rebuild anyway."
101103
MSG_CMD_UPDATE_TIP="Tip: To rebuild sandbox only, use openclaw-sandbox-rebuild"
102104
MSG_CMD_UPDATE_UPDATING="🔄 Updating OpenClaw..."
103105
MSG_CMD_UPDATE_STOPPING=" Stopping service..."

lang/zh-CN.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,12 @@ MSG_CMD_CONFIG_BACKED_UP="已备份到: %s"
9494
MSG_CMD_CONFIG_USAGE="用法: openclaw-config [edit|show|backup]"
9595

9696
# openclaw-update
97-
MSG_CMD_UPDATE_USAGE="用法: openclaw-update [--sandbox]"
97+
MSG_CMD_UPDATE_USAGE="用法: openclaw-update [--sandbox] [--force]"
9898
MSG_CMD_UPDATE_DESC="更新 OpenClaw 应用到最新版本。"
9999
MSG_CMD_UPDATE_OPTIONS="选项:"
100100
MSG_CMD_UPDATE_SANDBOX_OPT=" --sandbox 同时重建沙箱 Docker 镜像"
101+
MSG_CMD_UPDATE_FORCE_OPT=" --force 即使已是最新版本也强制重新构建"
102+
MSG_CMD_UPDATE_ALREADY_CURRENT="✅ 已是最新版本,无需更新。\n💡 如需强制重建: openclaw-update --force"
101103
MSG_CMD_UPDATE_TIP="提示: 单独重建沙箱可用 openclaw-sandbox-rebuild"
102104
MSG_CMD_UPDATE_UPDATING="🔄 正在更新 OpenClaw..."
103105
MSG_CMD_UPDATE_STOPPING=" 停止服务..."

scripts/commands/update.sh

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
source "$(dirname "$0")/_common.sh"
77

88
SANDBOX=false
9+
FORCE=false
910
for arg in "$@"; do
1011
case "$arg" in
1112
--sandbox) SANDBOX=true ;;
13+
--force) FORCE=true ;;
1214
--help|-h)
1315
echo "$MSG_CMD_UPDATE_USAGE"
1416
echo ""
1517
echo "$MSG_CMD_UPDATE_DESC"
1618
echo ""
1719
echo "$MSG_CMD_UPDATE_OPTIONS"
1820
echo "$MSG_CMD_UPDATE_SANDBOX_OPT"
21+
echo "$MSG_CMD_UPDATE_FORCE_OPT"
1922
echo ""
2023
echo "$MSG_CMD_UPDATE_TIP"
2124
exit 0
@@ -46,14 +49,7 @@ fi
4649

4750
echo "$MSG_CMD_UPDATE_UPDATING"
4851

49-
echo "$MSG_CMD_UPDATE_STOPPING"
50-
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway stop"
51-
GATEWAY_STOPPED=true
52-
trap 'if [ "$GATEWAY_STOPPED" = true ]; then
53-
echo "$MSG_CMD_UPDATE_RECOVER"
54-
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start" 2>/dev/null || true
55-
fi' EXIT
56-
52+
# Fetch tags before stopping gateway to check if update is needed
5753
echo "$MSG_CMD_UPDATE_PULLING"
5854
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git fetch --tags --force"
5955
LATEST_TAG=$(orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git tag -l 'v*' | grep -v -e '-beta' -e '-rc' -e '-alpha' | sort -V | tail -1")
@@ -62,6 +58,26 @@ if [ -z "$LATEST_TAG" ]; then
6258
exit 1
6359
fi
6460
echo " -> $LATEST_TAG"
61+
62+
# Check if already on the latest tag
63+
CURRENT_HEAD=$(orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git rev-parse HEAD 2>/dev/null")
64+
TAG_COMMIT=$(orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git rev-parse '$LATEST_TAG^{commit}' 2>/dev/null")
65+
if [ "$CURRENT_HEAD" = "$TAG_COMMIT" ] && [ "$FORCE" = false ] && [ "$SANDBOX" = false ]; then
66+
echo -e "$MSG_CMD_UPDATE_ALREADY_CURRENT"
67+
# Still refresh Mac commands in case openclaw-orbstack repo changed
68+
OPENCLAW_LANG="$_OPENCLAW_LANG" OPENCLAW_VM_NAME="$OPENCLAW_VM_NAME" \
69+
bash "$OPENCLAW_REPO_DIR/scripts/refresh-mac-commands.sh" 2>/dev/null || true
70+
exit 0
71+
fi
72+
73+
echo "$MSG_CMD_UPDATE_STOPPING"
74+
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway stop"
75+
GATEWAY_STOPPED=true
76+
trap 'if [ "$GATEWAY_STOPPED" = true ]; then
77+
echo "$MSG_CMD_UPDATE_RECOVER"
78+
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start" 2>/dev/null || true
79+
fi' EXIT
80+
6581
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git checkout -- . 2>/dev/null; git checkout '$LATEST_TAG'"
6682

6783
# Ensure pnpm is available (npm/corepack may vanish after apt upgrade)

0 commit comments

Comments
 (0)