Skip to content

pnpm not work with different binary name #3775

@ka2n

Description

@ka2n

aqua info

$ aqua info
{
  "version": "2.48.3",
  "commit_hash": "ac88862ea6a47c06b44b3fa0017ba541aca6708b",
  "os": "linux",
  "arch": "amd64",
  "pwd": "/home/(USER)/src/github.com/<org>/<repo>",
  "root_dir": "/home/(USER)/.local/share/aquaproj-aqua",
  "env": {
    "AQUA_GLOBAL_CONFIG": "/home/(USER)/.config/aquaproj-aqua/aqua.yaml",
    "AQUA_POLICY_CONFIG": "/home/(USER)/.config/aquaproj-aqua/aqua-policy.yaml"
  },
  "config_files": [
    {
      "path": "/home/(USER)/src/github.com/<org>/<repo>/aqua.yaml"
    }
  ]
}

Overview

Since pnpm v10.6.2, pnpm is aware of the executable name it was invoked with.
When pnpm is installed via aqua, the binary name becomes pnpm-linux-x64, which causes the ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL error the first time you install a project-specific version of pnpm.

pnpm/pnpm@0b0bcfa

Renaming the binary from pnpm-linux-x64 to pnpm prevents this error.

How to reproduce

aqua.yaml

---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
# checksum:
#   enabled: true
#   require_checksum: true
#   supported_envs:
#   - all
registries:
- type: standard
  ref: v4.245.1 # renovate: depName=aquaproj/aqua-registry
packages:
- name: pnpm/pnpm@v10.6.2

package.json

{
  "name": "frontend",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "engines": {
    "node": "20.10.0"
  },
  "packageManager": "pnpm@9.15.3"
}

Executed command and output

$ pnpm install
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command "/snapshot/dist/pnpm.cjs" not found
 ERROR  Command failed with exit code 254: /home/<user>/.local/share/aquaproj-aqua/pkgs/github_release/github.com/pnpm/pnpm/v10.6.2/pnpm-linux-x64/pnpm-linux-x64 /snapshot/dist/pnpm.cjs add @pnpm/linux-x64@9.15.3 --loglevel=error --allow-build=@pnpm/exe --config.node-linker=hoisted --config.bin=/home/<user>/.local/share/pnpm/.tools/@pnpm+linux-x64/9.15.3_tmp_2586430/bin

Expected behaviour

The binary should be named pnpm, or process.execPath should be spoofed to appear as pnpm.

Actual behaviour

process.execPath is likely set to pnpm-linux-x64, this cause unexpected behavior in pnpm.

Note

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions