Compare commits

..

34 Commits

Author SHA1 Message Date
Jordan Harband
c92adb3c47 v0.39.5 2023-08-21 21:10:10 -07:00
Oliver Henshaw
15eba7b7e6 [Fix] nvm_strip_path: Preserve leading/trailing colons
Path lists in environmental variables often give special meaning to
empty entries (e.g. in PATH or MANPATH). These are represented by
leading or trailing colons, or by doubled colons in the middle of the
list.

Adjust the awk invocation to correctly deal with trailing colons by
printing the separator before every field except the first, and then
printing the final separator that is read from the input - this will
either be a colon or the null string. This preserves leading and
trailing colons in all cases while not adding extra colons in the wrong
place.

Add test to confirm the correct behaviour.

Fixes #3144
2023-06-21 15:47:52 +01:00
heungjun.park
a1601eddb8 [readme] add examples of setting specific versions as default
Co-authored-by: heungjun.park <rockheung@gmail.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2023-07-20 17:39:37 +09:00
Jordan Harband
324b81a722 [Fix] allow checksums to pass with a leading backslash
See https://unix.stackexchange.com/a/555061/137489
2023-08-06 14:51:48 +12:00
Jordan Harband
55075db96d [Tests] add some nvm_do_install tests 2022-12-27 22:57:07 -08:00
Jordan Harband
4618ce0aa1 [Tests] a cleaner name for the windows tests 2022-12-27 22:32:09 -08:00
Jordan Harband
3afdce0a2c [Fix] nvm install-latest-npm: ensure npm 10 does not install on unsupported nodes
See https://github.com/npm/cli/pull/6674
2023-07-26 13:21:03 -07:00
Jordan Harband
8fbf8ab694 v0.39.4 2023-07-24 18:29:54 -07:00
Jordan Harband
4fc91d408c [Dev Deps] update markdown-link-check, semver 2023-07-24 18:24:39 -07:00
Emmanuel Ogbizi
f86847fdd2 [readme] add nvshim tool alongside avn 2020-04-15 19:27:44 -04:00
emmanuel-ferdman
9a769630d7 [readme] fix typo in resolv.conf filename
Signed-off-by: emmanuel-ferdman <35470921+emmanuel-ferdman@users.noreply.github.com>
2023-06-18 15:41:40 +03:00
Augustin Mauroy
c26422a03e [readme] Update logo header 2023-06-05 10:34:20 +02:00
milesfrain
7c3cd81ad9 [readme] Add instructions on how to install without editing shell config
I had to dig into #2410 to learn about the `PROFILE=/dev/null` technique to install without appending to my shell config. Figured this note would be good to add in the main installation docs.
Also added a note on how to do this as a one-liner which was not obvious for me.
2023-04-25 13:49:16 -07:00
Deniz Eren Evrendilek
0ebda7eea3 [meta] Remove unavailable testing script
Fixes #3104
2023-05-01 11:23:38 -07:00
Deniz
5410ae57ba [Fix] fix node download link for armv8l
Fixes #3035
2023-04-29 16:41:31 -07:00
Spike Grobstein
70aa611abc [Fix] nvm exec: no longer error with '-q: invalid option' for zsh users
the `nvm.sh` file assigns and exports an `NVM_CD_FLAGS` variable if it
was sourced from a zsh shell. the fact that it's exported means that
it'll be assigned in all child processes, including the `nvm-exec`
script, which uses bash as the interpreter.

Bash's `cd` command doesn't have a `-q` flag, so if the `NVM_CD_FLAGS`
is assigned `-q`, the script will error out and incorrectly claim that
the node version isn't installed.

this also manifests itself in the `nvm exec` command.

Example:

```console
$ nvm exec 16.14.0 npm --version
Running node v16.14.0 (npm v8.3.1)
/Users/<ME>/.nvm/nvm.sh: line 28: cd: -q: invalid option
cd: usage: cd [-L|[-P [-e]] [-@]] [dir]
both the tree and the node path are required
N/A: version "v16.14.0 -> N/A" is not yet installed.

You need to run "nvm install v16.14.0" to install it before using it.
```

To address this, we unset the `NVM_CD_FLAGS` at the start of the
`nvm-exec` script, before loading `nvm.sh`.
2023-04-21 20:40:01 -07:00
Jordan Harband
c08b38a2a4 [Fix] nvm_print_npm_version: if npm exists but its node crashes, do not print the npm version 2023-04-28 10:57:57 -07:00
Jordan Harband
a07cd41af1 [Fix] nvm_ls_current: when node is present but crashes immediately, echo "none" 2023-04-28 10:55:03 -07:00
JC (Jonathan Chen)
d1a22a63bd [readme] cdnvm function: fix shellcheck errors
Resolves #3081
2023-04-09 09:21:56 -04:00
Leo Zlotnikov
0d9b5c2a00 [Fix] fix directory traversal when workdir path is not readable 2023-04-08 17:24:41 +01:00
Peter Dave Hello
44e1d9c911 [Dockerfile] Update base image from Ubuntu 20.04 to 22.04, cc #2877 2023-04-06 01:22:10 +08:00
Jordan Harband
b1331c20b0 [Tests] add unit tests for nvm_download_artifact 2023-04-06 09:23:33 -07:00
Peter Dave Hello
766341fca1 [readme] Update Travis CI badge and link url
travis-ci.org is deprecated and replaced by app.travis-ci.com for a while
2023-04-03 22:50:48 +08:00
Jordan Harband
946da2e743 [Dev Deps] update markdown-link-check 2023-03-22 16:20:48 -07:00
Dennis
dde04f9392 [Fix] recognize 32Bit docker container and use x86 arch 2023-03-22 14:52:40 -07:00
William Baker
ffcb5213e2 [Perf] Improve performance of listing aliases
Fixes #3054
2023-03-10 00:53:29 -05:00
Jordan Harband
ea3b65f02e [Tests] npm bin has been removed 2023-03-21 13:31:52 -07:00
Qasim Abdullah
ee6f766712 [Tests] downgrade python to v2 on travis
- TCI Support
 - python 2.7
 - skip build-essential
2023-03-21 22:45:38 +05:00
Nicolas signed-log FORMICHELLA
edacf8275e [Fix] Remove unneeded call to ls in nvm_arch
Remove the call to `ls` that was used to determine the symlink
destination

Reasoning :

* `od` resolves symlink itself due to the use of `fopen`
* Prevent the behaviour of `od` which will hang if the filename is
  empty (i.e. `/sbin/init` missing) as it will be waiting for `stdin`
  compared to quitting with error if the file just doesn't exist

Fixes #3006
2023-01-22 11:48:59 +01:00
Jordan Harband
f36516b472 [Tests] move install script tests to github actions 2022-10-26 14:47:18 -07:00
Jordan Harband
dc691121b8 [Tests] improve debug output on failure 2022-12-27 21:41:39 -08:00
Jordan Harband
ce35311657 [Tests] force the NVM_DIR to the expected location, for tests 2022-12-27 21:40:48 -08:00
Thomas Levine
fe06825a96 [tests] Update urchin repository link 2022-12-25 10:38:26 +00:00
Jordan Harband
a60ac08a80 [actions] allow nvm to be installed 2022-12-26 13:22:07 -08:00
27 changed files with 268 additions and 60 deletions

View File

@@ -50,6 +50,7 @@ jobs:
with: with:
allowed-endpoints: allowed-endpoints:
github.com:443 github.com:443
raw.githubusercontent.com:443
iojs.org:443 iojs.org:443
nodejs.org:443 nodejs.org:443
registry.npmjs.org:443 registry.npmjs.org:443

View File

@@ -12,6 +12,7 @@ jobs:
with: with:
allowed-endpoints: allowed-endpoints:
github.com:443 github.com:443
raw.githubusercontent.com:443
nodejs.org:443 nodejs.org:443
registry.npmjs.org:443 registry.npmjs.org:443
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -31,6 +32,7 @@ jobs:
allowed-endpoints: allowed-endpoints:
ghcr.io:443 ghcr.io:443
github.com:443 github.com:443
raw.githubusercontent.com:443
pkg-containers.githubusercontent.com:443 pkg-containers.githubusercontent.com:443
nodejs.org:443 nodejs.org:443
registry.npmjs.org:443 registry.npmjs.org:443
@@ -50,6 +52,7 @@ jobs:
with: with:
allowed-endpoints: allowed-endpoints:
github.com:443 github.com:443
raw.githubusercontent.com:443
nodejs.org:443 nodejs.org:443
registry.npmjs.org:443 registry.npmjs.org:443
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -68,6 +71,7 @@ jobs:
with: with:
allowed-endpoints: allowed-endpoints:
github.com:443 github.com:443
raw.githubusercontent.com:443
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: check tests filenames - name: check tests filenames
run: ./rename_test.sh --check run: ./rename_test.sh --check

56
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
name: urchin tests
on: [push]
jobs:
tests:
permissions:
contents: write
name: "tests"
runs-on: ubuntu-latest
defaults:
run:
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
strategy:
fail-fast: false
matrix:
include:
- shell: bash
suite: install_script
# shell:
# - bash
# suite:
# - install_script
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
allowed-endpoints:
github.com:443
registry.npmjs.org:443
raw.githubusercontent.com:443
nodejs.org:443
iojs.org:443
- uses: actions/checkout@v3
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
- run: curl --version
- run: wget --version
- uses: ljharb/actions/node/run@main
name: 'npm install && version checks'
with:
node-version: 'lts/*'
skip-ls-check: true
shell-command: echo installed
- run: npm ls urchin
- run: env
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
nvm:
name: 'all test suites, all shells'
needs: [tests]
runs-on: ubuntu-latest
steps:
- run: 'echo tests completed'

View File

@@ -125,9 +125,10 @@ jobs:
nvm install ${{ matrix.npm-node-version }} nvm install ${{ matrix.npm-node-version }}
nvm_windows: nvm_windows:
permissions: name: 'tests, on windows'
contents: none permissions:
needs: [wsl_matrix, cygwin_matrix, msys_matrix, msys_fail_install] contents: none
runs-on: ubuntu-latest needs: [wsl_matrix, cygwin_matrix, msys_matrix, msys_fail_install]
steps: runs-on: ubuntu-latest
- run: 'echo tests completed' steps:
- run: 'echo tests completed'

View File

@@ -22,7 +22,10 @@ before_install:
- bash --version | head - bash --version | head
- zsh --version - zsh --version
- dpkg -s dash | grep ^Version | awk '{print $2}' - dpkg -s dash | grep ^Version | awk '{print $2}'
- pyenv local 3.9 || echo 'pyenv failed' # install python
- pyenv install 2.7.18
- pyenv local 2.7.18 || echo 'pyenv failed'
- python -V
install: install:
- if [ -z "${SHELLCHECK-}" ]; then nvm install 16 && nvm unalias default && npm install && npm prune && npm ls urchin doctoc eclint dockerfile_lint; fi - if [ -z "${SHELLCHECK-}" ]; then nvm install 16 && nvm unalias default && npm install && npm prune && npm ls urchin doctoc eclint dockerfile_lint; fi
- '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y' - '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y'
@@ -70,7 +73,6 @@ env:
- PATH="/usr/lib/ccache/:$PATH" - PATH="/usr/lib/ccache/:$PATH"
- NVM_DIR="${TRAVIS_BUILD_DIR}" - NVM_DIR="${TRAVIS_BUILD_DIR}"
matrix: matrix:
- SHELL=bash TEST_SUITE=install_script
- SHELL=sh TEST_SUITE=fast - SHELL=sh TEST_SUITE=fast
- SHELL=dash TEST_SUITE=fast - SHELL=dash TEST_SUITE=fast
- SHELL=bash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast

View File

@@ -74,8 +74,6 @@ Verify your changes
``` ```
npm test npm test
# or
npm run tests-only
``` ```
Push your changes Push your changes

View File

@@ -6,7 +6,7 @@
# Please note that it'll use about 1.2 GB disk space and about 15 minutes to # Please note that it'll use about 1.2 GB disk space and about 15 minutes to
# build this image, it depends on your hardware. # build this image, it depends on your hardware.
FROM ubuntu:20.04 FROM ubuntu:22.04
LABEL maintainer="Peter Dave Hello <hsu@peterdavehello.org>" LABEL maintainer="Peter Dave Hello <hsu@peterdavehello.org>"
LABEL name="nvm-dev-env" LABEL name="nvm-dev-env"
LABEL version="latest" LABEL version="latest"

View File

@@ -1,6 +1,12 @@
<a href="https://github.com/nvm-sh/logos"><img alt="nvm project logo" src="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-color.svg" height="50" /></a> <a href="https://github.com/nvm-sh/logos">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-white.svg" />
<img src="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-color.svg" height="50" alt="nvm project logo" />
</picture>
</a>
# Node Version Manager [![Build Status](https://travis-ci.org/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.3-yellow.svg)][4] [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/684/badge)](https://bestpractices.coreinfrastructure.org/projects/684)
# Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.5-yellow.svg)][4] [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/684/badge)](https://bestpractices.coreinfrastructure.org/projects/684)
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` --> <!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
@@ -95,10 +101,10 @@ nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be i
To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command: To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
``` ```
```sh ```sh
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
``` ```
Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`).
@@ -120,6 +126,8 @@ Eg: `curl ... | NVM_DIR="path/to/nvm"`. Ensure that the `NVM_DIR` does not conta
- The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available. - The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available.
- You can instruct the installer to not edit your shell config (for example if you already get completions via a [zsh nvm plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/nvm)) by setting `PROFILE=/dev/null` before running the `install.sh` script. Here's an example one-line command to do that: `PROFILE=/dev/null bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash'`
#### Troubleshooting on Linux #### Troubleshooting on Linux
On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again. On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again.
@@ -166,7 +174,7 @@ You can use a task:
```yaml ```yaml
- name: Install nvm - name: Install nvm
ansible.builtin.shell: > ansible.builtin.shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
args: args:
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh" creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
``` ```
@@ -228,7 +236,7 @@ If you have `git` installed (requires git v1.7.10+):
1. clone this repo in the root of your user profile 1. clone this repo in the root of your user profile
- `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm` - `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm`
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.3` 1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.5`
1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh` 1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh`
Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login: Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login:
@@ -491,7 +499,9 @@ nvm deactivate
To set a default Node version to be used in any new shell, use the alias 'default': To set a default Node version to be used in any new shell, use the alias 'default':
```sh ```sh
nvm alias default node nvm alias default node # this refers to the latest installed version of node
nvm alias default 18 # this refers to the latest installed v18.x version of node
nvm alias default 18.12 # this refers to the latest installed v18.12.x version of node
``` ```
#### Use a mirror of node binaries #### Use a mirror of node binaries
@@ -548,6 +558,8 @@ The contents of a `.nvmrc` file **must** be the `<version>` (as described by `nv
You can use [`avn`](https://github.com/wbyoung/avn) to deeply integrate into your shell and automatically invoke `nvm` when changing directories. `avn` is **not** supported by the `nvm` maintainers. Please [report issues to the `avn` team](https://github.com/wbyoung/avn/issues/new). You can use [`avn`](https://github.com/wbyoung/avn) to deeply integrate into your shell and automatically invoke `nvm` when changing directories. `avn` is **not** supported by the `nvm` maintainers. Please [report issues to the `avn` team](https://github.com/wbyoung/avn/issues/new).
You can also use [`nvshim`](https://github.com/iamogbz/nvshim) to shim the `node`, `npm`, and `npx` bins to automatically use the `nvm` config in the current directory. `nvshim` is **not** supported by the `nvm` maintainers. Please [report issues to the `nvshim` team](https://github.com/iamogbz/nvshim/issues/new).
If you prefer a lighter-weight solution, the recipes below have been contributed by `nvm` users. They are **not** supported by the `nvm` maintainers. We are, however, accepting pull requests for more examples. If you prefer a lighter-weight solution, the recipes below have been contributed by `nvm` users. They are **not** supported by the `nvm` maintainers. We are, however, accepting pull requests for more examples.
#### bash #### bash
@@ -599,8 +611,9 @@ cdnvm() {
fi fi
fi fi
} }
alias cd='cdnvm' alias cd='cdnvm'
cd "$PWD" cdnvm "$PWD" || exit
``` ```
This alias would search 'up' from your current directory in order to detect a `.nvmrc` file. If it finds it, it will switch to that version; if not, it will use the default version. This alias would search 'up' from your current directory in order to detect a `.nvmrc` file. If it finds it, it will switch to that version; if not, it will use the default version.
@@ -615,11 +628,14 @@ Put this into your `$HOME/.zshrc` to call `nvm use` automatically whenever you e
```zsh ```zsh
# place this after nvm initialization! # place this after nvm initialization!
autoload -U add-zsh-hook autoload -U add-zsh-hook
load-nvmrc() { load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)" local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")") local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install nvm install
@@ -631,6 +647,7 @@ load-nvmrc() {
nvm use default nvm use default
fi fi
} }
add-zsh-hook chpwd load-nvmrc add-zsh-hook chpwd load-nvmrc
load-nvmrc load-nvmrc
``` ```
@@ -794,13 +811,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
### Alpine Linux 3.13+ ### Alpine Linux 3.13+
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
``` ```
### Alpine Linux 3.5 - 3.12 ### Alpine Linux 3.5 - 3.12
```sh ```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
``` ```
_Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._ _Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._
@@ -899,10 +916,10 @@ You have to make sure that the user directory name in `$HOME` and the user direc
To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548) To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548)
[1]: https://github.com/nvm-sh/nvm.git [1]: https://github.com/nvm-sh/nvm.git
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.3/install.sh [2]: https://github.com/nvm-sh/nvm/blob/v0.39.5/install.sh
[3]: https://travis-ci.org/nvm-sh/nvm [3]: https://app.travis-ci.com/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.3 [4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.5
[Urchin]: https://github.com/scraperwiki/urchin [Urchin]: https://git.sdf.org/tlevine/urchin
[Fish]: https://fishshell.com [Fish]: https://fishshell.com
**Homebrew makes zsh directories unsecure** **Homebrew makes zsh directories unsecure**
@@ -986,7 +1003,7 @@ Now you should be able to use node as usual.
If you've encountered this error on WSL-2: If you've encountered this error on WSL-2:
```sh ```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
@@ -1007,7 +1024,7 @@ This could simply be solved by running this in your root directory:
sudo chattr +i /etc/resolv.conf sudo chattr +i /etc/resolv.conf
``` ```
This deletes your `resolve.conf` file thats automatically generated when u run WSL, creates a new file and puts `nameserver 8.8.8.8`, then creates a `wsl.conf` file and adds `[network]` and `generateResolveConf = false` to prevent auto generation of that file. This deletes your `resolv.conf` file thats automatically generated when u run WSL, creates a new file and puts `nameserver 8.8.8.8`, then creates a `wsl.conf` file and adds `[network]` and `generateResolveConf = false` to prevent auto generation of that file.
You can check the contents of the file by running: You can check the contents of the file by running:

View File

@@ -33,7 +33,7 @@ nvm_install_dir() {
} }
nvm_latest_version() { nvm_latest_version() {
nvm_echo "v0.39.3" nvm_echo "v0.39.5"
} }
nvm_profile_is_bash_or_zsh() { nvm_profile_is_bash_or_zsh() {

View File

@@ -2,6 +2,8 @@
DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
unset NVM_CD_FLAGS
# shellcheck disable=SC1090,SC1091 # shellcheck disable=SC1090,SC1091
\. "$DIR/nvm.sh" --no-use \. "$DIR/nvm.sh" --no-use

70
nvm.sh
View File

@@ -163,7 +163,11 @@ nvm_is_version_installed() {
nvm_print_npm_version() { nvm_print_npm_version() {
if nvm_has "npm"; then if nvm_has "npm"; then
command printf " (npm v$(npm --version 2>/dev/null))" local NPM_VERSION
NPM_VERSION="$(npm --version 2>/dev/null)"
if [ -n "${NPM_VERSION}" ]; then
command printf " (npm v${NPM_VERSION})"
fi
fi fi
} }
@@ -313,6 +317,21 @@ nvm_install_latest_npm() {
if [ $NVM_IS_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.0.0; then if [ $NVM_IS_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.0.0; then
NVM_IS_18_OR_ABOVE=1 NVM_IS_18_OR_ABOVE=1
fi fi
local NVM_IS_18_17_OR_ABOVE
NVM_IS_18_17_OR_ABOVE=0
if [ $NVM_IS_18_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.17.0; then
NVM_IS_18_17_OR_ABOVE=1
fi
local NVM_IS_19_OR_ABOVE
NVM_IS_19_OR_ABOVE=0
if [ $NVM_IS_18_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 19.0.0; then
NVM_IS_19_OR_ABOVE=1
fi
local NVM_IS_20_5_OR_ABOVE
NVM_IS_20_5_OR_ABOVE=0
if [ $NVM_IS_19_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 20.5.0; then
NVM_IS_20_5_OR_ABOVE=1
fi
if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || { if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || {
[ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}"; \ [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}"; \
@@ -353,6 +372,12 @@ nvm_install_latest_npm() {
; then ; then
nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`' nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
$NVM_NPM_CMD install -g npm@8 $NVM_NPM_CMD install -g npm@8
elif \
[ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \
|| { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ]; } \
; then
nvm_echo '* `npm` `v9.x` is the last version that works on `node` `< v18.17`, `v19`, or `v20.0` - `v20.4`'
$NVM_NPM_CMD install -g npm@9
else else
nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!' nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!'
$NVM_NPM_CMD install -g npm $NVM_NPM_CMD install -g npm
@@ -418,7 +443,7 @@ nvm_tree_contains_path() {
nvm_find_project_dir() { nvm_find_project_dir() {
local path_ local path_
path_="${PWD}" path_="${PWD}"
while [ "${path_}" != "" ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ]; do while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ]; do
path_=${path_%/*} path_=${path_%/*}
done done
nvm_echo "${path_}" nvm_echo "${path_}"
@@ -428,7 +453,7 @@ nvm_find_project_dir() {
nvm_find_up() { nvm_find_up() {
local path_ local path_
path_="${PWD}" path_="${PWD}"
while [ "${path_}" != "" ] && [ ! -f "${path_}/${1-}" ]; do while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ]; do
path_=${path_%/*} path_=${path_%/*}
done done
nvm_echo "${path_}" nvm_echo "${path_}"
@@ -798,7 +823,8 @@ nvm_strip_path() {
path = substr($0, length(NVM_DIR) + 1) path = substr($0, length(NVM_DIR) + 1)
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next } if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
} }
{ print }' | command paste -s -d: - # The final RT will contain a colon if the input has a trailing colon, or a null string otherwise
{ printf "%s%s", sep, $0; sep=RS } END { printf "%s", RT }'
} }
nvm_change_path() { nvm_change_path() {
@@ -1068,7 +1094,7 @@ nvm_list_aliases() {
( (
local ALIAS_NAME local ALIAS_NAME
for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable"; do for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do
{ {
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217) # shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
@@ -1077,11 +1103,6 @@ nvm_list_aliases() {
} & } &
done done
wait wait
ALIAS_NAME="$(nvm_iojs_prefix)"
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
fi
) | sort ) | sort
( (
@@ -1135,7 +1156,7 @@ nvm_ls_current() {
if [ "${VERSION}" = "v0.6.21-pre" ]; then if [ "${VERSION}" = "v0.6.21-pre" ]; then
nvm_echo 'v0.6.21' nvm_echo 'v0.6.21'
else else
nvm_echo "${VERSION}" nvm_echo "${VERSION:-none}"
fi fi
else else
nvm_echo 'system' nvm_echo 'system'
@@ -1376,9 +1397,10 @@ nvm_ls() {
if [ "${NVM_ADD_SYSTEM-}" = true ]; then if [ "${NVM_ADD_SYSTEM-}" = true ]; then
if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then
VERSIONS="${VERSIONS}$(command printf '\n%s' 'system')" VERSIONS="${VERSIONS}
system"
elif [ "${PATTERN}" = 'system' ]; then elif [ "${PATTERN}" = 'system' ]; then
VERSIONS="$(command printf '%s' 'system')" VERSIONS="system"
fi fi
fi fi
@@ -1642,7 +1664,7 @@ nvm_compare_checksum() {
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
nvm_err 'WARNING: Continuing *without checksum verification*' nvm_err 'WARNING: Continuing *without checksum verification*'
return return
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ]; then elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ] && [ "${COMPUTED_SUM}" != "\\${CHECKSUM}" ]; then
nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected." nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
return 1 return 1
fi fi
@@ -1889,6 +1911,7 @@ nvm_get_arch() {
local HOST_ARCH local HOST_ARCH
local NVM_OS local NVM_OS
local EXIT_CODE local EXIT_CODE
local LONG_BIT
NVM_OS="$(nvm_get_os)" NVM_OS="$(nvm_get_os)"
# If the OS is SunOS, first try to use pkgsrc to guess # If the OS is SunOS, first try to use pkgsrc to guess
@@ -1905,22 +1928,29 @@ nvm_get_arch() {
HOST_ARCH=ppc64 HOST_ARCH=ppc64
else else
HOST_ARCH="$(command uname -m)" HOST_ARCH="$(command uname -m)"
LONG_BIT="$(getconf LONG_BIT 2>/dev/null)"
fi fi
local NVM_ARCH local NVM_ARCH
case "${HOST_ARCH}" in case "${HOST_ARCH}" in
x86_64 | amd64) NVM_ARCH="x64" ;; x86_64 | amd64) NVM_ARCH="x64" ;;
i*86) NVM_ARCH="x86" ;; i*86) NVM_ARCH="x86" ;;
aarch64) NVM_ARCH="arm64" ;; aarch64 | armv8l) NVM_ARCH="arm64" ;;
*) NVM_ARCH="${HOST_ARCH}" ;; *) NVM_ARCH="${HOST_ARCH}" ;;
esac esac
# If running inside a 32Bit docker container the kernel still is 64bit
# change ARCH to 32bit if LONG_BIT is 32
if [ "_${LONG_BIT}" = "_32" ] && [ "${NVM_ARCH}" = "x64" ]; then
NVM_ARCH="x86"
fi
# If running a 64bit ARM kernel but a 32bit ARM userland, # If running a 64bit ARM kernel but a 32bit ARM userland,
# change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable # change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable
local L if [ "$(uname)" = "Linux" ] \
if [ "$(uname)" = "Linux" ] && [ "${NVM_ARCH}" = arm64 ] && && [ "${NVM_ARCH}" = arm64 ] \
L="$(command ls -dl /sbin/init 2>/dev/null)" && && [ "$(command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null)" = ' 01' ]\
[ "$(od -An -t x1 -j 4 -N 1 "${L#*-> }")" = ' 01' ]; then ; then
NVM_ARCH=armv7l NVM_ARCH=armv7l
HOST_ARCH=armv7l HOST_ARCH=armv7l
fi fi
@@ -4165,7 +4195,7 @@ nvm() {
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}" NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
;; ;;
"--version" | "-v") "--version" | "-v")
nvm_echo '0.39.3' nvm_echo '0.39.5'
;; ;;
"unload") "unload")
nvm deactivate >/dev/null 2>&1 nvm deactivate >/dev/null 2>&1

View File

@@ -1,6 +1,6 @@
{ {
"name": "nvm", "name": "nvm",
"version": "0.39.3", "version": "0.39.5",
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions", "description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
"directories": { "directories": {
"test": "test" "test": "test"
@@ -43,9 +43,9 @@
"dockerfile_lint": "^0.3.4", "dockerfile_lint": "^0.3.4",
"doctoc": "^2.2.1", "doctoc": "^2.2.1",
"eclint": "^2.8.1", "eclint": "^2.8.1",
"markdown-link-check": "^3.10.3", "markdown-link-check": "^3.11.2",
"replace": "^1.2.2", "replace": "^1.2.2",
"semver": "^7.3.8", "semver": "^7.5.4",
"urchin": "^0.0.5" "urchin": "^0.0.5"
} }
} }

View File

@@ -1,5 +1,7 @@
#!/bin/sh #!/bin/sh
export NVM_DIR="$(cd ../../.. && pwd)"
\. ../../../nvm.sh \. ../../../nvm.sh
\. ../../common.sh \. ../../common.sh

View File

@@ -1,5 +1,7 @@
#!/bin/zsh #!/bin/zsh
export NVM_DIR="$(cd ../../.. && pwd)"
\. ../../../nvm.sh \. ../../../nvm.sh
\. ../../common.sh \. ../../common.sh

View File

@@ -2,6 +2,8 @@
set -ex set -ex
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh \. ../../nvm.sh
nvm alias test v0.1.2 nvm alias test v0.1.2

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh \. ../../nvm.sh
nvm deactivate 2>&1 nvm deactivate 2>&1

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh \. ../../nvm.sh
\. ../common.sh \. ../common.sh

View File

@@ -7,6 +7,8 @@ cleanup () {
rm -rf "${NVM_DIR}/v0.10.4" rm -rf "${NVM_DIR}/v0.10.4"
} }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh \. ../../nvm.sh
\. ../common.sh \. ../common.sh

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; } die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh \. ../../nvm.sh
set +ex # needed for stderr set +ex # needed for stderr

View File

@@ -0,0 +1,55 @@
#!/bin/sh
cleanup () {
unset -f nvm_get_mirror
}
die () { echo "$@" ; cleanup ; exit 1; }
\. ../../../nvm.sh
# bad flavor
ACTUAL="$(nvm_download_artifact 2>&1)"
CODE="$(nvm_download_artifact >/dev/null 2>&1 ; echo $?)"
EXPECTED='supported flavors: node, iojs'
EXPECTED_CODE=1
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# bad kind
ACTUAL="$(nvm_download_artifact node 2>&1)"
CODE="$(nvm_download_artifact node >/dev/null 2>&1 ; echo $?)"
EXPECTED='supported kinds: binary, source'
EXPECTED_CODE=1
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# bad type
ACTUAL="$(nvm_download_artifact node binary nonexistentType 2>&1)"
CODE="$(nvm_download_artifact node binary nonexistentType >/dev/null 2>&1 ; echo $?)"
EXPECTED='unknown type of node.js or io.js release'
EXPECTED_CODE=2
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# no version
ACTUAL="$(nvm_download_artifact node binary std 2>&1)"
CODE="$(nvm_download_artifact node binary std >/dev/null 2>&1 ; echo $?)"
EXPECTED='A version number is required.'
EXPECTED_CODE=3
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# binary type, version without binary available
VERSION=0.8.5
ACTUAL="$(nvm_download_artifact node binary std ${VERSION} 2>&1)"
CODE="$(nvm_download_artifact node binary std ${VERSION} >/dev/null 2>&1 ; echo $?)"
EXPECTED="No precompiled binary available for ${VERSION}."
EXPECTED_CODE=0
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"

View File

@@ -31,3 +31,6 @@ ACTUAL="$(PWD=$TEST_DIR/no-nesting-n_m nvm_find_project_dir)"
ACTUAL="$(PWD=$TEST_DIR/no-nesting-pkg nvm_find_project_dir)" ACTUAL="$(PWD=$TEST_DIR/no-nesting-pkg nvm_find_project_dir)"
[ "${ACTUAL}" = "$TEST_DIR/no-nesting-pkg" ] || die "no-nesting-pkg: got ${ACTUAL}" [ "${ACTUAL}" = "$TEST_DIR/no-nesting-pkg" ] || die "no-nesting-pkg: got ${ACTUAL}"
ACTUAL="$(PWD="." nvm_find_project_dir)"
[ "${ACTUAL}" = "." ] || die "insufficient permissions for pwd: got ${ACTUAL}"

View File

@@ -21,5 +21,6 @@ TEST_DIR="$PWD"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 2 dirs up" [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 2 dirs up"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find in current dir" [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find in current dir"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c/d nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find 1 level up from current dir" [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c/d nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find 1 level up from current dir"
[ "~$(PWD="." nvm_find_up 'test')" = "~." ] || die "failed to handle '.' output from pwd"
cleanup cleanup

View File

@@ -80,5 +80,6 @@ run_test x86 osx x86
run_test amd64 osx x64 run_test amd64 osx x64
run_test arm64 smartos x64 run_test arm64 smartos x64
run_test armv8l smartos x64
cleanup cleanup

View File

@@ -16,3 +16,9 @@ TEST_PATH="$NVM_DIR/v0.10.5/bin:/usr/bin:$NVM_DIR/v0.11.5/bin:$NVM_DIR/v0.9.5/bi
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"` STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
[ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH " [ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH "
TEST_PATH=":/a/b/bin::/c/d/bin:"
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
[ "$STRIPPED_PATH" = "$TEST_PATH" ] || die "Stripping does not preserve colons: $STRIPPED_PATH "

View File

@@ -32,15 +32,17 @@ setup
npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package' npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package'
message=$(nvm_check_global_modules) message=$(nvm_check_global_modules)
[ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed" [ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed; got:\n${message}"
# Admit we're using NVM, just for this one test if [ -n "${ORIGINAL_NVM_DIR}" ]; then
message=$(NVM_DIR=$ORIGINAL_NVM_DIR nvm_check_global_modules) # Admit we're using NVM, just for this one test
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm" message=$(NVM_DIR="${ORIGINAL_NVM_DIR}" nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm; got:\n${message}"
fi
npm uninstall -g nop >/dev/null npm uninstall -g nop >/dev/null
message=$(nvm_check_global_modules) message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed" [ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed; got:\n${message}"
# Faking an installation of npm # Faking an installation of npm
mkdir -p "$npm_config_prefix/lib/node_modules/npm" mkdir -p "$npm_config_prefix/lib/node_modules/npm"
@@ -49,7 +51,7 @@ cat <<'JSON' >"$npm_config_prefix/lib/node_modules/npm/package.json"
JSON JSON
message=$(nvm_check_global_modules) message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module" [ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module; got:\n${message}"
# Faking the absence of npm # Faking the absence of npm
PATH=".:$PATH" PATH=".:$PATH"
@@ -57,7 +59,7 @@ touch npm
chmod +x npm chmod +x npm
message=$(nvm_check_global_modules) message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable" [ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable; got:\n${message}"
cleanup cleanup

View File

@@ -6,3 +6,13 @@ NVM_ENV=testing \. ../../install.sh
#nvm_do_install is available #nvm_do_install is available
type nvm_do_install > /dev/null 2>&1 || die 'nvm_do_install is not available' type nvm_do_install > /dev/null 2>&1 || die 'nvm_do_install is not available'
FILE_PATH="$(pwd)/nvm_do_install"
echo $FILE_PATH
$(NVM_DIR="${FILE_PATH}" nvm_do_install >/dev/null 2>&1)
EXIT_CODE=$(echo $?)
[ "${EXIT_CODE}" = '1' ] || die "nvm_do_install should fail if NVM_DIR is a file: expected 1, got <${EXIT_CODE}>"
ACTUAL="$(NVM_DIR="${FILE_PATH}" nvm_do_install 2>&1)"
EXPECTED="File \"${FILE_PATH}\" has the same name as installation directory."
[ "${ACTUAL}" = "${EXPECTED}" ] || die "got <${ACTUAL}>, expected <${EXPECTED}>"

5
test/mocks/uname_linux_armv8l Executable file
View File

@@ -0,0 +1,5 @@
if [ "_$1" = "_-m" ]; then
echo "armv8l"
else
echo "Linux 3.18.14-14721103 #1 SMP PREEMPT Thu Mar 5 20:35:37 KST 2020 armv8l armv8l armv8l GNU/Linux"
fi