Skip to content

Commit 649bdd9

Browse files
committed
fix: fail stopped service update restart errors
1 parent 13d568d commit 649bdd9

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

src/cli/update-cli.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2912,6 +2912,40 @@ describe("update-cli", () => {
29122912
expect(logs.join("\n")).not.toContain("Gateway: restarted and verified.");
29132913
});
29142914

2915+
it("fails managed git restart when the stopped service cannot be restarted", async () => {
2916+
const serviceEntrypoint = path.join(process.cwd(), "dist", "index.js");
2917+
serviceReadCommand.mockResolvedValue({
2918+
programArguments: ["node", serviceEntrypoint, "gateway", "run"],
2919+
environment: {
2920+
OPENCLAW_SERVICE_MARKER: "openclaw",
2921+
OPENCLAW_SERVICE_KIND: "gateway",
2922+
},
2923+
});
2924+
serviceLoaded.mockResolvedValue(false);
2925+
serviceLoaded.mockResolvedValueOnce(true);
2926+
serviceReadRuntime.mockResolvedValue({
2927+
status: "stopped",
2928+
pid: null,
2929+
state: "stopped",
2930+
});
2931+
serviceReadRuntime.mockResolvedValueOnce({
2932+
status: "running",
2933+
pid: 4242,
2934+
state: "running",
2935+
});
2936+
runRestartScript.mockRejectedValueOnce(new Error("restart unavailable"));
2937+
mockGitUpdateAfterMutation();
2938+
2939+
await updateCommand({ yes: true });
2940+
2941+
const logs = vi.mocked(defaultRuntime.log).mock.calls.map((call) => String(call[0]));
2942+
expect(serviceStop).toHaveBeenCalledTimes(1);
2943+
expect(runRestartScript).toHaveBeenCalledTimes(1);
2944+
expect(defaultRuntime.exit).toHaveBeenCalledWith(1);
2945+
expect(logs.join("\n")).toContain("Gateway: restart failed: Error: restart unavailable");
2946+
expect(logs.join("\n")).not.toContain("Gateway: restarted and verified.");
2947+
});
2948+
29152949
it("stops a managed gateway rooted at the git checkout when switching package installs to dev", async () => {
29162950
const packageRoot = createCaseDir("openclaw-update-package-root");
29172951
const gitRoot = await createTrackedTempDir("openclaw-update-git-service-root-");

src/cli/update-cli/update-command.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2315,7 +2315,10 @@ async function maybeRestartService(params: {
23152315
),
23162316
);
23172317
}
2318-
if (isPackageManagerUpdateMode(params.result.mode)) {
2318+
if (
2319+
isPackageManagerUpdateMode(params.result.mode) ||
2320+
params.requireRunningServiceAfterRestart
2321+
) {
23192322
return false;
23202323
}
23212324
}

0 commit comments

Comments
 (0)