Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2f0b5b57c | ||
|
|
207465dd36 | ||
|
|
c30ed0b1d3 | ||
|
|
0e74b147d6 | ||
|
|
c20db2ab86 | ||
|
|
29dce5edfd | ||
|
|
95081f0bc2 | ||
|
|
1750b8d327 | ||
|
|
97093dc1b3 | ||
|
|
811c039e2b | ||
|
|
294ff9e3aa | ||
|
|
c24c3134a7 | ||
|
|
c82e7a6f62 | ||
|
|
4e2a71ba9b | ||
|
|
6c9cd2f2d1 | ||
|
|
bab86d5de5 | ||
|
|
d86f270438 |
@@ -26,3 +26,10 @@ insert_final_newline = off
|
|||||||
|
|
||||||
[Makefile]
|
[Makefile]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
|
|
||||||
|
[test/fixtures/nvmrc/**]
|
||||||
|
indent_style = off
|
||||||
|
insert_final_newline = off
|
||||||
|
|
||||||
|
[test/fixtures/actual/alias/empty]
|
||||||
|
insert_final_newline = off
|
||||||
|
|||||||
2
.github/THREAT_MODEL.md
vendored
2
.github/THREAT_MODEL.md
vendored
@@ -11,7 +11,7 @@ The aim of this section is to facilitate the identification of potential securit
|
|||||||
|
|
||||||
The following assets are considered important for the `nvm` project:
|
The following assets are considered important for the `nvm` project:
|
||||||
- `nvm` source code and project documentation
|
- `nvm` source code and project documentation
|
||||||
- Underlying `nvm`` dependencies
|
- Underlying `nvm` dependencies
|
||||||
- `nvm` development infrastructure
|
- `nvm` development infrastructure
|
||||||
- `nvm` installed devices including servers
|
- `nvm` installed devices including servers
|
||||||
|
|
||||||
|
|||||||
16
.github/workflows/latest-npm.yml
vendored
16
.github/workflows/latest-npm.yml
vendored
@@ -2,6 +2,9 @@ name: 'Tests: `nvm install-latest-npm`'
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
matrix:
|
matrix:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -9,11 +12,12 @@ jobs:
|
|||||||
latest: ${{ steps.set-matrix.outputs.requireds }}
|
latest: ${{ steps.set-matrix.outputs.requireds }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
iojs.org:443
|
iojs.org:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
|
raw.githubusercontent.com:443
|
||||||
- uses: ljharb/actions/node/matrix@main
|
- uses: ljharb/actions/node/matrix@main
|
||||||
id: set-matrix
|
id: set-matrix
|
||||||
with:
|
with:
|
||||||
@@ -46,7 +50,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
@@ -54,7 +58,7 @@ jobs:
|
|||||||
iojs.org:443
|
iojs.org:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'install node'
|
name: 'install node'
|
||||||
with:
|
with:
|
||||||
@@ -74,8 +78,4 @@ jobs:
|
|||||||
needs: [nodes]
|
needs: [nodes]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- run: true
|
||||||
uses: step-security/harden-runner@v1
|
|
||||||
with:
|
|
||||||
egress-policy: block
|
|
||||||
- run: 'echo tests completed'
|
|
||||||
|
|||||||
27
.github/workflows/lint.yml
vendored
27
.github/workflows/lint.yml
vendored
@@ -2,20 +2,21 @@ name: 'Tests: linting'
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
jobs:
|
|
||||||
eclint:
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
eclint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: step-security/harden-runner@v1
|
- uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
raw.githubusercontent.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@v4
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -23,11 +24,9 @@ jobs:
|
|||||||
- run: npm run eclint
|
- run: npm run eclint
|
||||||
|
|
||||||
dockerfile_lint:
|
dockerfile_lint:
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: step-security/harden-runner@v1
|
- uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
ghcr.io:443
|
ghcr.io:443
|
||||||
@@ -36,7 +35,7 @@ jobs:
|
|||||||
pkg-containers.githubusercontent.com:443
|
pkg-containers.githubusercontent.com:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -44,18 +43,16 @@ jobs:
|
|||||||
- run: npm run dockerfile_lint
|
- run: npm run dockerfile_lint
|
||||||
|
|
||||||
doctoc:
|
doctoc:
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: step-security/harden-runner@v1
|
- uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
raw.githubusercontent.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@v4
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -63,15 +60,13 @@ jobs:
|
|||||||
- run: npm run doctoc:check
|
- run: npm run doctoc:check
|
||||||
|
|
||||||
test_naming:
|
test_naming:
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: step-security/harden-runner@v1
|
- uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: check tests filenames
|
- name: check tests filenames
|
||||||
run: ./rename_test.sh --check
|
run: ./rename_test.sh --check
|
||||||
|
|||||||
7
.github/workflows/rebase.yml
vendored
7
.github/workflows/rebase.yml
vendored
@@ -2,6 +2,9 @@ name: Automatic Rebase
|
|||||||
|
|
||||||
on: [pull_request_target]
|
on: [pull_request_target]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
_:
|
_:
|
||||||
permissions:
|
permissions:
|
||||||
@@ -12,12 +15,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
api.github.com:443
|
api.github.com:443
|
||||||
github.com:443
|
github.com:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: ljharb/rebase@master
|
- uses: ljharb/rebase@master
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
14
.github/workflows/release.yml
vendored
14
.github/workflows/release.yml
vendored
@@ -2,20 +2,24 @@ name: 'Tests: release process'
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
|
api.github.com:443
|
||||||
|
objects.githubusercontent.com:443
|
||||||
|
raw.githubusercontent.com:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "14"
|
||||||
- run: npm install
|
- run: npm install
|
||||||
|
|||||||
5
.github/workflows/require-allow-edits.yml
vendored
5
.github/workflows/require-allow-edits.yml
vendored
@@ -2,6 +2,9 @@ name: Require “Allow Edits”
|
|||||||
|
|
||||||
on: [pull_request_target]
|
on: [pull_request_target]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
_:
|
_:
|
||||||
permissions:
|
permissions:
|
||||||
@@ -12,7 +15,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
api.github.com:443
|
api.github.com:443
|
||||||
|
|||||||
16
.github/workflows/shellcheck.yml
vendored
16
.github/workflows/shellcheck.yml
vendored
@@ -2,10 +2,11 @@ name: 'Tests: shellcheck'
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
jobs:
|
|
||||||
shellcheck_matrix:
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
shellcheck_matrix:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -27,13 +28,14 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
ghcr.io:443
|
ghcr.io:443
|
||||||
github.com:443
|
github.com:443
|
||||||
pkg-containers.githubusercontent.com:443
|
pkg-containers.githubusercontent.com:443
|
||||||
- uses: actions/checkout@v3
|
formulae.brew.sh:443
|
||||||
|
- uses: actions/checkout@v4
|
||||||
- name: Set up Homebrew
|
- name: Set up Homebrew
|
||||||
uses: Homebrew/actions/setup-homebrew@master
|
uses: Homebrew/actions/setup-homebrew@master
|
||||||
- name: Install latest shellcheck
|
- name: Install latest shellcheck
|
||||||
@@ -51,8 +53,4 @@ jobs:
|
|||||||
needs: [shellcheck_matrix]
|
needs: [shellcheck_matrix]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- run: true
|
||||||
uses: step-security/harden-runner@v1
|
|
||||||
with:
|
|
||||||
egress-policy: block
|
|
||||||
- run: 'echo tests completed'
|
|
||||||
|
|||||||
11
.github/workflows/tests.yml
vendored
11
.github/workflows/tests.yml
vendored
@@ -2,6 +2,9 @@ name: urchin tests
|
|||||||
|
|
||||||
on: [push]
|
on: [push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
permissions:
|
permissions:
|
||||||
@@ -26,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
@@ -34,7 +37,7 @@ jobs:
|
|||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
iojs.org:443
|
iojs.org:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
|
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
|
||||||
- run: curl --version
|
- run: curl --version
|
||||||
- run: wget --version
|
- run: wget --version
|
||||||
@@ -49,8 +52,10 @@ jobs:
|
|||||||
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
|
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
|
||||||
|
|
||||||
nvm:
|
nvm:
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
name: 'all test suites, all shells'
|
name: 'all test suites, all shells'
|
||||||
needs: [tests]
|
needs: [tests]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: 'echo tests completed'
|
- run: true
|
||||||
|
|||||||
9
.github/workflows/toc.yml
vendored
9
.github/workflows/toc.yml
vendored
@@ -2,6 +2,9 @@ name: update readme TOC
|
|||||||
|
|
||||||
on: [push]
|
on: [push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
_:
|
_:
|
||||||
permissions:
|
permissions:
|
||||||
@@ -12,12 +15,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@v1
|
uses: step-security/harden-runner@v2
|
||||||
with:
|
with:
|
||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# https://github.com/actions/checkout/issues/217#issue-599945005
|
# https://github.com/actions/checkout/issues/217#issue-599945005
|
||||||
# pulls all commits (needed for lerna / semantic release to correctly version)
|
# pulls all commits (needed for lerna / semantic release to correctly version)
|
||||||
@@ -25,7 +28,7 @@ jobs:
|
|||||||
|
|
||||||
# pulls all tags (needed for lerna / semantic release to correctly version)
|
# pulls all tags (needed for lerna / semantic release to correctly version)
|
||||||
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '16'
|
node-version: '16'
|
||||||
- run: npm install
|
- run: npm install
|
||||||
|
|||||||
9
.github/workflows/windows-npm.yml
vendored
9
.github/workflows/windows-npm.yml
vendored
@@ -2,6 +2,9 @@ name: 'Tests on Windows: `nvm install`'
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NVM_INSTALL_GITHUB_REPO: ${{ github.repository }}
|
NVM_INSTALL_GITHUB_REPO: ${{ github.repository }}
|
||||||
NVM_INSTALL_VERSION: ${{ github.sha }}
|
NVM_INSTALL_VERSION: ${{ github.sha }}
|
||||||
@@ -123,7 +126,7 @@ jobs:
|
|||||||
- ''
|
- ''
|
||||||
- 'script'
|
- 'script'
|
||||||
steps:
|
steps:
|
||||||
- uses: Vampire/setup-wsl@v2
|
- uses: Vampire/setup-wsl@v3
|
||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.wsl-distrib }}
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
additional-packages: bash git curl ca-certificates wget
|
additional-packages: bash git curl ca-certificates wget
|
||||||
@@ -166,7 +169,7 @@ jobs:
|
|||||||
- ''
|
- ''
|
||||||
- 'script'
|
- 'script'
|
||||||
steps:
|
steps:
|
||||||
- uses: Vampire/setup-wsl@v2
|
- uses: Vampire/setup-wsl@v3
|
||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.wsl-distrib }}
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
additional-packages: bash git curl ca-certificates wget
|
additional-packages: bash git curl ca-certificates wget
|
||||||
@@ -187,4 +190,4 @@ jobs:
|
|||||||
needs: [wsl_matrix, wsl_matrix_unofficial, cygwin_matrix, msys_matrix, msys_fail_install]
|
needs: [wsl_matrix, wsl_matrix_unofficial, cygwin_matrix, msys_matrix, msys_fail_install]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: 'echo tests completed'
|
- run: true
|
||||||
|
|||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "test/fixtures/nvmrc"]
|
||||||
|
path = test/fixtures/nvmrc
|
||||||
|
url = git@github.com:nvm-sh/nvmrc.git
|
||||||
@@ -8,6 +8,10 @@ addons:
|
|||||||
# - gcc-4.8
|
# - gcc-4.8
|
||||||
# - g++-4.8
|
# - g++-4.8
|
||||||
|
|
||||||
|
# https://gist.github.com/iedemam/9830045
|
||||||
|
git:
|
||||||
|
submodules: false
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
ccache: true
|
ccache: true
|
||||||
directories:
|
directories:
|
||||||
@@ -16,6 +20,11 @@ cache:
|
|||||||
before_install:
|
before_install:
|
||||||
- sudo sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
|
- sudo sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
|
||||||
- sudo update-ca-certificates -f
|
- sudo update-ca-certificates -f
|
||||||
|
|
||||||
|
# https://gist.github.com/iedemam/9830045
|
||||||
|
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
|
||||||
|
- git submodule update --init --recursive
|
||||||
|
|
||||||
- $SHELL --version 2> /dev/null || dpkg -s $SHELL 2> /dev/null || which $SHELL
|
- $SHELL --version 2> /dev/null || dpkg -s $SHELL 2> /dev/null || which $SHELL
|
||||||
- curl --version
|
- curl --version
|
||||||
- wget --version
|
- wget --version
|
||||||
|
|||||||
45
README.md
45
README.md
@@ -6,7 +6,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
# Node Version Manager [][3] [][4] [](https://bestpractices.coreinfrastructure.org/projects/684)
|
# Node Version Manager [][3] [][4] [](https://bestpractices.dev/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 -->
|
||||||
@@ -99,10 +99,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.6/install.sh | bash
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
||||||
```
|
```
|
||||||
```sh
|
```sh
|
||||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.6/install.sh | bash
|
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/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`).
|
||||||
@@ -124,7 +124,7 @@ 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.6/install.sh | bash'`
|
- 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.7/install.sh | bash'`
|
||||||
|
|
||||||
#### Troubleshooting on Linux
|
#### Troubleshooting on Linux
|
||||||
|
|
||||||
@@ -172,7 +172,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.6/install.sh | bash
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
||||||
args:
|
args:
|
||||||
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
|
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
|
||||||
```
|
```
|
||||||
@@ -234,7 +234,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.6`
|
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.7`
|
||||||
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:
|
||||||
@@ -298,6 +298,13 @@ To install a specific version of node:
|
|||||||
nvm install 14.7.0 # or 16.3.0, 12.22.1, etc
|
nvm install 14.7.0 # or 16.3.0, 12.22.1, etc
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To set an alias:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
nvm alias my_alias v14.4.0
|
||||||
|
```
|
||||||
|
Make sure that your alias does not contain any spaces or slashes.
|
||||||
|
|
||||||
The first version installed becomes the default. New shells will start with the default version of node (e.g., `nvm alias default`).
|
The first version installed becomes the default. New shells will start with the default version of node (e.g., `nvm alias default`).
|
||||||
|
|
||||||
You can list available versions using `ls-remote`:
|
You can list available versions using `ls-remote`:
|
||||||
@@ -563,7 +570,11 @@ Now using node v5.9.1 (npm v3.7.3)
|
|||||||
|
|
||||||
`nvm use` et. al. will traverse directory structure upwards from the current directory looking for the `.nvmrc` file. In other words, running `nvm use` et. al. in any subdirectory of a directory with an `.nvmrc` will result in that `.nvmrc` being utilized.
|
`nvm use` et. al. will traverse directory structure upwards from the current directory looking for the `.nvmrc` file. In other words, running `nvm use` et. al. in any subdirectory of a directory with an `.nvmrc` will result in that `.nvmrc` being utilized.
|
||||||
|
|
||||||
The contents of a `.nvmrc` file **must** be the `<version>` (as described by `nvm --help`) followed by a newline. No trailing spaces are allowed, and the trailing newline is required.
|
The contents of a `.nvmrc` file **must** contain precisely one `<version>` (as described by `nvm --help`) followed by a newline. `.nvmrc` files may also have comments. The comment delimiter is `#`, and it and any text after it, as well as blank lines, and leading and trailing white space, will be ignored when parsing.
|
||||||
|
|
||||||
|
Key/value pairs using `=` are also allowed and ignored, but are reserved for future use, and may cause validation errors in the future.
|
||||||
|
|
||||||
|
Run [`npx nvmrc`](https://npmjs.com/nvmrc) to validate an `.nvmrc` file. If that tool’s results do not agree with nvm, one or the other has a bug - please file an issue.
|
||||||
|
|
||||||
### Deeper Shell Integration
|
### Deeper Shell Integration
|
||||||
|
|
||||||
@@ -822,13 +833,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.6/install.sh | bash
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/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.6/install.sh | bash
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/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._
|
||||||
@@ -844,8 +855,12 @@ As a potential alternative, @mhart (a Node contributor) has some [Docker images
|
|||||||
|
|
||||||
To remove `nvm` manually, execute the following:
|
To remove `nvm` manually, execute the following:
|
||||||
|
|
||||||
|
First, use `nvm unload` to remove the nvm command from your terminal session and delete the installation directory:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ rm -rf "$NVM_DIR"
|
$ nvm_dir="${NVM_DIR:-~/.nvm}"
|
||||||
|
$ nvm unload
|
||||||
|
$ rm -rf "$nvm_dir"
|
||||||
```
|
```
|
||||||
|
|
||||||
Edit `~/.bashrc` (or other shell resource config) and remove the lines below:
|
Edit `~/.bashrc` (or other shell resource config) and remove the lines below:
|
||||||
@@ -927,9 +942,9 @@ 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.6/install.sh
|
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.7/install.sh
|
||||||
[3]: https://app.travis-ci.com/nvm-sh/nvm
|
[3]: https://app.travis-ci.com/nvm-sh/nvm
|
||||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.6
|
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.7
|
||||||
[Urchin]: https://git.sdf.org/tlevine/urchin
|
[Urchin]: https://git.sdf.org/tlevine/urchin
|
||||||
[Fish]: https://fishshell.com
|
[Fish]: https://fishshell.com
|
||||||
|
|
||||||
@@ -987,7 +1002,7 @@ Here's what you will need to do:
|
|||||||
If one of these broken versions is installed on your system, the above step will likely still succeed even if you didn't include the `--shared-zlib` flag.
|
If one of these broken versions is installed on your system, the above step will likely still succeed even if you didn't include the `--shared-zlib` flag.
|
||||||
However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors.
|
However, later, when you attempt to `npm install` something using your old version of node.js, you will see `incorrect data check` errors.
|
||||||
If you want to avoid the possible hassle of dealing with this, include that flag.
|
If you want to avoid the possible hassle of dealing with this, include that flag.
|
||||||
For more details, see [this issue](https://github.com/nodejs/node/issues/39313) and [this comment](https://github.com/nodejs/node/issues/39313#issuecomment-90.39.676)
|
For more details, see [this issue](https://github.com/nodejs/node/issues/39313) and [this comment](https://github.com/nodejs/node/issues/39313#issuecomment-90.39.776)
|
||||||
|
|
||||||
- Exit back to your native shell.
|
- Exit back to your native shell.
|
||||||
|
|
||||||
@@ -1014,7 +1029,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.6/install.sh | bash
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/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
|
||||||
@@ -1035,7 +1050,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 `resolv.conf` file that is 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 that is automatically generated when you 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:
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ nvm_install_dir() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
nvm_latest_version() {
|
nvm_latest_version() {
|
||||||
nvm_echo "v0.39.6"
|
nvm_echo "v0.39.7"
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_profile_is_bash_or_zsh() {
|
nvm_profile_is_bash_or_zsh() {
|
||||||
|
|||||||
101
nvm.sh
101
nvm.sh
@@ -467,7 +467,89 @@ nvm_find_nvmrc() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Obtain nvm version from rc file
|
nvm_nvmrc_invalid_msg() {
|
||||||
|
local error_text
|
||||||
|
error_text="invalid .nvmrc!
|
||||||
|
all non-commented content (anything after # is a comment) must be either:
|
||||||
|
- a single bare nvm-recognized version-ish
|
||||||
|
- or, multiple distinct key-value pairs, each key/value separated by a single equals sign (=)
|
||||||
|
|
||||||
|
additionally, a single bare nvm-recognized version-ish must be present (after stripping comments)."
|
||||||
|
|
||||||
|
local warn_text
|
||||||
|
warn_text="non-commented content parsed:
|
||||||
|
${1}"
|
||||||
|
|
||||||
|
nvm_err "$(nvm_wrap_with_color_code r "${error_text}")
|
||||||
|
|
||||||
|
$(nvm_wrap_with_color_code y "${warn_text}")"
|
||||||
|
}
|
||||||
|
|
||||||
|
nvm_process_nvmrc() {
|
||||||
|
local NVMRC_PATH="$1"
|
||||||
|
local lines
|
||||||
|
local unpaired_line
|
||||||
|
|
||||||
|
lines=$(command sed 's/#.*//' "$NVMRC_PATH" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | nvm_grep -v '^$')
|
||||||
|
|
||||||
|
if [ -z "$lines" ]; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize key-value storage
|
||||||
|
local keys=''
|
||||||
|
local values=''
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [ -z "${line}" ]; then
|
||||||
|
continue
|
||||||
|
elif [ -z "${line%%=*}" ]; then
|
||||||
|
if [ -n "${unpaired_line}" ]; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
unpaired_line="${line}"
|
||||||
|
elif case "$line" in *'='*) true;; *) false;; esac; then
|
||||||
|
key="${line%%=*}"
|
||||||
|
value="${line#*=}"
|
||||||
|
|
||||||
|
# Trim whitespace around key and value
|
||||||
|
key=$(nvm_echo "${key}" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
|
value=$(nvm_echo "${value}" | command sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
|
|
||||||
|
# Check for invalid key "node"
|
||||||
|
if [ "${key}" = 'node' ]; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for duplicate keys
|
||||||
|
if nvm_echo "${keys}" | nvm_grep -q -E "(^| )${key}( |$)"; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
keys="${keys} ${key}"
|
||||||
|
values="${values} ${value}"
|
||||||
|
else
|
||||||
|
if [ -n "${unpaired_line}" ]; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
unpaired_line="${line}"
|
||||||
|
fi
|
||||||
|
done <<EOF
|
||||||
|
$lines
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ -z "${unpaired_line}" ]; then
|
||||||
|
nvm_nvmrc_invalid_msg "${lines}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
nvm_echo "${unpaired_line}"
|
||||||
|
}
|
||||||
|
|
||||||
nvm_rc_version() {
|
nvm_rc_version() {
|
||||||
export NVM_RC_VERSION=''
|
export NVM_RC_VERSION=''
|
||||||
local NVMRC_PATH
|
local NVMRC_PATH
|
||||||
@@ -478,7 +560,12 @@ nvm_rc_version() {
|
|||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
NVM_RC_VERSION="$(command head -n 1 "${NVMRC_PATH}" | command tr -d '\r')" || command printf ''
|
|
||||||
|
|
||||||
|
if ! NVM_RC_VERSION="$(nvm_process_nvmrc "${NVMRC_PATH}")"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "${NVM_RC_VERSION}" ]; then
|
if [ -z "${NVM_RC_VERSION}" ]; then
|
||||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||||
nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\""
|
nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\""
|
||||||
@@ -3565,7 +3652,7 @@ nvm() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
export PATH="${NEWPATH}"
|
export PATH="${NEWPATH}"
|
||||||
command hash -r
|
\hash -r
|
||||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||||
nvm_echo "${NVM_DIR}/*/bin removed from \${PATH}"
|
nvm_echo "${NVM_DIR}/*/bin removed from \${PATH}"
|
||||||
fi
|
fi
|
||||||
@@ -3697,7 +3784,7 @@ nvm() {
|
|||||||
export MANPATH
|
export MANPATH
|
||||||
fi
|
fi
|
||||||
export PATH
|
export PATH
|
||||||
command hash -r
|
\hash -r
|
||||||
export NVM_BIN="${NVM_VERSION_DIR}/bin"
|
export NVM_BIN="${NVM_VERSION_DIR}/bin"
|
||||||
export NVM_INC="${NVM_VERSION_DIR}/include/node"
|
export NVM_INC="${NVM_VERSION_DIR}/include/node"
|
||||||
if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
|
if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
|
||||||
@@ -4058,6 +4145,9 @@ nvm() {
|
|||||||
# so, unalias it.
|
# so, unalias it.
|
||||||
nvm unalias "${ALIAS}"
|
nvm unalias "${ALIAS}"
|
||||||
return $?
|
return $?
|
||||||
|
elif echo "${ALIAS}" | grep -q "#"; then
|
||||||
|
nvm_err 'Aliases with a comment delimiter (#) are not supported.'
|
||||||
|
return 1
|
||||||
elif [ "${TARGET}" != '--' ]; then
|
elif [ "${TARGET}" != '--' ]; then
|
||||||
# a target was passed: create an alias
|
# a target was passed: create an alias
|
||||||
if [ "${ALIAS#*\/}" != "${ALIAS}" ]; then
|
if [ "${ALIAS#*\/}" != "${ALIAS}" ]; then
|
||||||
@@ -4226,7 +4316,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.6'
|
nvm_echo '0.39.7'
|
||||||
;;
|
;;
|
||||||
"unload")
|
"unload")
|
||||||
nvm deactivate >/dev/null 2>&1
|
nvm deactivate >/dev/null 2>&1
|
||||||
@@ -4271,6 +4361,7 @@ nvm() {
|
|||||||
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \
|
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \
|
||||||
nvm_echo_with_colors nvm_err_with_colors \
|
nvm_echo_with_colors nvm_err_with_colors \
|
||||||
nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \
|
nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \
|
||||||
|
nvm_process_nvmrc nvm_nvmrc_invalid_msg \
|
||||||
>/dev/null 2>&1
|
>/dev/null 2>&1
|
||||||
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
|
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
|
||||||
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
|
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nvm",
|
"name": "nvm",
|
||||||
"version": "0.39.6",
|
"version": "0.39.7",
|
||||||
"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.11.2",
|
"markdown-link-check": "^3.12.2",
|
||||||
"replace": "^1.2.2",
|
"replace": "^1.2.2",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.6.2",
|
||||||
"urchin": "^0.0.5"
|
"urchin": "^0.0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
144
test/common.sh
144
test/common.sh
@@ -101,3 +101,147 @@ watch() {
|
|||||||
kill %2;
|
kill %2;
|
||||||
return $EXIT_CODE
|
return $EXIT_CODE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# JSON parsing from https://gist.github.com/assaf/ee377a186371e2e269a7
|
||||||
|
nvm_json_throw() {
|
||||||
|
nvm_err "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
nvm_json_awk_egrep() {
|
||||||
|
local pattern_string
|
||||||
|
pattern_string="${1}"
|
||||||
|
|
||||||
|
awk '{
|
||||||
|
while ($0) {
|
||||||
|
start=match($0, pattern);
|
||||||
|
token=substr($0, start, RLENGTH);
|
||||||
|
print token;
|
||||||
|
$0=substr($0, start+RLENGTH);
|
||||||
|
}
|
||||||
|
}' "pattern=${pattern_string}"
|
||||||
|
}
|
||||||
|
|
||||||
|
nvm_json_tokenize() {
|
||||||
|
local GREP
|
||||||
|
GREP='grep -Eao'
|
||||||
|
|
||||||
|
local ESCAPE
|
||||||
|
local CHAR
|
||||||
|
|
||||||
|
# if echo "test string" | grep -Eo "test" > /dev/null 2>&1; then
|
||||||
|
# ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||||
|
# CHAR='[^[:cntrl:]"\\]'
|
||||||
|
# else
|
||||||
|
GREP=nvm_json_awk_egrep
|
||||||
|
ESCAPE='(\\\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||||
|
CHAR='[^[:cntrl:]"\\\\]'
|
||||||
|
# fi
|
||||||
|
|
||||||
|
local STRING
|
||||||
|
STRING="\"${CHAR}*(${ESCAPE}${CHAR}*)*\""
|
||||||
|
local NUMBER
|
||||||
|
NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'
|
||||||
|
local KEYWORD
|
||||||
|
KEYWORD='null|false|true'
|
||||||
|
local SPACE
|
||||||
|
SPACE='[[:space:]]+'
|
||||||
|
|
||||||
|
$GREP "${STRING}|${NUMBER}|${KEYWORD}|${SPACE}|." | TERM=dumb grep -Ev "^${SPACE}$"
|
||||||
|
}
|
||||||
|
|
||||||
|
_json_parse_array() {
|
||||||
|
local index=0
|
||||||
|
local ary=''
|
||||||
|
read -r token
|
||||||
|
case "$token" in
|
||||||
|
']') ;;
|
||||||
|
*)
|
||||||
|
while :; do
|
||||||
|
_json_parse_value "${1}" "${index}"
|
||||||
|
index=$((index+1))
|
||||||
|
ary="${ary}${value}"
|
||||||
|
read -r token
|
||||||
|
case "${token}" in
|
||||||
|
']') break ;;
|
||||||
|
',') ary="${ary}," ;;
|
||||||
|
*) nvm_json_throw "EXPECTED , or ] GOT ${token:-EOF}" ;;
|
||||||
|
esac
|
||||||
|
read -r token
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
_json_parse_object() {
|
||||||
|
local key
|
||||||
|
local obj=''
|
||||||
|
read -r token
|
||||||
|
case "$token" in
|
||||||
|
'}') ;;
|
||||||
|
*)
|
||||||
|
while :; do
|
||||||
|
case "${token}" in
|
||||||
|
'"'*'"') key="${token}" ;;
|
||||||
|
*) nvm_json_throw "EXPECTED string GOT ${token:-EOF}" ;;
|
||||||
|
esac
|
||||||
|
read -r token
|
||||||
|
case "${token}" in
|
||||||
|
':') ;;
|
||||||
|
*) nvm_json_throw "EXPECTED : GOT ${token:-EOF}" ;;
|
||||||
|
esac
|
||||||
|
read -r token
|
||||||
|
_json_parse_value "${1}" "${key}"
|
||||||
|
obj="${obj}${key}:${value}"
|
||||||
|
read -r token
|
||||||
|
case "${token}" in
|
||||||
|
'}') break ;;
|
||||||
|
',') obj="${obj}," ;;
|
||||||
|
*) nvm_json_throw "EXPECTED , or } GOT ${token:-EOF}" ;;
|
||||||
|
esac
|
||||||
|
read -r token
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
_json_parse_value() {
|
||||||
|
local jpath="${1:+$1,}$2"
|
||||||
|
local isleaf=0
|
||||||
|
local isempty=0
|
||||||
|
local print=0
|
||||||
|
|
||||||
|
case "$token" in
|
||||||
|
'{') _json_parse_object "${jpath}" ;;
|
||||||
|
'[') _json_parse_array "${jpath}" ;;
|
||||||
|
# At this point, the only valid single-character tokens are digits.
|
||||||
|
''|[!0-9]) nvm_json_throw "EXPECTED value GOT >${token:-EOF}<" ;;
|
||||||
|
*)
|
||||||
|
value=$token
|
||||||
|
isleaf=1
|
||||||
|
[ "${value}" = '""' ] && isempty=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ "${value}" = '' ] && return
|
||||||
|
[ "${isleaf}" -eq 1 ] && [ $isempty -eq 0 ] && print=1
|
||||||
|
[ "${print}" -eq 1 ] && printf "[%s]\t%s\n" "${jpath}" "${value}"
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
_json_parse() {
|
||||||
|
read -r token
|
||||||
|
_json_parse_value
|
||||||
|
read -r token
|
||||||
|
case "${token}" in
|
||||||
|
'') ;;
|
||||||
|
*) nvm_json_throw "EXPECTED EOF GOT >${token}<" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
nvm_json_extract() {
|
||||||
|
nvm_json_tokenize | _json_parse | grep -e "${1}" | awk '{print $2 $3}'
|
||||||
|
}
|
||||||
|
|||||||
26
test/fast/Aliases/'nvm alias' should not accept aliases with a hash
Executable file
26
test/fast/Aliases/'nvm alias' should not accept aliases with a hash
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
OUTPUT="$(nvm alias foo#bar baz 2>&1)"
|
||||||
|
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||||
|
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||||
|
|
||||||
|
EXIT_CODE="$(nvm alias foo#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||||
|
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||||
|
|
||||||
|
OUTPUT="$(nvm alias foo# baz 2>&1)"
|
||||||
|
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||||
|
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||||
|
|
||||||
|
EXIT_CODE="$(nvm alias foo# baz >/dev/null 2>&1 ; echo $?)"
|
||||||
|
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias ending with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||||
|
|
||||||
|
OUTPUT="$(nvm alias \#bar baz 2>&1)"
|
||||||
|
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||||
|
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||||
|
|
||||||
|
EXIT_CODE="$(nvm alias \#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||||
|
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias starting with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||||
34
test/fast/Unit tests/nvm_process_nvmrc
Executable file
34
test/fast/Unit tests/nvm_process_nvmrc
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
die () { echo "$@" ; cleanup ; exit 1; }
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo 'cleaned up'
|
||||||
|
}
|
||||||
|
|
||||||
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
|
\. ../../common.sh
|
||||||
|
|
||||||
|
for f in ../../../test/fixtures/nvmrc/test/fixtures/valid/*; do
|
||||||
|
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||||
|
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||||
|
|
||||||
|
EXPECTED="$(nvm_json_extract node < "${f}/expected.json" | tr -d '"')"
|
||||||
|
|
||||||
|
[ "${EXIT_CODE}" = "0" ] || die "$(basename "${f}"): expected exit code of 0 but got ${EXIT_CODE}"
|
||||||
|
|
||||||
|
[ "${STDOUT}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDOUT of \`${EXPECTED}\` but got \`${STDOUT}\`"
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in ../../../test/fixtures/nvmrc/test/fixtures/invalid/*; do
|
||||||
|
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||||
|
STDERR="$(nvm_process_nvmrc $f/.nvmrc 2>&1 >/dev/null | awk '{if(NR > 8) print $0}' | strip_colors)"
|
||||||
|
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||||
|
|
||||||
|
EXPECTED="$(nvm_json_extract < "${f}/expected.json" | tr -d '"')"
|
||||||
|
|
||||||
|
[ "${EXIT_CODE}" != "0" ] || die "$(basename "${f}"): expected exit code of 'not 0' but got ${EXIT_CODE}"
|
||||||
|
|
||||||
|
[ "${STDERR}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDERR of \`${EXPECTED}\` but got \`${STDERR}\`"
|
||||||
|
done
|
||||||
1
test/fixtures/nvmrc
vendored
Submodule
1
test/fixtures/nvmrc
vendored
Submodule
Submodule test/fixtures/nvmrc added at 0d325aa903
Reference in New Issue
Block a user