Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c92adb3c47 | ||
|
|
15eba7b7e6 | ||
|
|
a1601eddb8 | ||
|
|
324b81a722 | ||
|
|
55075db96d | ||
|
|
4618ce0aa1 | ||
|
|
3afdce0a2c | ||
|
|
8fbf8ab694 | ||
|
|
4fc91d408c | ||
|
|
f86847fdd2 | ||
|
|
9a769630d7 | ||
|
|
c26422a03e | ||
|
|
7c3cd81ad9 | ||
|
|
0ebda7eea3 | ||
|
|
5410ae57ba | ||
|
|
70aa611abc | ||
|
|
c08b38a2a4 | ||
|
|
a07cd41af1 | ||
|
|
d1a22a63bd | ||
|
|
0d9b5c2a00 | ||
|
|
44e1d9c911 | ||
|
|
b1331c20b0 | ||
|
|
766341fca1 | ||
|
|
946da2e743 | ||
|
|
dde04f9392 | ||
|
|
ffcb5213e2 | ||
|
|
ea3b65f02e | ||
|
|
ee6f766712 | ||
|
|
edacf8275e | ||
|
|
f36516b472 | ||
|
|
dc691121b8 | ||
|
|
ce35311657 | ||
|
|
fe06825a96 | ||
|
|
a60ac08a80 |
1
.github/workflows/latest-npm.yml
vendored
1
.github/workflows/latest-npm.yml
vendored
@@ -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
|
||||
|
||||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@@ -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
56
.github/workflows/tests.yml
vendored
Normal 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'
|
||||
1
.github/workflows/windows-npm.yml
vendored
1
.github/workflows/windows-npm.yml
vendored
@@ -125,6 +125,7 @@ jobs:
|
||||
nvm install ${{ matrix.npm-node-version }}
|
||||
|
||||
nvm_windows:
|
||||
name: 'tests, on windows'
|
||||
permissions:
|
||||
contents: none
|
||||
needs: [wsl_matrix, cygwin_matrix, msys_matrix, msys_fail_install]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -74,8 +74,6 @@ Verify your changes
|
||||
|
||||
```
|
||||
npm test
|
||||
# or
|
||||
npm run tests-only
|
||||
```
|
||||
|
||||
Push your changes
|
||||
|
||||
@@ -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"
|
||||
|
||||
53
README.md
53
README.md
@@ -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 [][3] [][4] [](https://bestpractices.coreinfrastructure.org/projects/684)
|
||||
|
||||
# Node Version Manager [][3] [][4] [](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.5/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.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`).
|
||||
@@ -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.5/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.5/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.5`
|
||||
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:
|
||||
@@ -491,7 +499,9 @@ nvm deactivate
|
||||
To set a default Node version to be used in any new shell, use the alias 'default':
|
||||
|
||||
```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
|
||||
@@ -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 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 +611,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 +628,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 +647,7 @@ load-nvmrc() {
|
||||
nvm use default
|
||||
fi
|
||||
}
|
||||
|
||||
add-zsh-hook chpwd 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+
|
||||
```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.5/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.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._
|
||||
@@ -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)
|
||||
|
||||
[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.5/install.sh
|
||||
[3]: https://app.travis-ci.com/nvm-sh/nvm
|
||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.5
|
||||
[Urchin]: https://git.sdf.org/tlevine/urchin
|
||||
[Fish]: https://fishshell.com
|
||||
|
||||
**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:
|
||||
|
||||
```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
|
||||
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 +1024,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:
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ nvm_install_dir() {
|
||||
}
|
||||
|
||||
nvm_latest_version() {
|
||||
nvm_echo "v0.39.3"
|
||||
nvm_echo "v0.39.5"
|
||||
}
|
||||
|
||||
nvm_profile_is_bash_or_zsh() {
|
||||
|
||||
2
nvm-exec
2
nvm-exec
@@ -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
|
||||
|
||||
|
||||
70
nvm.sh
70
nvm.sh
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
NVM_IS_18_OR_ABOVE=1
|
||||
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 ] || {
|
||||
[ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}"; \
|
||||
@@ -353,6 +372,12 @@ nvm_install_latest_npm() {
|
||||
; 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_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
|
||||
nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!'
|
||||
$NVM_NPM_CMD install -g npm
|
||||
@@ -418,7 +443,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 +453,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_}"
|
||||
@@ -798,7 +823,8 @@ nvm_strip_path() {
|
||||
path = substr($0, length(NVM_DIR) + 1)
|
||||
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() {
|
||||
@@ -1068,7 +1094,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 +1103,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 +1156,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 +1397,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
|
||||
|
||||
@@ -1642,7 +1664,7 @@ nvm_compare_checksum() {
|
||||
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
|
||||
nvm_err 'WARNING: Continuing *without checksum verification*'
|
||||
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."
|
||||
return 1
|
||||
fi
|
||||
@@ -1889,6 +1911,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 +1928,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 +4195,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.5'
|
||||
;;
|
||||
"unload")
|
||||
nvm deactivate >/dev/null 2>&1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nvm",
|
||||
"version": "0.39.3",
|
||||
"version": "0.39.5",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/zsh
|
||||
|
||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
set -ex
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
nvm alias test v0.1.2
|
||||
|
||||
@@ -4,6 +4,8 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
nvm deactivate 2>&1
|
||||
|
||||
@@ -4,6 +4,8 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ cleanup () {
|
||||
rm -rf "${NVM_DIR}/v0.10.4"
|
||||
}
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
set +ex # needed for stderr
|
||||
|
||||
55
test/fast/Unit tests/nvm_download_artifact
Executable file
55
test/fast/Unit tests/nvm_download_artifact
Executable 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}"
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" = "/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 "
|
||||
|
||||
@@ -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}"
|
||||
|
||||
# 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"
|
||||
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; 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
|
||||
|
||||
@@ -6,3 +6,13 @@ NVM_ENV=testing \. ../../install.sh
|
||||
|
||||
#nvm_do_install is 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
5
test/mocks/uname_linux_armv8l
Executable 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
|
||||
Reference in New Issue
Block a user