coreybutler/nvm-windows

"nvm use" and" nvm install" set a successful exit code when failing

Open

#738 opened on Jan 21, 2022

View on GitHub
 (8 comments) (2 reactions) (0 assignees)Go (46,364 stars) (3,822 forks)batch import
Staleedge casehelp wanted

Description

Issue:

When nvm use is passed a non-installed version of Node, it correctly outputs an error message, but then sets its exit code 0, indicating success. Similarlly, when nvm install is passed an unrecognized version, it correctly outputs an error message, but also sets exit code 0, indicating success.

These make using nvm in a CI environment, or as part of any other automation, difficult because it is not easy to detect when they've failed.

How To Reproduce:

On Windows 10 21H1:

  1. Uninstall all versions of Node
  2. Install nvm via nvm-setup
  3. Run Windows PowerShell as Administrator:
PS C:\WINDOWS\system32> nvm version
1.1.9
PS C:\WINDOWS\system32> nvm list

No installations recognized.
PS C:\WINDOWS\system32> nvm use 14
node v14.18.3 (64-bit) is not installed or cannot be found.
PS C:\WINDOWS\system32> echo $LASTEXITCODE
0
PS C:\WINDOWS\system32> nvm install carrot
Unrecognized version: "carrot"


Running version 1.1.9.

Usage:

  nvm arch                     : Show if node is running in 32 or 64 bit mode.
  nvm current                  : Display active version.
  nvm install <version> [arch] : The version can be a specific version, "latest" for the latest current version, or "lts" for the
                                 most recent LTS version. Optionally specify whether to install the 32 or 64 bit version (defaults
                                 to system arch). Set [arch] to "all" to install 32 AND 64 bit versions.
                                 Add --insecure to the end of this command to bypass SSL validation of the remote download server.
  nvm list [available]         : List the node.js installations. Type "available" at the end to see what can be installed. Aliased as ls.
  nvm on                       : Enable node.js version management.
  nvm off                      : Disable node.js version management.
  nvm proxy [url]              : Set a proxy to use for downloads. Leave [url] blank to see the current proxy.
                                 Set [url] to "none" to remove the proxy.
  nvm node_mirror [url]        : Set the node mirror. Defaults to https://nodejs.org/dist/. Leave [url] blank to use default url.
  nvm npm_mirror [url]         : Set the npm mirror. Defaults to https://github.com/npm/cli/archive/. Leave [url] blank to default url.
  nvm uninstall <version>      : The version must be a specific version.
  nvm use [version] [arch]     : Switch to use the specified version. Optionally use "latest", "lts", or "newest".
                                 "newest" is the latest installed version. Optionally specify 32/64bit architecture.
                                 nvm use <arch> will continue using the selected version, but switch to 32/64 bit mode.
  nvm root [path]              : Set the directory where nvm should store different versions of node.js.
                                 If <path> is not set, the current root will be displayed.
  nvm version                  : Displays the current running version of nvm for Windows. Aliased as v.

PS C:\WINDOWS\system32> echo $LASTEXITCODE
0

Expected Behavior:

I would expect any failure of install or use to result in the exit code being anything other than 0, to indicate failure.

PS C:\WINDOWS\system32> nvm use 14
node v14.18.3 (64-bit) is not installed or cannot be found.
PS C:\WINDOWS\system32> echo $LASTEXITCODE
1
PS C:\WINDOWS\system32> nvm install carrot
Unrecognized version: "carrot"
...
PS C:\WINDOWS\system32> echo $LASTEXITCODE
1

Thank You:

nvm-windows is an invaluable part of the Node ecosystem on Windows. Thank you very much for creating and maintaining it!

Contributor guide