Compare commits

..

27 Commits

Author SHA1 Message Date
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
24 changed files with 218 additions and 51 deletions

View File

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

View File

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

@@ -22,7 +22,10 @@ before_install:
- bash --version | head
- zsh --version
- 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:
- 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'
@@ -70,7 +73,6 @@ env:
- PATH="/usr/lib/ccache/:$PATH"
- NVM_DIR="${TRAVIS_BUILD_DIR}"
matrix:
- SHELL=bash TEST_SUITE=install_script
- SHELL=sh TEST_SUITE=fast
- SHELL=dash TEST_SUITE=fast
- SHELL=bash TEST_SUITE=fast

View File

@@ -74,8 +74,6 @@ Verify your changes
```
npm test
# or
npm run tests-only
```
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
# 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 name="nvm-dev-env"
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.4-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` -->
<!-- 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:
```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.4/install.sh | bash
```
```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.4/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`).
@@ -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.
- 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.4/install.sh | bash'`
#### 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.
@@ -166,7 +174,7 @@ You can use a task:
```yaml
- name: Install nvm
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.4/install.sh | bash
args:
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
- `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.4`
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:
@@ -548,6 +556,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 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.
#### bash
@@ -599,8 +609,9 @@ cdnvm() {
fi
fi
}
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.
@@ -615,11 +626,14 @@ Put this into your `$HOME/.zshrc` to call `nvm use` automatically whenever you e
```zsh
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
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
nvm install
@@ -631,6 +645,7 @@ load-nvmrc() {
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
```
@@ -794,13 +809,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
### Alpine Linux 3.13+
```sh
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.4/install.sh | bash
```
### Alpine Linux 3.5 - 3.12
```sh
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.4/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._
@@ -899,10 +914,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)
[1]: https://github.com/nvm-sh/nvm.git
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.3/install.sh
[3]: https://travis-ci.org/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.3
[Urchin]: https://github.com/scraperwiki/urchin
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.4/install.sh
[3]: https://app.travis-ci.com/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.4
[Urchin]: https://git.sdf.org/tlevine/urchin
[Fish]: https://fishshell.com
**Homebrew makes zsh directories unsecure**
@@ -986,7 +1001,7 @@ Now you should be able to use node as usual.
If you've encountered this error on WSL-2:
```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.4/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
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
@@ -1007,7 +1022,7 @@ This could simply be solved by running this in your root directory:
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:

View File

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

View File

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

44
nvm.sh
View File

@@ -163,7 +163,11 @@ nvm_is_version_installed() {
nvm_print_npm_version() {
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
}
@@ -418,7 +422,7 @@ nvm_tree_contains_path() {
nvm_find_project_dir() {
local path_
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_%/*}
done
nvm_echo "${path_}"
@@ -428,7 +432,7 @@ nvm_find_project_dir() {
nvm_find_up() {
local path_
path_="${PWD}"
while [ "${path_}" != "" ] && [ ! -f "${path_}/${1-}" ]; do
while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ]; do
path_=${path_%/*}
done
nvm_echo "${path_}"
@@ -1068,7 +1072,7 @@ nvm_list_aliases() {
(
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)
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
@@ -1077,11 +1081,6 @@ nvm_list_aliases() {
} &
done
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
(
@@ -1135,7 +1134,7 @@ nvm_ls_current() {
if [ "${VERSION}" = "v0.6.21-pre" ]; then
nvm_echo 'v0.6.21'
else
nvm_echo "${VERSION}"
nvm_echo "${VERSION:-none}"
fi
else
nvm_echo 'system'
@@ -1376,9 +1375,10 @@ nvm_ls() {
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then
VERSIONS="${VERSIONS}$(command printf '\n%s' 'system')"
VERSIONS="${VERSIONS}
system"
elif [ "${PATTERN}" = 'system' ]; then
VERSIONS="$(command printf '%s' 'system')"
VERSIONS="system"
fi
fi
@@ -1889,6 +1889,7 @@ nvm_get_arch() {
local HOST_ARCH
local NVM_OS
local EXIT_CODE
local LONG_BIT
NVM_OS="$(nvm_get_os)"
# If the OS is SunOS, first try to use pkgsrc to guess
@@ -1905,22 +1906,29 @@ nvm_get_arch() {
HOST_ARCH=ppc64
else
HOST_ARCH="$(command uname -m)"
LONG_BIT="$(getconf LONG_BIT 2>/dev/null)"
fi
local NVM_ARCH
case "${HOST_ARCH}" in
x86_64 | amd64) NVM_ARCH="x64" ;;
i*86) NVM_ARCH="x86" ;;
aarch64) NVM_ARCH="arm64" ;;
aarch64 | armv8l) NVM_ARCH="arm64" ;;
*) NVM_ARCH="${HOST_ARCH}" ;;
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,
# change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable
local L
if [ "$(uname)" = "Linux" ] && [ "${NVM_ARCH}" = arm64 ] &&
L="$(command ls -dl /sbin/init 2>/dev/null)" &&
[ "$(od -An -t x1 -j 4 -N 1 "${L#*-> }")" = ' 01' ]; then
if [ "$(uname)" = "Linux" ] \
&& [ "${NVM_ARCH}" = arm64 ] \
&& [ "$(command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null)" = ' 01' ]\
; then
NVM_ARCH=armv7l
HOST_ARCH=armv7l
fi
@@ -4165,7 +4173,7 @@ nvm() {
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
;;
"--version" | "-v")
nvm_echo '0.39.3'
nvm_echo '0.39.4'
;;
"unload")
nvm deactivate >/dev/null 2>&1

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
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}" = "$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/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="." nvm_find_up 'test')" = "~." ] || die "failed to handle '.' output from pwd"
cleanup

View File

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

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'
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}"
if [ -n "${ORIGINAL_NVM_DIR}" ]; then
# Admit we're using NVM, just for this one test
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"
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
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
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
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
PATH=".:$PATH"
@@ -57,7 +59,7 @@ touch npm
chmod +x npm
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

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