mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-25 00:42:24 +00:00
fix: detect nvm services from installed command (#51146)
This commit is contained in:
@@ -326,4 +326,26 @@ describe("runDaemonInstall", () => {
|
||||
|
||||
expect(installDaemonServiceAndEmitMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("reinstalls when the installed service still runs from nvm even if the installer runtime does not", async () => {
|
||||
service.isLoaded.mockResolvedValue(true);
|
||||
resolveAutoNodeExtraCaCertsMock.mockImplementation(({ execPath }) =>
|
||||
typeof execPath === "string" && execPath.includes("/.nvm/")
|
||||
? "/etc/ssl/certs/ca-certificates.crt"
|
||||
: undefined,
|
||||
);
|
||||
service.readCommand.mockResolvedValue({
|
||||
programArguments: ["/home/test/.nvm/versions/node/v22.18.0/bin/node", "dist/entry.js"],
|
||||
environment: {},
|
||||
} as never);
|
||||
|
||||
await runDaemonInstall({ json: true });
|
||||
|
||||
expect(installDaemonServiceAndEmitMock).toHaveBeenCalledTimes(1);
|
||||
expect(resolveAutoNodeExtraCaCertsMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
execPath: "/home/test/.nvm/versions/node/v22.18.0/bin/node",
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -135,17 +135,24 @@ async function gatewayServiceNeedsAutoNodeExtraCaCertsRefresh(params: {
|
||||
service: ReturnType<typeof resolveGatewayService>;
|
||||
env: Record<string, string | undefined>;
|
||||
}): Promise<boolean> {
|
||||
const expectedNodeExtraCaCerts = resolveAutoNodeExtraCaCerts({
|
||||
env: params.env,
|
||||
execPath: process.execPath,
|
||||
});
|
||||
if (!expectedNodeExtraCaCerts) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const currentCommand = await params.service.readCommand(params.env);
|
||||
const currentExecPath = currentCommand?.programArguments[0]?.trim();
|
||||
if (!currentExecPath) {
|
||||
return false;
|
||||
}
|
||||
const currentNodeExtraCaCerts = currentCommand?.environment?.NODE_EXTRA_CA_CERTS?.trim();
|
||||
const expectedNodeExtraCaCerts = resolveAutoNodeExtraCaCerts({
|
||||
env: {
|
||||
...params.env,
|
||||
...currentCommand.environment,
|
||||
NODE_EXTRA_CA_CERTS: undefined,
|
||||
},
|
||||
execPath: currentExecPath,
|
||||
});
|
||||
if (!expectedNodeExtraCaCerts) {
|
||||
return false;
|
||||
}
|
||||
return currentNodeExtraCaCerts !== expectedNodeExtraCaCerts;
|
||||
} catch {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user