From 60fd4846afef041aeaae6eb7beffb72f060026e2 Mon Sep 17 00:00:00 2001 From: Jason Ross Date: Tue, 26 May 2026 15:09:04 -0500 Subject: [PATCH] Fix pnpm PATH: use /bin subdir and single-quote bash -c Two bugs in pnpmEnvPrefix: 1. pnpm setup configures global-bin-dir as $PNPM_HOME/bin, not $PNPM_HOME. We were only prepending $PNPM_HOME to PATH, so pnpm still complained 'configured global bin directory ... is not in PATH' and refused to install. 2. The bash -c command was wrapped in double quotes, which caused the OUTER sh to expand $PNPM_HOME, $PATH, $HOME before bash ever saw them. PNPM_HOME was empty in the outer shell, so the resulting PATH was ':$PATH'. Fix: wrap bash -c argument in single quotes so the inner bash does all variable expansion; prepend both $PNPM_HOME/bin and $PNPM_HOME to PATH for safety. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- post.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/post.go b/post.go index b1facea..6f6857d 100644 --- a/post.go +++ b/post.go @@ -480,9 +480,9 @@ func installAgy() { func pnpmEnvPrefix() string { if isMacOS { - return `export PNPM_HOME="$HOME/Library/pnpm" && export PATH="$PNPM_HOME:$PATH" && ` + return `export PNPM_HOME="$HOME/Library/pnpm"; export PATH="$PNPM_HOME/bin:$PNPM_HOME:$PATH"; ` } - return `export PNPM_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/pnpm" && export PATH="$PNPM_HOME:$PATH" && ` + return `export PNPM_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/pnpm"; export PATH="$PNPM_HOME/bin:$PNPM_HOME:$PATH"; ` } func installNpmPackage(pkgName string) { @@ -493,7 +493,7 @@ func installNpmPackage(pkgName string) { } ensureNodeLTS() fmt.Printf(" Installing %s via pnpm ...\n", pkgName) - cmd := fmt.Sprintf(`bash -c "%ssource ~/.nvm/nvm.sh && pnpm add -g %s"`, pnpmEnvPrefix(), pkgName) + cmd := fmt.Sprintf(`bash -c '%ssource ~/.nvm/nvm.sh && pnpm add -g %s'`, pnpmEnvPrefix(), pkgName) if !runShell(cmd, CmdOpts{}).OK() { errLog(fmt.Sprintf("%s installation failed", pkgName)) } @@ -507,7 +507,7 @@ func installPlaywright() { } ensureNodeLTS() fmt.Println(" Installing playwright via pnpm ...") - addCmd := fmt.Sprintf(`bash -c "%ssource ~/.nvm/nvm.sh && pnpm add -g playwright"`, pnpmEnvPrefix()) + addCmd := fmt.Sprintf(`bash -c '%ssource ~/.nvm/nvm.sh && pnpm add -g playwright'`, pnpmEnvPrefix()) if !runShell(addCmd, CmdOpts{}).OK() { errLog("playwright installation failed") return @@ -519,7 +519,7 @@ func installPlaywright() { } else { fmt.Println(" Installing Playwright browsers ...") } - if !runShell(fmt.Sprintf(`bash -c "%ssource ~/.nvm/nvm.sh && %s"`, pnpmEnvPrefix(), installCmd), CmdOpts{}).OK() { + if !runShell(fmt.Sprintf(`bash -c '%ssource ~/.nvm/nvm.sh && %s'`, pnpmEnvPrefix(), installCmd), CmdOpts{}).OK() { errLog("playwright browser installation failed") } }