mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 15:40:44 +00:00
fix: warn before npm prefix redirection (#73890) (thanks @Sayeem3051)
This commit is contained in:
@@ -108,6 +108,59 @@ describe("install.sh", () => {
|
||||
expect(output).toContain(`path=${nvmNode}`);
|
||||
expect(output).toContain("version=v22.22.1");
|
||||
});
|
||||
|
||||
it("warns before redirecting an unwritable npm prefix", () => {
|
||||
const tmp = mkdtempSync(join(tmpdir(), "openclaw-install-npm-prefix-"));
|
||||
const home = join(tmp, "home");
|
||||
const events = join(tmp, "events.log");
|
||||
mkdirSync(home, { recursive: true });
|
||||
|
||||
let result: ReturnType<typeof runInstallShell> | undefined;
|
||||
try {
|
||||
result = runInstallShell(`
|
||||
set -euo pipefail
|
||||
source "${SCRIPT_PATH}"
|
||||
OS=linux
|
||||
HOME=${JSON.stringify(home)}
|
||||
prefix=${JSON.stringify(join(tmp, "root-owned-prefix"))}
|
||||
events=${JSON.stringify(events)}
|
||||
npm() {
|
||||
if [[ "$1" == "config" && "$2" == "get" && "$3" == "prefix" ]]; then
|
||||
printf '%s\\n' "$prefix"
|
||||
return 0
|
||||
fi
|
||||
if [[ "$1" == "config" && "$2" == "set" && "$3" == "prefix" ]]; then
|
||||
printf 'npm-set:%s\\n' "$4" >> "$events"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
ui_info() { printf 'info:%s\\n' "$*" >> "$events"; }
|
||||
ui_warn() { printf 'warn:%s\\n' "$*" >> "$events"; }
|
||||
ui_success() { printf 'success:%s\\n' "$*" >> "$events"; }
|
||||
fix_npm_permissions
|
||||
cat "$events"
|
||||
`);
|
||||
} finally {
|
||||
rmSync(tmp, { force: true, recursive: true });
|
||||
}
|
||||
|
||||
expect(result?.status).toBe(0);
|
||||
const lines = (result?.stdout ?? "").trim().split("\n");
|
||||
const warningIndex = lines.findIndex((line) =>
|
||||
line.includes("The installer will switch npm's user prefix"),
|
||||
);
|
||||
const npmSetIndex = lines.findIndex((line) => line.startsWith("npm-set:"));
|
||||
const noSudoWarningIndex = lines.findIndex((line) => line.includes("Avoid sudo npm i -g"));
|
||||
expect(warningIndex).toBeGreaterThanOrEqual(0);
|
||||
expect(npmSetIndex).toBeGreaterThan(warningIndex);
|
||||
expect(noSudoWarningIndex).toBeGreaterThan(npmSetIndex);
|
||||
expect(result?.stdout).toContain("npm global prefix is not writable");
|
||||
expect(result?.stdout).toContain("npm normally writes that setting to ~/.npmrc");
|
||||
expect(result?.stdout).toContain("npm i -g openclaw@latest");
|
||||
expect(result?.stdout).toContain("using this user prefix");
|
||||
expect(result?.stdout).not.toContain("has been saved");
|
||||
});
|
||||
});
|
||||
|
||||
describe("install.sh macOS Homebrew Node behavior", () => {
|
||||
|
||||
Reference in New Issue
Block a user